如果不知从何处入手Fedora CoreOS,那就看看本文,内容有:Fedora CoreOS的理念、入门、创建配置、安装并运行Fedora CoreOS、zincati,rpm-ostree和自动更新、删除虚拟机。
Fedora CoreOS的理念
Fedora CoreOS(FCOS)来自CoreOS Container Linux和Fedora Atomic Host的合并,它是一款最小化的整体操作系统,专注于运行容器化的应用程序,安全性是一流的,FCOS提供自动更新并带有SELinux强化功能。
为了使自动更新正常工作,它们必须非常强大,目标是运行FCOS的服务器在更新后不会中断,这是通过使用不同的发布流来实现的,每个流每2周发布一次,并将内容从一个流提升为另一流,这样一来,稳定流中的更新落地就有机会在很长一段时间内得到测试。
入门
在本示例中,我们使用稳定流和可以作为虚拟机运行的QEMU基本映像,您可以使用coreos-installer下载该映像,地址在https://github.com/coreos/coreos-installer/releases。
在更新到映像的链接后,从工作站终端运行以下命令,另外在Silverblue上,基于容器的coreos工具是最简单的尝试方法,可以在https://docs.fedoraproject.org/en-US/fedora-coreos/tutorial-setup/上找到说明,尤其是使用Podman或Docker进行设置,即Setup with Podman or Docker:
$ sudo dnf install coreos-installer
$ coreos-installer download --image-url https://builds.coreos.fedoraproject.org/prod/streams/stable/builds/32.20200907.3.0/x86_64/fedora-coreos-32.20200907.3.0-qemu.x86_64.qcow2.xz
$ xz -d fedora-coreos-32.20200907.3.0-qemu.x86_64.qcow2.xz
$ ls
fedora-coreos-32.20200907.3.0-qemu.x86_64.qcow2
创建配置
要自定义FCOS系统,您需要提供一个配置文件,Ignition将使用该文件来配置系统,您可以使用此文件来配置诸如创建用户、添加受信任的SSH密钥、启用系统服务等功能。
以下配置将创建一个“core”用户,并将SSH密钥添加到authorized_keys文件中,它还正在创建一个使用podman运行简单的hello world容器的systemd服务:
version: "1.0.0"
variant: fcos
passwd:
users:
- name: core
ssh_authorized_keys:
- ssh-ed25519 my_public_ssh_key_hash fcos_key
systemd:
units:
-
contents: |
[Unit]
Description=Run a hello world web service
After=network-online.target
Wants=network-online.target
[Service]
ExecStart=/bin/podman run --pull=always --name=hello --net=host -p 8080:8080 quay.io/cverna/hello
ExecStop=/bin/podman rm -f hello
[Install]
WantedBy=multi-user.target
enabled: true
name: hello.service
在配置中添加SSH密钥后,将其另存为config.yaml,接下来,使用Fedora CoreOS Config Transpiler(fcct)工具将此YAML配置转换为有效的Ignition配置(JSON格式)。
直接从Fedora的存储库安装fcct或从GitHub获取二进制文件,地址在https://github.com/coreos/fcct/releases:
$ sudo dnf install fcct
$ fcct -output config.ign config.yaml
安装并运行Fedora CoreOS
要运行该映像,可以使用libvirt堆栈,使用dnf软件包管理器将其安装在Fedora系统上:
$ sudo dnf install @virtualization
现在,我们创建并运行Fedora CoreOS虚拟机:
$ chcon --verbose unconfined_u:object_r:svirt_home_t:s0 config.ign
$ virt-install --name=fcos \
--vcpus=2 \
--ram=2048 \
--import \
--network=bridge=virbr0 \
--graphics=none \
--qemu-commandline="-fw_cfg name=opt/com.coreos/config,file=${PWD}/config.ign" \
--disk=size=20,backing_store=${PWD}/fedora-coreos-32.20200907.3.0-qemu.x86_64.qcow2
安装成功后,将显示一些信息并提供登录提示:
Fedora CoreOS 32.20200907.3.0
Kernel 5.8.10-200.fc32.x86_64 on an x86_64 (ttyS0)
SSH host key: SHA256:BJYN7AQZrwKZ7ZF8fWSI9YRhI++KMyeJeDVOE6rQ27U (ED25519)
SSH host key: SHA256:W3wfZp7EGkLuM3z4cy1ZJSMFLntYyW1kqAqKkxyuZrE (ECDSA)
SSH host key: SHA256:gb7/4Qo5aYhEjgoDZbrm8t1D0msgGYsQ0xhW5BAuZz0 (RSA)
ens2: 192.168.122.237 fe80::5054:ff:fef7:1a73
Ignition: user provided config was applied
Ignition: wrote ssh authorized keys file for user: core
Ignition配置文件未为核心用户提供任何密码,因此无法直接通过控制台登录,但是,可以通过Ignition配置为用户配置密码。
使用Ctrl+]组合键退出虚拟机的控制台,然后检查hello.service是否正在运行:
$ curl http://192.168.122.237:8080
Hello from Fedora CoreOS!
使用预配置的SSH密钥,您还可以访问VM并检查在VM上运行的服务:
$ ssh core@192.168.122.237
$ systemctl status hello
hello.service - Run a hello world web service
Loaded: loaded (/etc/systemd/system/hello.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2020-10-28 10:10:26 UTC; 42s ago
zincati,rpm-ostree和自动更新
zincati服务通过自动更新来驱动rpm-ostreed。
检查VM当前正在运行哪个Fedora CoreOS版本,并检查Zincati是否找到更新:
$ ssh core@192.168.122.237
$ rpm-ostree status
State: idle
Deployments:
ostree://fedora:fedora/x86_64/coreos/stable
Version: 32.20200907.3.0 (2020-09-23T08:16:31Z)
Commit: b53de8b03134c5e6b683b5ea471888e9e1b193781794f01b9ed5865b57f35d57
GPGSignature: Valid signature by 97A1AE57C3A2372CCA3A4ABA6C13026D12C944D0
$ systemctl status zincati
zincati.service - Zincati Update Agent
Loaded: loaded (/usr/lib/systemd/system/zincati.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2020-10-28 13:36:23 UTC; 7s ago
…
Oct 28 13:36:24 cosa-devsh zincati[1013]: [INFO ] initialization complete, auto-updates logic enabled
Oct 28 13:36:25 cosa-devsh zincati[1013]: [INFO ] target release '32.20201004.3.0' selected, proceeding to stage it
... zincati reboot ...
重新启动后,让我们再次进行远程登录以检查新版本的Fedora CoreOS:
$ ssh core@192.168.122.237
$ rpm-ostree status
State: idle
Deployments:
ostree://fedora:fedora/x86_64/coreos/stable
Version: 32.20201004.3.0 (2020-10-19T17:12:33Z)
Commit: 64bb377ae7e6949c26cfe819f3f0bd517596d461e437f2f6e9f1f3c24376fd30
GPGSignature: Valid signature by 97A1AE57C3A2372CCA3A4ABA6C13026D12C944D0
ostree://fedora:fedora/x86_64/coreos/stable
Version: 32.20200907.3.0 (2020-09-23T08:16:31Z)
Commit: b53de8b03134c5e6b683b5ea471888e9e1b193781794f01b9ed5865b57f35d57
GPGSignature: Valid signature by 97A1AE57C3A2372CCA3A4ABA6C13026D12C944D0
rpm-ostree状态现在显示Fedora CoreOS的两个版本,一个出现在QEMU映像中,一个是从更新中获得的最新版本,通过提供这两个版本,可以使用rpm-ostree rollback命令回滚到以前的版本。
最后,您可以确保hello服务仍在运行并正在提供内容:
$ curl http://192.168.122.237:8080
Hello from Fedora CoreOS!
删除虚拟机
为了随后进行清理,以下命令将删除VM和关联的存储:
$ virsh destroy fcos
$ virsh undefine --remove-all-storage fcos
结论
Fedora CoreOS提供了一个坚实而安全的操作系统,专门用于在容器中运行应用程序,它在DevOps环境中表现出色,该环境鼓励使用声明性配置文件来配置主机,支持自动更新和回滚到OS的先前版本的功能使服务运行更令人放心,更有保障。
相关主题