事象
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に出力されます。
以上、ご参考ください。