7.5.6.2. 使用 CLI 禁用 Machine Config Operator 自动重新引导
为了避免对 Machine Config Operator(MCO)所做的更改造成不必要的中断,您可以使用 OpenShift CLI(oc)来修改机器配置池(MCP),以防止 MCO 在那个池中对节点进行任何更改。这会防止任何通常属于 MCO 更新过程一部分的重启。
暂停 MCP 可防止 MCO 在关联的节点上应用任何配置更改。暂停 MCP 还可以防止任何自动轮转的证书被推送到关联的节点,包括自动轮转 kube-apiserver-to-kubelet-signer
CA 证书。如果在 kube-apiserver-to-kubelet-signer
CA 证书过期且 MCO 尝试自动续订证书时,MCP 会暂停,但不会在暂停的 MCP 中跨节点应用新证书。这会导致多个 oc
命令失败,包括但不限于 oc debug
、oc logs
、oc exec
和 oc attach
。在暂停 MCP 时应该非常小心,需要仔细考虑 kube-apiserver-to-kubelet-signer
CA 证书过期的问题,且仅在短时间内暂停。
新 CA 证书会在自安装日期起的 292 天生成,并在自该日期起的 365 天后删除。要确定下一个自动 CA 证书轮转,请参阅 Red Hat OpenShift 4 中的了解 CA 证书自动续订。
先决条件
-
您可以使用具有
cluster-admin
角色的用户访问集群。 -
已安装 OpenShift CLI(
oc
)。
流程
要暂停或取消暂停自动 MCO 更新重新引导:
暂停自动引导过程:
更新
MachineConfigPool
自定义资源,将spec.paused
字段设置为true
。Control plane(master)节点
$ oc patch --type=merge --patch='{"spec":{"paused":true}}' machineconfigpool/master
Worker 节点
$ oc patch --type=merge --patch='{"spec":{"paused":true}}' machineconfigpool/worker
验证 MCP 是否已暂停:
Control plane(master)节点
$ oc get machineconfigpool/master --template='{{.spec.paused}}'
Worker 节点
$ oc get machineconfigpool/worker --template='{{.spec.paused}}'
输出示例
true
spec.paused
字段为true
,MCP 暂停。确定 MCP 是否有待处理的更改:
# oc get machineconfigpool
输出示例
NAME CONFIG UPDATED UPDATING master rendered-master-33cf0a1254318755d7b48002c597bf91 True False worker rendered-worker-e405a5bdb0db1295acea08bcca33fa60 False False
如果 UPDATED 列是 False,UPDATING 为 False,则有待处理的更改。当 UPDATED 为 True 且 UPDATING 为 False 时,没有待处理的更改。在上例中,worker 节点有待处理的变化。control plane 节点(也称为 master 节点)没有任何待处理的更改。
重要如果有尚未进行的更改( Updated 和 Updating 字段都是 False),建议您尽快调度一个维护窗口用于重启。使用以下步骤取消暂停自动引导过程,以应用上一次重启后排队的更改。
取消暂停自动引导过程:
更新
MachineConfigPool
自定义资源,将spec.paused
字段设置为false
。Control plane(master)节点
$ oc patch --type=merge --patch='{"spec":{"paused":false}}' machineconfigpool/master
Worker 节点
$ oc patch --type=merge --patch='{"spec":{"paused":false}}' machineconfigpool/worker
注意通过取消暂停 MCP,MCO 应用所有暂停的更改,根据需要重启 Red Hat Enterprise Linux CoreOS(RHCOS)。
验证 MCP 是否已取消暂停:
Control plane(master)节点
$ oc get machineconfigpool/master --template='{{.spec.paused}}'
Worker 节点
$ oc get machineconfigpool/worker --template='{{.spec.paused}}'
输出示例
false
spec.paused
字段为false
,MCP 被取消暂停。确定 MCP 是否有待处理的更改:
$ oc get machineconfigpool
输出示例
NAME CONFIG UPDATED UPDATING master rendered-master-546383f80705bd5aeaba93 True False worker rendered-worker-b4c51bb33ccaae6fc4a6a5 False True
如果 MCP 正在应用任何待处理的更改,UPDATED 列为 False,UPDATING 列为 True。当 UPDATED 为 True 且 UPDATING 为 False 时,没有进一步的更改。在上例中,MCO 正在更新 worker 节点。