(O+P)ut

アウトプット



(O+P)ut

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

【Kubernetes】livenessProbeのexecでtimeoutSecondsが超過した際に出るログ

スポンサーリンク

事象

kubelet.log上にて下記のようなエラーが出る。

... kubelet.service[6728]: XX .. remote_runtime.go:392] ExecSync 'XX' from runtime service failed: rpc error: code = DeadlineExceeded desc = failed to exec in container: timeout 1s exceeded: context deadline exceeded 
環境情報
  • kubectl : 1.20

原因/事象再現

同ログはtimeoutSeconds(デフォルトだと1 second)に抵触した際に出る。

よって確認のため以下のYAMLを実行すると

apiVersion: v1
kind: Pod
metadata:
  labels:
    test: liveness
  name: liveness-exec
spec:
  containers:
  - name: liveness
    image: k8s.gcr.io/busybox
    args:
    - /bin/sh
    - -c
    - touch /tmp/healthy; sleep 30; rm -rf /tmp/healthy; sleep 9999
    livenessProbe:
      exec:
        command:
        - /bin/sh
        - -c
        - sleep 60; cat /tmp/healthy
      initialDelaySeconds: 5
      periodSeconds: 5

確かに同メッセージが出力された。

... kubelet.service[6728]: E0715 05:37:51.892763    6728 remote_runtime.go:392] ExecSync '/bin/sh -c sleep 60; cat /tmp/healthy' from runtime service failed: rpc error: code = DeadlineExceeded desc = failed to exec in container: timeout 1s exceeded: context deadline exceeded

以下、補足です。

補足

livenessProbeのexecでは例えばファイルの有無でPodの再起動要否が判断でき、例えばcatコマンドであれば以下のように返り値が0以外となるためPodが再起動します。

$ touch a
$ cat a
$ echo $?
0
$ cat b
cat: b: No such file or directory
$ echo $?
1

ただし、タイムアウトが起きた場合にはコンテキストの期限が過ぎたときにContext.Errによって返される「DeadlineExceeded」という文言がWorkerNodeのkubelet.logに出力されます。

以上、ご参考ください。