(O+P)ut

アウトプット



(O+P)ut

エンジニアのアウトプット

【Kubernetes】NotReadyのNodeで動いているPodはServiceから切り離される

スポンサーリンク

確認したいこと

以下の記事のように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                            ...

以上です。