5.6. ノードを正常に再起動する
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! Toggle word wrap Toggle overflow ノードをドレインして、実行中のすべての 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! Toggle word wrap Toggle overflow カスタムの 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! Toggle word wrap Toggle overflow この場合、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! Toggle word wrap Toggle overflow Windows ノードに SSH で接続し、次のコマンドを実行して PowerShell に入ります。
powershell
C:\> powershell
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行してノードを再起動します。
Restart-Computer -Force
C:\> Restart-Computer -Force
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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! Toggle word wrap Toggle overflow ここでは、以下のようになります。
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! Toggle word wrap Toggle overflow
再起動が完了したら、以下のコマンドを実行して、ノードをスケジューリング可能な状態にします。
oc adm uncordon <node1>
$ oc adm uncordon <node1>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ノードの準備ができていることを確認します。
oc get node <node1>
$ oc get node <node1>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
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! Toggle word wrap Toggle overflow