调试初始化容器
本页面展示如何调查与 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 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 容器会在执行时打印命令。例如,你可以通过在脚本开头运行 set -x
在 Bash 中执行此操作。
理解 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 PST:修复过时的链接/锚点 (bcc55ae7c9)