2.2. クラスターのシャットダウン

クラスターを正常な状態でシャットダウンし、後で再起動できるようにします。

注記

インストール日から 1 年までクラスターをシャットダウンして、正常に再起動することを期待できます。インストール日から 1 年後に、クラスター証明書が期限切れになります。

前提条件

  • cluster-admin ロールを持つユーザーとしてクラスターにアクセスできる。
  • etcd のバックアップを取得している。

    重要

    クラスターの再起動時に問題が発生した場合にクラスターを復元できるように、この手順を実行する前に etcd バックアップを作成しておくことは重要です。

    たとえば、次の条件により、再起動したクラスターが誤動作する可能性があります。

    • シャットダウン時の etcd データの破損
    • ハードウェアが原因のノード障害
    • ネットワーク接続の問題

    クラスターが回復しない場合は、クラスターの以前の状態に復元する手順を実行します。

手順

  1. クラスターを長期間シャットダウンする予定がある場合は、クラスター証明書の有効期限が切れる日付を決定します。

    証明書の有効期限が切れる前にクラスターを再起動する必要があります。クラスターの再起動時に、kubelet 証明書を回復するために保留中の証明書署名要求 (CSR) を手動で承認する必要がある場合があります。

    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. 次のコマンドを実行して、コントロールプレーンノードのデバッグセッションを開始します。

        $ 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. デバッグセッションを終了します。
      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 は、コントロールプレーンノードがシャットダウンされるまで、このプロセスが継続する時間 (分単位) を示します。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 のコントロールプレーンノードをドレイン (解放) する必要はありません。

    クラスター管理者は、クラスターの再起動後に独自のワークロードのクリーンな再起動を実行する必要があります。カスタムワークロードが原因でシャットダウン前にコントロールプレーンノードをドレイン (解放) した場合は、再起動後にクラスターが再び機能する前にコントロールプレーンノードをスケジュール可能としてマークする必要があります。

  3. 外部ストレージや LDAP サーバーなど、不要になったクラスター依存関係をすべて停止します。この作業を行う前に、ベンダーのドキュメントを確認してください。

    重要

    クラスターをクラウドプロバイダープラットフォームにデプロイした場合は、関連するクラウドリソースをシャットダウン、一時停止、または削除しないでください。一時停止された仮想マシンのクラウドリソースを削除すると、OpenShift Container Platform が正常に復元されない場合があります。