Menu Close
5.8.4. ノードを正常に再起動する
ノードを再起動する前に、ノードでのデータ損失を回避するために、etcdデータをバックアップすることをお勧めします。
ユーザーがクラスターを管理するために kubeconfig
ファイルに証明書を使用するのではなく、ユーザーが oc login
コマンドを実行する必要のある Single Node OpenShift(SNO)クラスターでは、oc adm
コマンドはノードの遮断およびドレイン(cordon)後に利用できない可能性があります。これは、cordon により openshift-oauth-apiserver
Pod が実行されていないためです。以下の手順で示したように、SSH を使用してノードにアクセスできます。
SNO クラスターでは、Pod の遮断およびドレイン(解放)時に Pod を再スケジュールすることができません。ただし、これにより Pod に対し、とくにワークロード Pod が使用され、関連付けられたリソースを適切に停止し、リリースするのに時間がかかります。
手順
ノードの正常な再起動を実行するには:
ノードにスケジュール対象外 (unschedulable) のマークを付けます。
$ oc adm cordon <node1>
ノードをドレインして、実行中のすべてのポッドを削除します。
$ oc adm drain <node1> --ignore-daemonsets --delete-emptydir-data --force
カスタム Pod の Disruption Budget(停止状態の予算)に関連付けられた 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>
ルートディレクトリーをホストに切り替えます。
$ chroot /host
ノードを再起動します。
$ systemctl reboot
すぐに、ノードは
NotReady
状態になります。注記一部の SNO クラスターでは、
openshift-oauth-apiserver
Pod が実行されていないため、oc
コマンドをcordon および drain 後に利用できない可能性があります。SSH を使用してノードに接続し、リブートを実行できます。$ ssh core@<master-node>.<cluster_name>.<base_domain>
$ sudo systemctl reboot
再起動が完了したら、以下のコマンドを実行してノードにスケジュール対象としてマークします。
$ oc adm uncordon <node1>
注記一部の SNO クラスターでは、
openshift-oauth-apiserver
Pod が実行されていないため、oc
コマンドをcordon および drain 後に利用できない可能性があります。SSH を使用してノードに接続し、これを遮断を解除します。$ 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
関連情報
etcdデータのバックアップの詳細については、Backing up etcd dataを参照してください。