2.2. 关闭集群

您可以以安全的方式关闭集群,以便稍后重启集群。

注意

您可以在安装日期起的一年内关闭集群,并期望它可以正常重启。安装日期起一年后,集群证书会过期。

先决条件

  • 您可以使用具有 cluster-admin 角色的用户访问集群。
  • 已进行 etcd 备份。

    重要

    执行此流程前务必要进行 etcd 备份,以便在重启集群遇到任何问题时可以恢复集群。

    例如,以下条件可能会导致重启的集群失败:

    • 关机过程中的 etcd 数据崩溃
    • 因硬件原因造成节点故障
    • 网络连接问题

    如果集群无法恢复,请按照以下步骤恢复到以前的集群状态。

流程

  1. 如果您计划长时间关闭集群,请确定集群证书过期的日期。

    您需要在证书过期前重启集群。当集群重启时,可能需要您手动批准待处理的证书签名请求 (CSR) 来恢复 kubelet 证书。

    1. 检查 kube-apiserver-to-kubelet-signer CA 证书的过期日期:

      $ oc -n openshift-kube-apiserver-operator get secret kube-apiserver-to-kubelet-signer -o jsonpath='{.metadata.annotations.auth\.openshift\.io/certificate-not-after}{"\n"}'

      输出示例

      2023-08-05T14:37:50Z

    2. 检查 kubelet 证书的过期日期:

      1. 运行以下命令,为控制平面(control plane)节点启动 debug 会话:

        $ oc debug node/<node_name>
      2. 运行以下命令,将根目录改为 /host

        sh-4.4# chroot /host
      3. 运行以下命令,检查 kubelet 客户端证书过期日期:

        sh-5.1# openssl x509 -in /var/lib/kubelet/pki/kubelet-client-current.pem -noout -enddate

        输出示例

        notAfter=Jun  6 10:50:07 2023 GMT

      4. 运行以下命令,检查 kubelet 服务器证书过期日期:

        sh-5.1# openssl x509 -in /var/lib/kubelet/pki/kubelet-server-current.pem -noout -enddate

        输出示例

        notAfter=Jun  6 10:50:07 2023 GMT

      5. 退出 debug 会话。
      6. 重复这些步骤,以检查所有控制平面节点上的证书过期日期。为确保集群可以正常重启,请计划在最早的证书过期前重启它。
  2. 关闭集群中的所有节点。您可以从云供应商的 Web 控制台完成此操作,或者运行以下循环:

    $ for node in $(oc get nodes -o jsonpath='{.items[*].metadata.name}'); do oc debug node/${node} -- chroot /host shutdown -h 1; done 1
    1
    -h 1 表示此过程在 control-plane 节点关闭前可以持续的时间(以分钟为单位)。对于具有 10 个或更多节点的大型集群,请它设置为 10 分钟或更长时间,以确保所有计算节点都已关闭。

    输出示例

    Starting pod/ip-10-0-130-169us-east-2computeinternal-debug ...
    To use host binaries, run `chroot /host`
    Shutdown scheduled for Mon 2021-09-13 09:36:17 UTC, use 'shutdown -c' to cancel.
    
    Removing debug pod ...
    Starting pod/ip-10-0-150-116us-east-2computeinternal-debug ...
    To use host binaries, run `chroot /host`
    Shutdown scheduled for Mon 2021-09-13 09:36:29 UTC, use 'shutdown -c' to cancel.

    使用以下方法关闭节点可让 pod 安全终止,从而减少数据崩溃的可能性。

    注意

    为大规模集群调整关闭时间:

    $ for node in $(oc get nodes -o jsonpath='{.items[*].metadata.name}'); do oc debug node/${node} -- chroot /host shutdown -h 10; done
    注意

    在关闭前,不需要排空 OpenShift Container Platform 中附带的标准 pod 的 control plane 节点。

    集群管理员负责确保在集群重启后,彻底重启自己的工作负载。如果因为自定义工作负载的原因已在关闭前排空 control plane 节点,您必须在重启后将 control plane 节点标记为可调度,然后集群才可以重新正常工作。

  3. 关闭不再需要的集群依赖项,如外部存储或 LDAP 服务器。在进行操作前请务必查阅您的厂商文档。

    重要

    如果您在云供应商平台上部署了集群,请不要关闭、挂起或删除关联的云资源。如果您删除挂起的虚拟机的云资源,OpenShift Container Platform 可能无法成功恢复。