ノード障害ガイド
ノード
障害は、ハードウェア障害やネットワーク停止など、様々な理由で発生する可能性があります。このガイドでは、ノード
障害が発生した場合に予測されることと、ノード
障害からの復旧方法について説明します。復旧は、Storage Provisioner
および使用するストレージのタイプによって異なります。
ノート
このガイドでは、クラスタで提供されるストレージがノード
から物理的に分離されており、復旧可能であることを前提としています。ノード
のローカル・ストレージには適用されません。
予測されること
デフォルトでは、ノード
に障害が発生した場合:
-
障害がKubernetes APIサーバーに反映され、
ノード
のステータスがNotReady
に更新されるまで、最大1分かかる場合があります。 -
ノード
のステータスがNotReady
になってから約5分後に、そのノード
のポッド
のステータスがUnknown
またはNodeLost
に変わります。 -
コントローラ付きの
ポッド
のステータス(Daemonsets
、Statefulsets
、Deployments
など)は、Terminating
に変わります。ノート: コントローラがない
ポッド
はPodSpec
で開始し、終了しません。手動で削除して再作成する必要があります。 -
新しい
ポッド
は、Ready
ステータスのままのノード
から開始されます。ノート:
Statefulsets
は特殊なケースです。Statefulset
コントローラは、指定された名前に対してポッド
の順序付きリストを1つずつ保持します。Statefulset
コントローラは、既存のポッド
の名前で新しいポッド
を起動しません。 -
ReadWriteOnce
型のPersistent Volumes
が関連付けられているポッド
は、Ready
になりません。これは、ポッド
が、まだTerminating
である古いポッド
にアタッチされている既存のボリュームにアタッチしようとするためです。この状況は、特定の時点でReadWriteOnce
型のPersistent Volumes
を関連付けることができるのは単一のノード
のみで、新しいポッド
は別のノード
に存在するために発生します。 -
Kubernetesクラスタで複数の
可用性ドメイン
が使用され、障害が発生したノード
がその可用性ドメイン
の最後のノードである場合、既存のボリュームは別の可用性ドメイン
の新しいポッド
からアクセスできなくなります。
復旧について
ノード
に障害が発生した後、ノード
を5分以内に復旧できる場合、ポッド
はRunning
状態に戻ります。ノード
が5分後に復旧されていない場合、ポッド
は終了を完了し、Kubernetes APIサーバーから削除されます。ReadWriteOnce
型の永続ボリューム
を持つ新しいポッド
は、永続ボリューム
をマウントしてRunning
に変更できるようになります。
ノード
が復旧できずに置換された場合、Kubernetes APIサーバーからノード
を削除すると、古いポッド
が終了し、新しいポッド
によってマウントされるReadWriteOnce
型の永続ボリューム
が解放されます。
Kubernetesクラスタで複数の可用性ドメイン
を使用する場合は、削除したノード
が占有していたものと同じ可用性ドメイン
に置換ノード
を追加する必要があります。これにより、その可用性ドメイン
内の永続ボリューム
に到達できる置換ノード
でポッド
をスケジュールでき、その後、ポッド
のステータスがRunning
に変更されます。
復旧または置換する予定の障害ノード
内のポッド
または永続ボリューム
は強制的に削除しないでください。障害ノード
でポッド
または永続ボリューム
を強制的に削除すると、データが失われる可能性があり、Statefulsets
の場合はスプリットブレイン・シナリオが発生する可能性があります。Statefulsets
の詳細は、Kubernetesドキュメントの「Force Delete StatefulSet Pods」を参照してください。
障害ノード
を元のノード
と同じ可用性ドメイン
で復旧または置換できない場合は、ポッド
および永続ボリューム
を強制的に削除できます。