调试初始化容器

此页面展示了如何调查与 Init 容器执行相关的問題。以下示例命令行引用了 Pod 为 <pod-name>,Init 容器为 <init-container-1><init-container-2>

开始之前

您需要拥有一个 Kubernetes 集群,并且 kubectl 命令行工具必须配置为与您的集群通信。建议在至少有两个节点(不充当控制平面主机)的集群上运行本教程。如果您还没有集群,可以使用 minikube 创建一个,或者可以使用以下 Kubernetes 游乐场之一

要检查版本,请输入 kubectl version

检查 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 Spec 上的 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/MPod 有 M 个 Init 容器,到目前为止已完成 N 个。
Init:ErrorInit 容器执行失败。
Init:CrashLoopBackOffInit 容器反复失败。
PendingPod 尚未开始执行 Init 容器。
PodInitializingRunningPod 已经完成执行 Init 容器。
上次修改时间:2023 年 12 月 29 日下午 9:47 PST:修复过时的链接/锚点 (bcc55ae7c9)