5.5. ノードを正常に再起動する
Windows Machine Config Operator (WMCO) は、可能な限りノードの再起動を最小限に抑えます。しかし、特定の操作および更新を行う際には、変更が正しくセキュアに適用されるように、再起動を実行する必要があります。Windows ノードを安全に再起動するには、グレースフル再起動プロセスを使用します。標準の OpenShift Container Platform ノードのグレースフル再起動を実行する方法は、「ノード」ドキュメントの「ノードのグレースフル再起動」を参照してください。
ノードを再起動する前に、ノードでのデータ損失を回避するために、etcd データをバックアップすることを推奨します。
シングルノード OpenShift クラスターの場合、クラスターを管理するために kubeconfig
ファイルに証明書を含めるのではなく、ユーザーが oc login
コマンドを実行する必要があります。そのため、ノードをスケジューリング対象から除外してドレインした後、oc adm
コマンドが使用できなくなる可能性があります。これは、スケジューリング対象から除外する操作が原因で、openshift-oauth-apiserver
Pod が実行されなくなるためです。以下の手順で示したように、SSH を使用してノードにアクセスできます。
シングルノード OpenShift クラスターでは、スケジューリング対象からの除外時およびドレイン時に Pod を再スケジューリングすることはできません。しかし、そうすることで、Pod、特にワークロード Pod が適切に停止し、関連するリソースを解放する時間を得ることができます。
手順
ノードのグレースフル再起動を実行するには、次の手順を実行します。
ノードをスケジューリング対象外としてマークします。
oc adm cordon <node1>
$ oc adm cordon <node1>
Copy to Clipboard Copied! ノードをドレインして、実行中のすべての Pod を削除します。
oc adm drain <node1> --ignore-daemonsets --delete-emptydir-data --force
$ oc adm drain <node1> --ignore-daemonsets --delete-emptydir-data --force
Copy to Clipboard Copied! カスタムの 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.
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.
Copy to Clipboard Copied! この場合、drain コマンドを再度実行し、
disable-eviction
フラグを追加し、PDB チェックを省略します。oc adm drain <node1> --ignore-daemonsets --delete-emptydir-data --force --disable-eviction
$ oc adm drain <node1> --ignore-daemonsets --delete-emptydir-data --force --disable-eviction
Copy to Clipboard Copied! Windows ノードに SSH で接続し、次のコマンドを実行して PowerShell に入ります。
powershell
C:\> powershell
Copy to Clipboard Copied! 次のコマンドを実行してノードを再起動します。
Restart-Computer -Force
C:\> Restart-Computer -Force
Copy to Clipboard Copied! Amazon Web Services (AWS) 上の Windows ノードは、EC2 インスタンスのメタデータルートと Host Network Service (HNS) ネットワークとの不整合が原因で、グレースフル再起動後に
READY
状態に戻りません。再起動後、AWS 上の任意の Windows ノードに SSH で接続し、シェルプロンプトで次のコマンドを実行してルートを追加します。
route add 169.254.169.254 mask 255.255.255.0 <gateway_ip>
C:\> route add 169.254.169.254 mask 255.255.255.0 <gateway_ip>
Copy to Clipboard Copied! ここでは、以下のようになります。
169.254.169.254
- EC2 インスタンスメタデータエンドポイントのアドレスを指定します。
255.255.255.255
- EC2 インスタンスメタデータエンドポイントのネットワークマスクを指定します。
<gateway_ip>
Windows インスタンス内のゲートウェイに対応する IP アドレスを指定します。これは、次のコマンドを実行して見つけることができます。
ipconfig | findstr /C:"Default Gateway"
C:\> ipconfig | findstr /C:"Default Gateway"
Copy to Clipboard Copied!
再起動が完了したら、以下のコマンドを実行して、ノードをスケジューリング可能な状態にします。
oc adm uncordon <node1>
$ oc adm uncordon <node1>
Copy to Clipboard Copied! ノードの準備ができていることを確認します。
oc get node <node1>
$ oc get node <node1>
Copy to Clipboard Copied! 出力例
NAME STATUS ROLES AGE VERSION <node1> Ready worker 6d22h v1.18.3+b0068a8
NAME STATUS ROLES AGE VERSION <node1> Ready worker 6d22h v1.18.3+b0068a8
Copy to Clipboard Copied!