簡體   English   中英

測試 docker 容器的 Kubernetes pod 失敗

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM