7.4. 使用集群外分层应用自定义分层镜像
您可以在特定机器配置池中的节点上轻松配置 Red Hat Enterprise Linux CoreOS (RHCOS) 镜像层。Machine Config Operator (MCO) 使用新的自定义分层镜像重启这些节点,覆盖基本 Red Hat Enterprise Linux CoreOS (RHCOS) 镜像。
要将自定义分层镜像应用到集群,您必须在集群可访问的存储库中具有自定义层次镜像。然后,创建一个指向自定义分层镜像的 MachineConfig 对象。对于每个需要配置的集群配置池,都需要一个独立的 MachineConfig 对象。
当您配置自定义分层镜像时,OpenShift Container Platform 不再自动更新任何使用自定义分层镜像的节点。根据需要手动进行节点更新是您自己的责任。如果您回滚自定义层,OpenShift Container Platform 将再次自动更新该节点。有关更新使用自定义分层镜像的节点的重要信息,请参阅以下附加资源部分。
先决条件
您必须创建一个基于 OpenShift Container Platform 镜像摘要的自定义层次镜像,而不是标签。
注意您应该使用与集群的其余部分上安装相同的基本 RHCOS 镜像。使用
oc adm release info --image-for rhel-coreos命令获取集群中使用的基础镜像。例如,以下 Containerfile 从 OpenShift Container Platform 4.16 镜像创建一个自定义层次镜像,并使用 CentOS 9 Stream 中的内核软件包覆盖内核软件包:
自定义层镜像的 Containerfile 示例
# Using a 4.16.0 image FROM quay.io/openshift-release-dev/ocp-v4.0-art-dev@sha256...1 #Install hotfix rpm RUN rpm-ostree override replace http://mirror.stream.centos.org/9-stream/BaseOS/x86_64/os/Packages/kernel-{,core-,modules-,modules-core-,modules-extra-}5.14.0-295.el9.x86_64.rpm && \2 rpm-ostree cleanup -m && \ ostree container commit注意有关如何创建 Containerfile 的说明超出了本文档的范围。
-
由于构建自定义分层镜像的过程是在集群之外执行,所以您必须在 Podman 或 Buildah 中使用
--authfile /path/to/pull-secret选项。或者,要自动读取这些工具的 pull secret,您可以将其添加到默认文件位置之一:~/.docker/config.json,$XDG_RUNTIME_DIR/containers/auth.json,~/.docker/config.json, 或~/.dockercfg。如需更多信息,请参阅containers-auth.json手册页。 - 您必须将自定义分层镜像推送到集群可访问的存储库。
流程
创建机器配置文件。
创建一个类似以下示例的 YAML 文件:
apiVersion: machineconfiguration.openshift.io/v1 kind: MachineConfig metadata: labels: machineconfiguration.openshift.io/role: worker1 name: os-layer-custom spec: osImageURL: quay.io/my-registry/custom-image@sha256...2 创建
MachineConfig对象:$ oc create -f <file_name>.yaml重要强烈建议您在推出集群前测试生产环境中的镜像。
验证
您可以通过执行以下任一方式来验证是否应用了自定义层次镜像:
检查 worker 机器配置池已使用新机器配置推出:
检查是否创建了新机器配置:
$ oc get mc输出示例
NAME GENERATEDBYCONTROLLER IGNITIONVERSION AGE 00-master 5bdb57489b720096ef912f738b46330a8f577803 3.4.0 95m 00-worker 5bdb57489b720096ef912f738b46330a8f577803 3.4.0 95m 01-master-container-runtime 5bdb57489b720096ef912f738b46330a8f577803 3.4.0 95m 01-master-kubelet 5bdb57489b720096ef912f738b46330a8f577803 3.4.0 95m 01-worker-container-runtime 5bdb57489b720096ef912f738b46330a8f577803 3.4.0 95m 01-worker-kubelet 5bdb57489b720096ef912f738b46330a8f577803 3.4.0 95m 99-master-generated-registries 5bdb57489b720096ef912f738b46330a8f577803 3.4.0 95m 99-master-ssh 3.2.0 98m 99-worker-generated-registries 5bdb57489b720096ef912f738b46330a8f577803 3.4.0 95m 99-worker-ssh 3.2.0 98m os-layer-custom 10s1 rendered-master-15961f1da260f7be141006404d17d39b 5bdb57489b720096ef912f738b46330a8f577803 3.4.0 95m rendered-worker-5aff604cb1381a4fe07feaf1595a797e 5bdb57489b720096ef912f738b46330a8f577803 3.4.0 95m rendered-worker-5de4837625b1cbc237de6b22bc0bc873 5bdb57489b720096ef912f738b46330a8f577803 3.4.0 4s2 检查新机器配置中的
osImageURL值是否指向预期的镜像:$ oc describe mc rendered-worker-5de4837625b1cbc237de6b22bc0bc873输出示例
Name: rendered-worker-5de4837625b1cbc237de6b22bc0bc873 Namespace: Labels: <none> Annotations: machineconfiguration.openshift.io/generated-by-controller-version: 5bdb57489b720096ef912f738b46330a8f577803 machineconfiguration.openshift.io/release-image-version: 4.16.0-ec.3 API Version: machineconfiguration.openshift.io/v1 Kind: MachineConfig ... Os Image URL: quay.io/my-registry/custom-image@sha256...检查关联的机器配置池是否使用新机器配置更新:
$ oc get mcp输出示例
NAME CONFIG UPDATED UPDATING DEGRADED MACHINECOUNT READYMACHINECOUNT UPDATEDMACHINECOUNT DEGRADEDMACHINECOUNT AGE master rendered-master-15961f1da260f7be141006404d17d39b True False False 3 3 3 0 39m worker rendered-worker-5de4837625b1cbc237de6b22bc0bc873 True False False 3 0 0 0 39m1 - 1
- 当
UPDATING字段为True时,机器配置池会使用新机器配置进行更新。在这种情况下,您将无法在输出看到新机器配置列表。当字段变为False时,代表 worker 机器配置池已应用到新机器配置。
检查节点以查看是否禁用了在节点上调度。这表示要应用更改:
$ oc get nodes输出示例
NAME STATUS ROLES AGE VERSION ip-10-0-148-79.us-west-1.compute.internal Ready worker 32m v1.29.4 ip-10-0-155-125.us-west-1.compute.internal Ready,SchedulingDisabled worker 35m v1.29.4 ip-10-0-170-47.us-west-1.compute.internal Ready control-plane,master 42m v1.29.4 ip-10-0-174-77.us-west-1.compute.internal Ready control-plane,master 42m v1.29.4 ip-10-0-211-49.us-west-1.compute.internal Ready control-plane,master 42m v1.29.4 ip-10-0-218-151.us-west-1.compute.internal Ready worker 31m v1.29.4
当节点重新处于
Ready状态时,检查该节点是否使用自定义分层镜像:打开节点的
oc debug会话。例如:$ oc debug node/ip-10-0-155-125.us-west-1.compute.internal将
/host设置为 debug shell 中的根目录:sh-4.4# chroot /host运行
rpm-ostree status命令,以查看自定义分层镜像正在使用:sh-4.4# sudo rpm-ostree status输出示例
State: idle Deployments: * ostree-unverified-registry:quay.io/my-registry/... Digest: sha256:...
其他资源