Kubernetes 調(diào)試Init容器

2022-05-27 12:00 更新

調(diào)試 Init 容器

此頁顯示如何核查與 Init 容器執(zhí)行相關(guān)的問題。 下面的示例命令行將 Pod 稱為 ?<pod-name>?,而 Init 容器稱為 ?<init-container-1>? 和 ?<init-container-2>?。

在開始之前

你必須擁有一個 Kubernetes 的集群,同時你的 Kubernetes 集群必須帶有 kubectl 命令行工具。 建議在至少有兩個節(jié)點的集群上運行本教程,且這些節(jié)點不作為控制平面主機。 如果你還沒有集群,你可以通過 Minikube 構(gòu)建一個你自己的集群,或者你可以使用下面任意一個 Kubernetes 工具構(gòu)建:

要檢查版本,請輸入 ?kubectl version?。

  • 你應(yīng)該熟悉 Init 容器的基礎(chǔ)知識。
  • 你應(yīng)該已經(jīng)配置好一個 Init 容器。

檢查 Init 容器的狀態(tài)

顯示你的 Pod 的狀態(tài):

kubectl get pod <pod-name>

例如,狀態(tài) ?Init:1/2? 表明兩個 Init 容器中的一個已經(jīng)成功完成:

NAME         READY     STATUS     RESTARTS   AGE
<pod-name>   0/1       Init:1/2   0          7s

獲取 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 Spec 上的 ?status.initContainerStatuses? 字段,了解 Init 容器的狀態(tài):

kubectl get pod nginx --template '{{.status.initContainerStatuses}}'

此命令將返回與原始 JSON 中相同的信息.

通過 Init 容器訪問日志 

與 Pod 名稱一起傳遞 Init 容器名稱,以訪問容器的日志。

kubectl logs <pod-name> -c <init-container-2>

運行 Shell 腳本的 Init 容器在執(zhí)行 Shell 腳本時輸出命令本身。 例如,你可以在 Bash 中通過在腳本的開頭運行 ?set -x? 來實現(xiàn)。

理解 Pod 的狀態(tài) 

以 ?Init:? 開頭的 Pod 狀態(tài)匯總了 Init 容器執(zhí)行的狀態(tài)。 下表介紹調(diào)試 Init 容器時可能看到的一些狀態(tài)值示例。

狀態(tài) 含義
Init:N/M Pod 包含 M 個 Init 容器,其中 N 個已經(jīng)運行完成。
Init:Error Init 容器已執(zhí)行失敗。
Init:CrashLoopBackOff Init 容器執(zhí)行總是失敗。
Pending Pod 還沒有開始執(zhí)行 Init 容器。
PodInitializing or Running Pod 已經(jīng)完成執(zhí)行 Init 容器。


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號