6.7.4. ノードをグレースフルに再起動する
データ損失やサービスの中断なしに、すべてのワークロードを他のノードに移動させる、ノードの正常な再起動を実行できます。
ノードを再起動する前に、ノードでのデータ損失を回避するために、etcd データをバックアップすることを推奨します。
シングルノード OpenShift クラスターの場合、クラスターを管理するために kubeconfig ファイルに証明書を含めるのではなく、ユーザーが oc login コマンドを実行する必要があります。そのため、ノードをスケジューリング対象から除外して drain (Pod の退避) を実行した後、oc adm コマンドが使用できなくなる可能性があります。これは、スケジューリング対象から除外する操作が原因で、openshift-oauth-apiserver Pod が実行されなくなるためです。以下の手順で示したように、SSH を使用してノードにアクセスできます。
シングルノード OpenShift クラスターでは、スケジューリング対象からの除外時および drain (Pod の退避) の実行時に Pod を再スケジューリングすることはできません。しかし、そうすることで、Pod、特にワークロード Pod が適切に停止し、関連するリソースを解放する時間を得ることができます。
以下の手順は、ノードを正常に再起動する方法を示しています。
手順
ノードをスケジュール対象外としてマークします。
$ oc adm cordon <node1>ノードの drain (Pod の退避) を実行して、実行中のすべての Pod を削除します。
$ oc adm drain <node1> --ignore-daemonsets --delete-emptydir-data --forceカスタムの Pod Disruption Budget (PDB) に関連する Pod を退避できないというエラーが表示される場合があります。
エラーの例
error when evicting pods/"rails-postgresql-example-1-72v2w" -n "rails" (will retry after 5s): Cannot evict pod as it would violate the pod's disruption budget.この場合、drain コマンドを再度実行し、
disable-evictionフラグを追加し、PDB チェックを省略します。$ oc adm drain <node1> --ignore-daemonsets --delete-emptydir-data --force --disable-evictionデバッグモードでノードにアクセスします。
$ oc debug node/<node1>ルートディレクトリーを
/hostに変更します。$ chroot /hostノードを再起動します。
$ systemctl rebootすぐに、ノードは
NotReady状態になります。注記一部のシングルノード OpenShift クラスターでは、
openshift-oauth-apiserverPod が実行されていないため、ノードの cordon (スケジューリング対象からの除外) の実行および drain (Pod の退避) の実行後にocコマンドが使用できない場合があります。SSH でノードに接続し、リブートを実行することができます。$ ssh core@<master-node>.<cluster_name>.<base_domain>$ sudo systemctl reboot再起動が完了したら、以下のコマンドを実行して、ノードをスケジュール対象としてマークします。
$ oc adm uncordon <node1>注記一部のシングルノード OpenShift クラスターでは、
openshift-oauth-apiserverPod が実行されていないため、ノードの cordon (スケジューリング対象からの除外) の実行および drain (Pod の退避) の実行後にocコマンドが使用できない場合があります。SSH を使用してノードに接続し、ノードの cordon (スケジューリング対象からの除外) の実行を解除します。$ ssh core@<target_node>$ sudo oc adm uncordon <node> --kubeconfig /etc/kubernetes/static-pod-resources/kube-apiserver-certs/secrets/node-kubeconfigs/localhost.kubeconfigノードの準備ができていることを確認します。
$ oc get node <node1>出力例
NAME STATUS ROLES AGE VERSION <node1> Ready worker 6d22h v1.18.3+b0068a8