[英]failed Kubernetes pod of a test docker container
我一直在尝试为我的测试容器部署一个带有 dockerfile 的测试容器,如下所示,当部署在 Kubernetes 上时,Pod 会进入 CrashLoopBackOff。 失败的可能原因是什么?
我的测试容器的 Dockerfile:
FROM docker.asdfasdf.com/alpine:3.14
RUN apk add netcat-openbsd
ENTRYPOINT ["/bin/sh", "-c", "nc -l 8080 &"]
部署在 kubernetes 上时的容器状态(描述 pod 信息)
main:
Container ID: docker://d845d4fb4asdf78sdfasdf8asdfasdf9asdfasda7
Image: asdf.sdfad.com/xyz/test1:asdfasdfasdfasdf
Image ID: docker-pullable://asdf.sdfad.com/xyz/test1:asdfasdfasdfasdf@sha256:a643c0e227a27ds5d4e78a9b50b894e1c934d95f88ddsdswvbc
Ports: 8080/TCP, 8081/TCP
Host Ports: 0/TCP, 0/TCP
State: Waiting
Reason: CrashLoopBackOff
Last State: Terminated
Reason: Completed
Exit Code: 0
Started: Thu, 26 May 2022 00:01:55 +0100
Finished: Thu, 26 May 2022 00:01:55 +0100
Ready: False
Restart Count: 6
Limits:
memory: 1Gi
Requests:
cpu: 1
memory: 500Mi
Liveness: http-get http://:8080/sadf/healthcheck delay=30s timeout=1s period=15s #success=1 #failure=3
Readiness: http-get http://:8080/asdf/healthcheck delay=20s timeout=1s period=5s #success=1 #failure=3
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Created 10m (x2 over 10m) kubelet Created container main
Warning FailedPreStopHook 10m (x2 over 10m) kubelet Exec lifecycle hook ([sh -c rm heartbeat.txt && sleep 30]) for Container "main" in Pod "test1--avi--default-76b6d7c76b-s9jdt_test1-dev(asdfc-ava45-45ae-78d-fgghh7765532)" failed - error: rpc error: code = Unknown desc = container not running (main), message: ""
Normal Killing 10m (x2 over 10m) kubelet FailedPostStartHook
Warning FailedPostStartHook 10m (x2 over 10m) kubelet Exec lifecycle hook ([sh -c dirname heartbeat.txt | xargs mkdir -p && touch heartbeat.txt
]) for Container "main" in Pod "test1--avi--default-76b6d7c76b-s9jdt_test1-dev(asdfc-ava45-45ae-78d-fgghh7765532)" failed - error: rpc error: code = Unknown desc = container not running (main), message: ""
Normal Started 10m (x2 over 10m) kubelet Started container main
Warning BackOff 21s (x58 over 10m) kubelet Back-off restarting failed container
入口点是: "nc -l 8080 &"
netcat
的行为是:处理请求 → 将其打印到标准输出 → 退出
所以你的第一个健康检查: http-get http://:8080/sadf/healthcheck delay=30s timeout=1s period=15s #success=1 #failure=3
执行第一个请求,然后nc
退出。 因为它: #success=1 #failure=3
例如,您可以将入口点设置为
["/bin/sh", "-c", "while true; do nc -l 8080; echo 'restarting netcat'; done"]
while
循环将在退出时重新启动nc
另一个(更好的)选项是使用-k
( --keep-open
)参数来保持nc
连接打开:
ENTRYPOINT ["nc", "-k", "-l", "8080"]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.