確認したいこと
以下の記事のようにWorkerNode~API Serverの通信が途絶えたりkubelet障害が発生した場合に
Pod上はどのような挙動をするのか。
尚、環境としては2台のNodeを用意&1つずつPodをDeployした状態でService経由のアクセスを可能にしておく。
環境情報
Kubernetes 1.24
確認結果
二台のNodeが存在する環境で1台のNodeのみを「NotReady」ステータスとすると
$ kubectl get node NAME STATUS ROLES AGE VERSION 10.X.X.A NotReady ... 10.X.X.B Ready ...
該当のPodは動作し続けているものの
$ kubectl get pod NAME READY STATUS RESTARTS AGE nginx-... 1/1 Running 0 XX nginx-... 1/1 Running 0 XX
Deploymentとして見ればREADYの数が減っており
$ kubectl get deployment NAME READY UP-TO-DATE AVAILABLE AGE nginx 1/2 2 1 ...
Endpointとして見れば該当のNodeで動いているPodは表示されず実際に割り振りもされない。
そしてPodのTolerationsに以下のような記載があれば指定された秒数を経過するとPodはTerminatingされて正常なNode上で起動し直す。
Tolerations: node.kubernetes.io/not-ready:NoExecute op=Exists for XXs node.kubernetes.io/unreachable:NoExecute op=Exists for XXs
以下、補足です。
補足
基本的にはPodがダウンするとスケジューラによって再起動され、NodeがNotReadyとなっている場合はReadyのNodeで起動し直します。
一方でNodeがNotReadyとなっているだけであればTolerationsに記載の秒数は動き続けるため、もしサービスに紐づくPodが全て該当のNodeで動作している場合はEndpointは空欄となってしまいます。
$ kubectl get ep NAME ENDPOINTS AGE nginx ...
以上です。