除錯 Init Containers
本頁面說明如何調查與 Init Containers 執行相關的問題。以下範例命令列將 Pod 稱為 <pod-name>
,Init Containers 稱為 <init-container-1>
和 <init-container-2>
。
開始之前
您需要有一個 Kubernetes 叢集,並且必須將 kubectl 命令列工具設定為與您的叢集通訊。建議在至少有兩個節點且未充當控制平面主機的叢集上執行本教學課程。如果您還沒有叢集,可以使用 minikube 建立一個叢集,或者您可以使用以下 Kubernetes playground 之一
若要檢查版本,請輸入kubectl version
。- 您應該熟悉 Init Containers 的基礎知識。
- 您應該已設定 Init Container。
檢查 Init Containers 的狀態
顯示 Pod 的狀態
kubectl get pod <pod-name>
例如,Init:1/2
的狀態表示兩個 Init Containers 中的一個已成功完成
NAME READY STATUS RESTARTS AGE
<pod-name> 0/1 Init:1/2 0 7s
請參閱瞭解 Pod 狀態以取得更多狀態值及其含義的範例。
取得關於 Init Containers 的詳細資訊
檢視關於 Init Container 執行的更詳細資訊
kubectl describe pod <pod-name>
例如,具有兩個 Init Containers 的 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 Spec 上的 status.initContainerStatuses
欄位,以程式化的方式存取 Init Container 狀態
kubectl get pod nginx --template '{{.status.initContainerStatuses}}'
此命令將以原始 JSON 格式傳回與上述相同的資訊。
從 Init Containers 存取日誌
傳遞 Init Container 名稱以及 Pod 名稱以存取其日誌。
kubectl logs <pod-name> -c <init-container-2>
執行 shell 腳本的 Init Containers 會在執行時列印命令。例如,您可以在 Bash 中透過在腳本開頭執行 set -x
來執行此操作。
瞭解 Pod 狀態
Pod 狀態若以 Init:
開頭,則總結了初始化容器執行的狀態。下表說明您在偵錯初始化容器時可能會看到的一些範例狀態值。
Status | 意義 |
---|---|
Init:N/M | Pod 有 M 個初始化容器,而到目前為止已完成 N 個。 |
Init:Error | 初始化容器執行失敗。 |
Init:CrashLoopBackOff | 初始化容器重複失敗。 |
Pending | Pod 尚未開始執行初始化容器。 |
PodInitializing 或 Running | Pod 已完成執行初始化容器。 |
上次修改時間為 2023 年 12 月 29 日下午 9:47 PST:修正過時的連結/錨點 (bcc55ae7c9)