测试Fedora CoreOS更新

确保您已完成中描述的步骤 初始设置页面 在开始本教程之前。

在本教程中,我们不会重点介绍资源调配,而是关注更新期间会发生什么,以及在出现故障时可以使用的选项。

下载较旧的Fedora CoreOS版本

Fedora CoreOS的定义功能之一是自动更新。要查看它们的运行情况,我们必须下载较旧的Fedora CoreOS版本。开始时,从 Fedora CoreOS发布页面

# replace "XX.XXXXXXXX.X.X" with one of older release IDs from the release page above (e.g. "34.20210919.3.0")
RELEASE="XX.XXXXXXXX.X.X"
curl -O https://builds.coreos.fedoraproject.org/prod/streams/stable/builds/$RELEASE/x86_64/fedora-coreos-$RELEASE-qemu.x86_64.qcow2.xz
curl -O https://builds.coreos.fedoraproject.org/prod/streams/stable/builds/$RELEASE/x86_64/fedora-coreos-$RELEASE-qemu.x86_64.qcow2.xz.sig

下载归档文件后,请确保验证其完整性:

gpg --verify fedora-coreos-$RELEASE-qemu.x86_64.qcow2.xz.sig
在输出中查找*“Good Signature From”*。

验证存档后,可以使用以下命令将其解压缩:

unxz fedora-coreos-$RELEASE-qemu.x86_64.qcow2.xz

为了使教程更简单,您应该将此图像重命名为一个较短的名称:

mv fedora-coreos-$RELEASE-qemu.x86_64.qcow2 fedora-coreos-older.qcow2

写入Butane配置并转换为Ignition

我们将创建Butane配置,该配置:

  • 设置控制台自动登录。

  • 提高内核控制台日志记录级别以对控制台隐藏审核消息。

  • 为添加SSH密钥 core 用户。

让我们将这个Butane配置写入一个名为 updates.bu

variant: fcos
version: 1.4.0
passwd:
  users:
    - name: core
      ssh_authorized_keys:
        - ssh-rsa AAAA...
systemd:
  units:
    - name: serial-getty@ttyS0.service
      dropins:
      - name: autologin-core.conf
        contents: |
          [Service]
          # Override Execstart in main unit
          ExecStart=
          # Add new Execstart with `-` prefix to ignore failure
          ExecStart=-/usr/sbin/agetty --autologin core --noclear %I $TERM
          TTYVTDisallocate=no
storage:
  files:
    - path: /etc/profile.d/systemd-pager.sh
      mode: 0644
      contents:
        inline: |
          # Tell systemd to not use a pager when printing information
          export SYSTEMD_PAGER=cat
    - path: /etc/sysctl.d/20-silence-audit.conf
      mode: 0644
      contents:
        inline: |
          # Raise console message logging level from DEBUG (7) to WARNING (4)
          # to hide audit messages from the interactive console
          kernel.printk=4
您还可以选择将YAML文件中的SSH pubkey替换为您自己的公钥,这样您就可以登录到引导的实例。如果您选择不执行此操作,您仍将自动登录到串口控制台。

运行Butane将其转换为Ignition配置:

butane --pretty --strict updates.bu --output updates.ign

启动和初始更新

现在让我们对其进行配置。确保在此步骤中从较旧的Fedora CoreOS映像开始:

# Setup the correct SELinux label to allow access to the config
chcon --verbose --type svirt_home_t updates.ign

# Start a Fedora CoreOS virtual machine
virt-install --name=fcos --vcpus=2 --ram=2048 --os-variant=fedora-coreos-stable \
    --import --network=bridge=virbr0 --graphics=none \
    --qemu-commandline="-fw_cfg name=opt/com.coreos/config,file=${PWD}/updates.ign" \
    --disk=size=20,backing_store=${PWD}/fedora-coreos-older.qcow2

由于系统不是最新的,津卡迪将注意到这一点,并将开始更新系统。您应该会立即看到更新过程正在进行:

在初始检查期间,所有必要的网络服务可能未启动并运行。在这种情况下,Zincati将在大约5分钟内再次检查更新。

[core@localhost~]$system ctl状态—​完整的zincati.service Zincati.service-Zincati更新代理 已加载:已加载(/usr/lib/systemd/system/zincati.service;已启用;供应商预设:已启用) 活动:自UTC 2021-11-30 13:56:05以来活动(运行);5分钟前 文档: https://github.com/coreos/zincati 主PID值:1026(锌) 状态:“在远程找到更新:35.20211029.3.0” 任务数:11(限额:2262) 内存:20.0M CPU:192ms Cgroup:/system.Slice/zincati.service ├─1026/USR/libexec/zincati代理-v 锁定2308 rpm-ostree部署—​锁定-完成revision=ccdac241ed4b83b55e4d72e864923679c00a15804fbea7d1e638e67c2a08dd5c--└─--不允许-降级

11月30日13:56:04本地主机zincati[1026]:[info zincati::cincinnati]辛辛那提服务: https://updates.coreos.fedoraproject.org 11月30日13:56:04本地主机zincati[1026]:[info zincati::cli::agent]在更新组‘Default’中的节点‘0d817dcff294404895a7a33727980fe8’上运行的代理 Nov 30 13:56:04本地主机zincati[1026]:[info zincati::UPDATE_AGENT::ACTOR]正在注册为rpm-ostree的更新驱动程序 11月30日13:56:05本地主机zincati[1026]:[info zincati::UPDATE_AGENT::ACTOR]初始化完成,已启用自动更新逻辑 11月30日13:56:05本地主机zincati[1026]:[info zincati::Strategy]更新策略:立即 11月30日13:56:05本地主机zincati[1026]:[info zincati::UPDATE_AGENT::ACTOR]达到稳定状态,定期轮询更新 11月30日13:56:05本地主机系统d[1]:已启动Zincati更新代理。 11月30日13:56:05本地主机zincati[1026]:[error zincati::cincinnati]无法检查辛辛那提的更新:客户端错误:发送url请求时出错( https://updates.coreos.fedoraproject.org/v1/graph?os_checksum=6334e11901fba7403600522286d817b520eeb15b66b341b392e0c08ed2576b74&stream=stable&os_version=34.20210919.3.0&basearch=x86_64&group=default&node_uuid=0d817dcff294404895a7a33727980fe8&platform=qemu): error trying to connect: dns error: failed to lookup address information: Name or service not known 11月30日14:01:12本地主机zincati[1026]:[info zincati::cincinnati]检测到当前版本不是死胡同 11月30日14:01:13本地主机zincati[1026]:[info zincati::UPDATE_AGENT::ACTOR]目标版本‘35.20211029.3.0’已选定,正在进行转储

[core@localhost~]$rpm-ostree状态 状态:正忙 自动更新驱动程序:Zincati DriverState:激活;在远程:35.20211029.3.0上找到更新 事务:部署—​锁定—​完成revision=ccdac241ed4b83b55e4d72e864923679c00a15804fbea7d1e638e67c2a08dd5c—​不允许—​降级 发起人:呼叫者:1.28 部署: Fedora:Fedora/x86_64/CoreOS/STRATE 版本:34.20210919.3.0(2021-10-04T17:11:11Z) 提交:6334e11901fba7403600522286d817b520eeb15b66b341b392e0c08ed2576b74 GPG签名:8C5BA6990BDB26E19F2A1A801161AE6945719A39的有效签名

[core@localhost~]$system ctl状态—​完整的zincati.service Zincati.service-Zincati更新代理 已加载:已加载(/usr/lib/systemd/system/zincati.service;已启用;供应商预设:已启用) 活动:自UTC 2021-11-30 13:56:05以来活动(运行);7分钟前 文档: https://github.com/coreos/zincati 主PID值:1026(锌) 状态:“更新分段:35.20211029.3.0;由于活动的用户会话导致重新启动延迟” 任务数:5(限额:2262) 内存:16.6M CPU:229ms Cgroup:/system.Slice/zincati.service └─1026/USR/libexec/zincati代理-v

11月30日13:56:04本地主机zincati[1026]:[info zincati::cli::agent]在更新组‘Default’中的节点‘0d817dcff294404895a7a33727980fe8’上运行的代理 Nov 30 13:56:04本地主机zincati[1026]:[info zincati::UPDATE_AGENT::ACTOR]正在注册为rpm-ostree的更新驱动程序 11月30日13:56:05本地主机zincati[1026]:[info zincati::UPDATE_AGENT::ACTOR]初始化完成,已启用自动更新逻辑 11月30日13:56:05本地主机zincati[1026]:[info zincati::Strategy]更新策略:立即 11月30日13:56:05本地主机zincati[1026]:[info zincati::UPDATE_AGENT::ACTOR]达到稳定状态,定期轮询更新 11月30日13:56:05本地主机系统d[1]:已启动Zincati更新代理。 11月30日13:56:05本地主机zincati[1026]:[error zincati::cincinnati]无法检查辛辛那提的更新:客户端错误:发送url请求时出错( https://updates.coreos.fedoraproject.org/v1/graph?os_checksum=6334e11901fba7403600522286d817b520eeb15b66b341b392e0c08ed2576b74&stream=stable&os_version=34.20210919.3.0&basearch=x86_64&group=default&node_uuid=0d817dcff294404895a7a33727980fe8&platform=qemu): error trying to connect: dns error: failed to lookup address information: Name or service not known 11月30日14:01:12本地主机zincati[1026]:[info zincati::cincinnati]检测到当前版本不是死胡同 11月30日14:01:13本地主机zincati[1026]:[info zincati::UPDATE_AGENT::ACTOR]目标版本‘35.20211029.3.0’已选定,正在进行转储 11月30日14:02:55本地主持人zincati[1026]:[info zincati::UPDATE_AGENT::ACTOR]更新分段:35.20211029.3.0

暂存更新后不久,系统应重新启动以应用最新更新。您可能需要停止自动登录服务才能启动重新启动。

UTC时间2021-11-30 14:02:55来自津卡蒂的广播消息: 新的更新35.20211029.3.0现已发布并已部署。 如果在更新策略允许的情况下,Zincati将在所有 交互式用户已注销,或在10分钟内注销,以较早的时间为准。 请注销所有活动会话,以便自动更新过程继续。 [core@localhost~]$sudo system ctl停止序列-getty@ttyS0.service

当我们重新登录时,我们可以看到Fedora CoreOS的当前版本现在是最新的。这个 rpm-ostree status 输出还将显示旧版本,该版本仍然存在,以防我们需要回滚:

[core@localhost~]$rpm-ostree状态 状态:空闲 自动更新驱动程序:Zincati DriverState:激活;定期轮询更新(上次检查Tue 2021-11-30 14:22:41 UTC) 部署: Fedora:Fedora/x86_64/CoreOS/STRATE 版本:35.20211029.3.0(2021-11-17T23:45:08Z) 提交:ccdac241ed4b83b55e4d72e864923679c00a15804fbea7d1e638e67c2a08dd5c GPG签名:787EA6AE1147EEE56C40B30CDB4639719867C58F的有效签名

Fedora:Fedora/x86_64/CoreOS/STRATE
                 版本:34.20210919.3.0(2021-10-04T17:11:11Z)
                  提交:6334e11901fba7403600522286d817b520eeb15b66b341b392e0c08ed2576b74
            GPG签名:8C5BA6990BDB26E19F2A1A801161AE6945719A39的有效签名
当前引导的部署由 性格。

您可以通过运行 rpm-ostree db diff 命令:

[core@localhost~]$rpm-ostree数据库差异 Ostree Diff Commit From:回滚部署(6334e11901fba7403600522286d817b520eeb15b66b341b392e0c08ed2576b74) Ostree Diff承诺:启动部署(ccdac241ed4b83b55e4d72e864923679c00a15804fbea7d1e638e67c2a08dd5c) 已升级: 网络管理器1:1.30.6-1.fc34→1:1.32.12-2.fc35 网络管理器-云-设置1:1.30.6-1.fc34→1:1.32.12-2.fc35 网络管理器-libnm 1:1.30.6-1.fc34→1:1.32.12-2.fc35 网络管理器-团队1:1.30.6-1.fc34→1:1.32.12-2.fc35 网络管理器-Tui 1:1.30.6-1.fc34→1:1.32.12-2.fc35 WALinuxAgent-udev 2.3.1.1-1.fc34→2.3.1.1-2.fc35 .。。

恢复到以前的版本

如果系统由于任何原因不能完全运行,我们可以返回到以前的版本:

[core@localhost ~]$ sudo rpm-ostree rollback --reboot

在重新启动后重新登录后,我们可以看到,我们现在重新启动到升级之前的旧部署:

[core@localhost~]$rpm-ostree状态 状态:空闲 自动更新驱动程序:Zincati DriverState:激活;定期轮询更新(上次检查Tue 2021-11-30 15:17:47 UTC) 部署: Fedora:Fedora/x86_64/CoreOS/STRATE 版本:34.20211031.3.0(2021-11-08T23:55:31Z) 提交:056a1508fad0eecb740cf10a949d2292e11084195f1defbf455f418a5991daa2 GPG签名:8C5BA6990BDB26E19F2A1A801161AE6945719A39的有效签名

Fedora:Fedora/x86_64/CoreOS/STRATE
                 版本:35.20211029.3.0(2021-11-17T23:45:08Z)
                  提交:ccdac241ed4b83b55e4d72e864923679c00a15804fbea7d1e638e67c2a08dd5c
            GPG签名:787EA6AE1147EEE56C40B30CDB4639719867C58F的有效签名

您还可以验证Zincati不会尝试更新到我们刚刚从以下位置回滚的新版本:

[core@localhost~]$system ctl状态—​完整的zincati.service Zincati.service-Zincati更新代理 已加载:已加载(/usr/lib/systemd/system/zincati.service;已启用;供应商预设:已启用) 活动:自星期二起活动(运行)2021-11-30 15:36:04 UTC;19秒前 文档: https://github.com/coreos/zincati 主PID:802(金卡迪) 状态:“在远程找到更新:34.20211031.3.0” 任务数:10(限额:2262) 内存:23.4M CPU:169毫秒 Cgroup:/system.Slice/zincati.service ├─802/USR/libexec/zincati代理-v 锁定2814rpm-ostree部署—​锁定-完成revision=056a1508fad0eecb740cf10a949d2292e11084195f1defbf455f418a5991daa2--└─--不允许-降级

11月30日15:36:03本地主机zincati[802]:[info zincati::cli::agent]在更新组‘Default’的节点‘8d67840e25884927aaeb72f64e100046’上运行的代理 11月30日15:36:03本地主机zincati[802]:[info zincati::UPDATE_AGENT::ACTOR]正在注册为rpm-ostree的更新驱动程序 11月30日15:36:04本地主机zincati[802]:[info zincati::UPDATE_AGENT::ACTOR]找到其他1个最终部署 11月30日15:36:04本地主机zincati[802]:[info zincati::UPDATE_AGENT::ACTOR]部署35.20211029.3.0(ccdac241ed4b83b55e4d72e864923679c00a15804fbea7d1e638e67c2a08dd5c)将被排除在未来的更新目标之外 11月30日15:36:04本地主机zincati[802]:[info zincati::UPDATE_AGENT::ACTOR]初始化完成,已启用自动更新逻辑

清理

现在,让我们为下一个测试取下实例。通过按断开与串行控制台的连接 CTRL + ] 或来自SSH,然后销毁机器:

病毒摧毁fcos 未定义病毒—​删除所有存储fcos

结论

在这些教程中,我们了解了一些关于Fedora CoreOS的知识。我们了解了如何将其作为预先创建的磁盘映像提供,如何通过Ignition以自动方式进行配置,以及如何通过Zincati和rpm-ostree配置和实现自动更新。下一步是针对您自己的用例尝试Fedora CoreOS,并 加入社区 好了!