除錯 Init Containers

本頁面說明如何調查與 Init Containers 執行相關的問題。以下範例命令列將 Pod 稱為 <pod-name>,Init Containers 稱為 <init-container-1><init-container-2>

開始之前

您需要有一個 Kubernetes 叢集,並且必須將 kubectl 命令列工具設定為與您的叢集通訊。建議在至少有兩個節點且未充當控制平面主機的叢集上執行本教學課程。如果您還沒有叢集,可以使用 minikube 建立一個叢集,或者您可以使用以下 Kubernetes playground 之一

若要檢查版本,請輸入 kubectl version

檢查 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/MPod 有 M 個初始化容器,而到目前為止已完成 N 個。
Init:Error初始化容器執行失敗。
Init:CrashLoopBackOff初始化容器重複失敗。
PendingPod 尚未開始執行初始化容器。
PodInitializingRunningPod 已完成執行初始化容器。
上次修改時間為 2023 年 12 月 29 日下午 9:47 PST:修正過時的連結/錨點 (bcc55ae7c9)