14.4. 在没有 OpenShift Update Service 的断开连接的环境中更新集群
使用以下步骤在断开连接的环境中更新集群,而无需访问 OpenShift Update Service。
14.4.1. 先决条件 复制链接链接已复制到粘贴板!
-
您必须安装了
oc命令行界面(CLI)工具。 - 您必须使用容器镜像置备本地容器镜像 registry,如镜像 OpenShift Container Platform 镜像存储库 中所述。
-
您必须可以使用具有
admin权限的用户访问集群。请参阅使用 RBAC 定义和应用权限。 - 您需要具有最新的 etcd 备份,以防因为升级失败需要将集群恢复到以前的状态。
- 确保所有机器配置池 (MCP) 都正在运行且未暂停。在更新过程中跳过与暂停 MCP 关联的节点。如果要执行 canary rollout 更新策略,可以暂停 MCP。
- 如果您的集群使用手动维护的凭证,请更新新发行版本的云供应商资源。如需更多信息,包括如何确定这是集群的要求,请参阅准备使用手动维护的凭证更新集群。
-
如果您运行 Operator 或您已配置了 pod 中断预算,您可能会在升级过程中遇到中断。如果在
PodDisruptionBudget中将minAvailable设置为 1,则节点会排空以应用可能会阻止驱除过程的待处理机器配置。如果重启了几个节点,则所有 pod 只能有一个节点上运行,PodDisruptionBudget字段可能会阻止节点排空。
如果您运行 Operator 或您已配置了 pod 中断预算,您可能会在升级过程中遇到中断。如果在 PodDisruptionBudget 中将 minAvailable 设置为 1,则节点会排空以应用可能会阻止驱除过程的待处理机器配置。如果重启了几个节点,则所有 pod 只能有一个节点上运行,PodDisruptionBudget 字段可能会阻止节点排空。
14.4.2. 暂停 MachineHealthCheck 资源 复制链接链接已复制到粘贴板!
在升级过程中,集群中的节点可能会临时不可用。对于 worker 节点,机器健康检查可能会认为这样的节点不健康,并重新引导它们。为避免重新引导这样的节点,请在更新集群前暂停所有 MachineHealthCheck 资源。
先决条件
-
安装 OpenShift CLI (
oc) 。
流程
要列出您要暂停的所有可用
MachineHealthCheck资源,请运行以下命令:oc get machinehealthcheck -n openshift-machine-api
$ oc get machinehealthcheck -n openshift-machine-apiCopy to Clipboard Copied! Toggle word wrap Toggle overflow 要暂停机器健康检查,请将
cluster.x-k8s.io/paused=""注解添加到MachineHealthCheck资源。运行以下命令:oc -n openshift-machine-api annotate mhc <mhc-name> cluster.x-k8s.io/paused=""
$ oc -n openshift-machine-api annotate mhc <mhc-name> cluster.x-k8s.io/paused=""Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注解的
MachineHealthCheck资源类似以下 YAML 文件:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要更新集群后恢复机器健康检查。要恢复检查,请运行以下命令从
MachineHealthCheck资源中删除暂停注解:oc -n openshift-machine-api annotate mhc <mhc-name> cluster.x-k8s.io/paused-
$ oc -n openshift-machine-api annotate mhc <mhc-name> cluster.x-k8s.io/paused-Copy to Clipboard Copied! Toggle word wrap Toggle overflow
14.4.3. 检索发行镜像摘要 复制链接链接已复制到粘贴板!
要使用 oc adm upgrade 命令和 --to-image 选项在断开连接的环境中更新集群,您必须引用与目标发行镜像对应的 sha256 摘要。
流程
在连接到互联网的设备中运行以下命令:
oc adm release info -o 'jsonpath={.digest}{"\n"}' quay.io/openshift-release-dev/ocp-release:${OCP_RELEASE_VERSION}-${ARCHITECTURE}$ oc adm release info -o 'jsonpath={.digest}{"\n"}' quay.io/openshift-release-dev/ocp-release:${OCP_RELEASE_VERSION}-${ARCHITECTURE}Copy to Clipboard Copied! Toggle word wrap Toggle overflow 对于
{OCP_RELEASE_VERSION},请指定您要更新的 OpenShift Container Platform 版本,如4.10.16。对于
{ARCHITECTURE},请指定集群的构架,如x86_64,aarch64,s390x, 或ppc64le。输出示例
sha256:a8bfba3b6dddd1a2fbbead7dac65fe4fb8335089e4e7cae327f3bad334add31d
sha256:a8bfba3b6dddd1a2fbbead7dac65fe4fb8335089e4e7cae327f3bad334add31dCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 复制在更新集群时要使用的 sha256 摘要。
14.4.4. 更新断开连接的集群 复制链接链接已复制到粘贴板!
将受限网络集群更新至您下载的发行镜像的 OpenShift Container Platform 版本。
如果您有一个本地 OpenShift Update Service,您可以使用连接的 Web 控制台或 CLI 指令来更新,而不是使用此流程。
先决条件
- 您已将新发行版本的镜像镜像(mirror)到 registry。
您已将发行镜像签名 ConfigMap 在新发行版本中应用到集群。
注意发行镜像签名配置映射允许 Cluster Version Operator (CVO) 通过验证实际镜像签名是否与预期的签名匹配来确保发行镜像的完整性。
- 获取目标发行镜像的 sha256 摘要。
-
已安装 OpenShift CLI(
oc)。 -
您暂停所有
MachineHealthCheck资源。
流程
更新集群:
oc adm upgrade --allow-explicit-upgrade --to-image <defined_registry>/<defined_repository>@<digest>
$ oc adm upgrade --allow-explicit-upgrade --to-image <defined_registry>/<defined_repository>@<digest>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中:
<defined_registry>- 指定 mirror 到的镜像 registry 的名称。
<defined_repository>- 指定要在镜像 registry 中使用的镜像存储库的名称。
<digest>-
指定目标发行镜像的 sha256 摘要,例如
sha256:81154f5c03294534e1eaf0319bef7a601134f891689ccede5d705ef659aa8c92。
注意- 请参阅"镜像 OpenShift Container Platform 镜像"以查看如何定义您的镜像 registry 和存储库名称。
-
如果您使用
ImageContentSourcePolicy或ImageDigestMirrorSet,您可以使用规范 registry 和存储库名称,而不是您定义的名称。规范 registry 名称为quay.io,规范存储库名称为openshift-release-dev/ocp-release。 -
您只能为具有
ImageContentSourcePolicy、ImageDigestMirrorSet或ImageTagMirrorSet对象的集群配置全局 pull secret。您不能在项目中添加 pull secret。
14.4.5. 了解镜像 registry 仓库镜像 复制链接链接已复制到粘贴板!
通过设置容器 registry 存储库镜像,您可以执行以下任务:
- 配置 OpenShift Container Platform 集群,以便重定向从源镜像 registry 上的存储库拉取(pull)镜像的请求,并通过已镜像 (mirror) 的镜像 registry 上的存储库来解决该请求。
- 为每个目标存储库识别多个已镜像 (mirror)的存储库,以确保如果一个镜像停止运作,仍可使用其他镜像。
OpenShift Container Platform 中的存储库镜像包括以下属性:
- 镜像拉取(pull)可应对 registry 停机的问题。
- 在断开连接的环境中的集群可以从关键位置(如 quay.io)拉取镜像,并让公司防火墙后面的 registry 提供请求的镜像。
- 发出镜像拉取(pull)请求时尝试特定 registry 顺序,通常最后才会尝试持久性 registry。
-
您所输入的镜像信息会添加到 OpenShift Container Platform 集群中每个节点上的
/etc/containers/registries.conf文件中。 - 当节点从源存储库中请求镜像时,它会依次尝试每个已镜像的存储库,直到找到所请求的内容。如果所有镜像均失败,集群则会尝试源存储库。如果成功,则镜像拉取至节点中。
可通过以下方式设置存储库镜像:
在 OpenShift Container Platform 安装中:
通过拉取(pull) OpenShift Container Platform 所需的容器镜像,然后将这些镜像放至公司防火墙后,即可将 OpenShift Container Platform 安装到受限网络中的数据中心。
安装 OpenShift Container Platform 后:
如果您没有在 OpenShift Container Platform 安装过程中配置镜像,您可以在安装后使用以下自定义资源 (CR) 对象之一进行配置:
-
ImageDigestMirrorSet(IDMS).此对象允许您使用摘要规格从镜像 registry 中拉取镜像。IDMS CR 可让您设置回退策略,在镜像拉取失败时继续尝试从源 registry 中拉取。 -
ImageTagMirrorSet(ITMS)。此对象允许您使用镜像标签从已镜像的 registry 中拉取镜像。ITMS CR 可让您设置回退策略,在镜像拉取失败时继续尝试从源 registry 中拉取。 -
ImageContentSourcePolicy(ICSP)。此对象允许您使用摘要规格从镜像 registry 中拉取镜像。如果镜像无法正常工作,ICSP CR 始终回退到源 registry。
重要使用
ImageContentSourcePolicy(ICSP)对象配置存储库镜像是一个已弃用的功能。弃用的功能仍然包含在 OpenShift Container Platform 中,并将继续被支持。但是,这个功能会在以后的发行版本中被删除,且不建议在新的部署中使用。如果您有用于创建ImageContentSourcePolicy对象的 YAML 文件,您可以使用oc adm migrate icsp命令将这些文件转换为ImageDigestMirrorSetYAML 文件。如需更多信息,请参阅以下部分"协调 ImageContentSourcePolicy (ICSP)文件以进行镜像 registry 存储库镜像"。-
每个自定义资源对象都标识以下信息:
- 您希望镜像 (mirror) 的容器镜像存储库的源。
- 您希望为其提供从源存储库请求的内容的每个镜像存储库的单独条目。
请注意以下操作以及它们对节点排空行为的影响:
- 如果您创建一个 IDMS 或 ICSP CR 对象,MCO 不会排空或重启节点。
- 如果创建一个 ITMS CR 对象,MCO 会排空并重启节点。
- 如果您删除了 ITMS、IDMS 或 ICSP CR 对象,MCO 会排空并重启节点。
如果您修改 ITMS、IDMS 或 ICSP CR 对象,MCO 会排空并重启节点。
重要当 MCO 检测到以下任何更改时,它会在不排空或重启节点的情况下应用更新:
-
在机器配置的
spec.config.passwd.users.sshAuthorizedKeys参数中更改 SSH 密钥。 -
在
openshift-config命名空间中更改全局 pull secret 或 pull secret。 -
Kubernetes API Server Operator 自动轮转
/etc/kubernetes/kubelet-ca.crt证书颁发机构(CA)。
-
在机器配置的
当 MCO 检测到对
/etc/containers/registries.conf文件的更改时,如编辑ImageDigestMirrorSet、ImageTagMirrorSet或ImageContentSourcePolicy对象,它会排空对应的节点,应用更改并取消记录节点。对于以下更改,节点排空不会发生:-
增加了一个 registry,带有为每个镜像(mirror)设置了
pull-from-mirror = "digest-only"参数。 -
增加了一个镜像(mirror),带有在一个 registry 中设置的
pull-from-mirror = "digest-only"参数。 -
在
unqualified-search-registries列表中添加项目。
-
增加了一个 registry,带有为每个镜像(mirror)设置了
对于新集群,您可以根据需要使用 IDMS、ITMS 和 ICSP CR 对象。但是,建议使用 IDMS 和 ITMS。
如果您升级了集群,则任何现有 ICSP 对象都会保持稳定,并且支持 IDMS 和 ICSP 对象。使用 ICSP 对象的工作负载可以按预期工作。但是,如果要利用 IDMS CR 中引入的回退策略,您可以使用 oc adm migrate icsp 命令将当前工作负载迁移到 IDMS 对象,如后面的镜像 registry 存储库镜像部分所示。迁移到 IDMS 对象不需要重启集群。
如果您的集群使用 ImageDigestMirrorSet、ImageTagMirrorSet 或 ImageContentSourcePolicy 对象来配置存储库镜像,则只能使用镜像的 registry 的全局 pull secret。您不能在项目中添加 pull secret。
使用 ImageContentSourcePolicy (ICSP)对象配置存储库镜像是一个已弃用的功能。此功能仍然包含在 OpenShift Container Platform 中,并将继续被支持。但是,这个功能会在以后的发行版本中被删除,且不建议在新的部署中使用。
ICSP 对象被 ImageDigestMirrorSet 和 ImageTagMirrorSet 对象替代,以配置存储库镜像。如果您有用于创建 ImageContentSourcePolicy 对象的 YAML 文件,您可以使用 oc adm migrate icsp 命令将这些文件转换为 ImageDigestMirrorSet YAML 文件。命令将 API 更新至当前版本,将 kind 值更改为 ImageDigestMirrorSet,并将 spec.repositoryDigestMirrors 更改为 spec.imageDigestMirrors。文件的其余部分不会改变。
因为迁移不会更改 registry.conf 文件,所以集群不需要重启。
有关 ImageDigestMirrorSet 或 ImageTagMirrorSet 对象的更多信息,请参阅上一节中的"配置镜像 registry 存储库镜像"。
先决条件
-
使用具有
cluster-admin角色的用户访问集群。 -
确保集群中具有
ImageContentSourcePolicy对象。
流程
使用以下命令,将一个或多个
ImageContentSourcePolicyYAML 文件转换为ImageDigestMirrorSetYAML 文件:oc adm migrate icsp <file_name>.yaml <file_name>.yaml <file_name>.yaml --dest-dir <path_to_the_directory>
$ oc adm migrate icsp <file_name>.yaml <file_name>.yaml <file_name>.yaml --dest-dir <path_to_the_directory>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中:
<file_name>-
指定源
ImageContentSourcePolicyYAML 的名称。您可以列出多个文件名。 --dest-dir-
可选:指定输出
ImageDigestMirrorSetYAML 的目录。如果未设置,则会将该文件写入当前目录中。
例如,以下命令可将
icsp.yaml和icsp-2.yaml文件转换,并将新的 YAML 文件保存到idms-files目录中。oc adm migrate icsp icsp.yaml icsp-2.yaml --dest-dir idms-files
$ oc adm migrate icsp icsp.yaml icsp-2.yaml --dest-dir idms-filesCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
wrote ImageDigestMirrorSet to idms-files/imagedigestmirrorset_ubi8repo.5911620242173376087.yaml wrote ImageDigestMirrorSet to idms-files/imagedigestmirrorset_ubi9repo.6456931852378115011.yaml
wrote ImageDigestMirrorSet to idms-files/imagedigestmirrorset_ubi8repo.5911620242173376087.yaml wrote ImageDigestMirrorSet to idms-files/imagedigestmirrorset_ubi9repo.6456931852378115011.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来创建 CR 对象:
oc create -f <path_to_the_directory>/<file-name>.yaml
$ oc create -f <path_to_the_directory>/<file-name>.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 其中:
<path_to_the_directory>-
如果使用
--dest-dir标志,请指定目录的路径。 <file_name>-
指定
ImageDigestMirrorSetYAML 的名称。
- 在推出 IDMS 对象后,删除 ICSP 对象。
14.4.6. 镜像镜像目录的范围,以减少集群节点重启的频率 复制链接链接已复制到粘贴板!
您可以在存储库级别或更广泛的 registry 级别限定镜像目录。一个范围广泛的 ImageContentSourcePolicy 资源可减少节点在响应资源更改时需要重启的次数。
要强化 ImageContentSourcePolicy 资源中镜像目录的范围,请执行以下步骤。
先决条件
-
安装 OpenShift Container Platform CLI
oc。 -
以具有
cluster-admin特权的用户身份登录。 - 配置镜像镜像目录,以便在断开连接的集群中使用。
流程
运行以下命令,为
<local_registry>、<pull_spec>和<pull_secret_file>指定值:oc adm catalog mirror <local_registry>/<pull_spec> <local_registry> -a <pull_secret_file> --icsp-scope=registry
$ oc adm catalog mirror <local_registry>/<pull_spec> <local_registry> -a <pull_secret_file> --icsp-scope=registryCopy to Clipboard Copied! Toggle word wrap Toggle overflow 其中:
- <local_registry>
-
您为断开连接的集群配置的本地 registry,如
local.registry:5000。 - <pull_spec>
-
是断开连接的 registry 中配置的 pull 规格,如
redhat/redhat-operator-index:v4.13 - <pull_secret_file>
-
是
.json文件格式的registry.redhat.iopull secret。您可以从 Red Hat OpenShift Cluster Manager 下载 pull secret。
oc adm catalog mirror命令创建/redhat-operator-index-manifests目录,并生成imageContentSourcePolicy.yaml、catalogSource.yaml和mapping.txt文件。将新的
ImageContentSourcePolicy资源应用到集群:oc apply -f imageContentSourcePolicy.yaml
$ oc apply -f imageContentSourcePolicy.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
验证
oc apply是否成功将更改应用到ImageContentSourcePolicy:oc get ImageContentSourcePolicy -o yaml
$ oc get ImageContentSourcePolicy -o yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
更新 ImageContentSourcePolicy 资源后,OpenShift Container Platform 会将新设置部署到每个节点,集群开始使用已镜像的存储库向源存储库发出请求。