我有 Kubernetes CronJob 的这个规范
---
kind: CronJob
apiVersion: batch/v1beta1
metadata:
name: do-registry-cleanup
spec:
schedule: "* * * * *"
successfulJobsHistoryLimit: 2
failedJobsHistoryLimit: 4
jobTemplate:
spec:
template:
spec:
automountServiceAccountToken: false
restartPolicy: OnFailure
containers:
- name: podtest2
image: alpine
args:
- wget
- http://some_real_url/test/pod/2
imagePullPolicy: Always
lifecycle:
postStart:
exec:
command:
- "sh"
- "-c"
- "sleep 2s;"
当我这样做时,kubectl describe pod some_pod_name
我得到这个输出(截断)
Normal Pulling 105s kubelet, general-rl8c pulling image "alpine"
Normal Pulled 105s kubelet, general-rl8c Successfully pulled image "alpine"
Normal Created 105s kubelet, general-rl8c Created container
Normal Started 104s kubelet, general-rl8c Started container
Warning FailedPostStartHook 104s kubelet, general-rl8c Exec lifecycle hook ([sh -c sleep 2s;]) for Container "podtest2" in Pod "do-registry-cleanup-1566391980-dvjdn_default(9d87fe8a-c412-11e9-8744-d2e7c0045fbd)" failed - error: command 'sh -c sleep 2s;' exited with 137: , message: ""
Normal Killing 104s kubelet, general-rl8c Killing container with id docker://podtest2:FailedPostStartHook
因为在这个例子中 wget 是请求 url,我知道 sleep 命令被执行了,没有被破坏。我的问题是为什么:
- 为什么会发生?
- 这有什么副作用?
一些额外的信息。如果命令是 "cmd1; sleep; cmd2" 那么 cmd2 不执行。所以由于某种原因 sleep cmd 在容器中调用错误。