除錯 Init 容器
此頁面展示瞭如何調查與 Init 容器執行相關的問題。下面示例命令列中的 Pod 引用為 <pod-name>
,Init 容器引用為 <init-container-1>
和 <init-container-2>
。
準備工作
你需要擁有一個 Kubernetes 叢集,並且 kubectl 命令列工具已配置為與你的叢集通訊。建議在至少有兩個不作為控制平面主機的節點組成的叢集上執行本教程。如果你還沒有叢集,可以使用 minikube 建立一個,或者使用這些 Kubernetes 操場中的一個。
要檢查版本,請輸入 kubectl version
。
- 你應該熟悉 Init 容器 的基礎知識。
- 你應該已經配置了一個 Init 容器。
檢查 Init 容器狀態
顯示 Pod 的狀態
kubectl get pod <pod-name>
例如,狀態為 Init:1/2
表示兩個 Init 容器中有一個已成功完成。
NAME READY STATUS RESTARTS AGE
<pod-name> 0/1 Init:1/2 0 7s
有關狀態值及其含義的更多示例,請參見理解 Pod 狀態。
獲取 Init 容器的詳細資訊
檢視 Init 容器執行的更詳細資訊
kubectl describe pod <pod-name>
例如,一個有兩個 Init 容器的 Pod 可能會顯示以下內容
Init Containers:
<init-container-1>:
Container ID: ...
...
State: Terminated
Reason: Completed
Exit Code: 0
Started: ...
Finished: ...
Ready: True
Restart Count: 0
...
<init-container-2>:
Container ID: ...
...
State: Waiting
Reason: CrashLoopBackOff
Last State: Terminated
Reason: Error
Exit Code: 1
Started: ...
Finished: ...
Ready: False
Restart Count: 3
...
你還可以透過讀取 Pod 規約中的 status.initContainerStatuses
欄位以程式設計方式訪問 Init 容器狀態。
kubectl get pod nginx --template '{{.status.initContainerStatuses}}'
此命令將以原始 JSON 格式返回與上述相同的資訊。
訪問 Init 容器的日誌
傳入 Init 容器名稱和 Pod 名稱以訪問其日誌。
kubectl logs <pod-name> -c <init-container-2>
執行 Shell 指令碼的 Init 容器會列印執行的命令。例如,你可以在 Bash 指令碼開頭執行 set -x
來實現這一點。
理解 Pod 狀態
以 Init:
開頭的 Pod 狀態總結了 Init 容器的執行狀態。下表描述了你在除錯 Init 容器時可能會看到的一些示例狀態值。
Status | 含義 |
---|---|
Init:N/M | 該 Pod 有 M 個 Init 容器,目前已完成 N 個。 |
Init:Error | 一個 Init 容器執行失敗。 |
Init:CrashLoopBackOff | 一個 Init 容器反覆失敗。 |
Pending | 該 Pod 尚未開始執行 Init 容器。 |
PodInitializing 或 Running | 該 Pod 已經完成 Init 容器的執行。 |
上次修改於 2023 年 12 月 29 日 太平洋標準時間晚上 9:47:修復過時連結/錨點 (bcc55ae7c9)