调试 Init 容器
本页介绍如何调查与初始化容器 (Init Containers) 执行相关的问题。下面的示例命令行将 Pod 称为 <pod-name>
,将初始化容器 (Init Containers) 称为 <init-container-1>
和 <init-container-2>
。
开始之前
你需要有一个 Kubernetes 集群,并且 kubectl 命令行工具已经配置为与你的集群通信。建议在至少有两个非控制平面主机节点的集群上运行本教程。如果你还没有集群,可以使用 minikube 创建一个,或者使用以下 Kubernetes 练习环境之一:
要检查版本,请输入 kubectl version
。
- 你应该熟悉 初始化容器 (Init Containers) 的基础知识。
- 你应该已经配置了初始化容器 (Init Container)。
检查初始化容器的状态
显示你的 Pod 的状态
kubectl get pod <pod-name>
例如,状态 Init:1/2
表示两个初始化容器中的一个已成功完成。
NAME READY STATUS RESTARTS AGE
<pod-name> 0/1 Init:1/2 0 7s
有关状态值及其含义的更多示例,请参阅理解 Pod 状态。
获取初始化容器的详细信息
查看初始化容器执行的更多详细信息
kubectl describe pod <pod-name>
例如,一个有两个初始化容器的 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
字段,以编程方式访问初始化容器状态。
kubectl get pod nginx --template '{{.status.initContainerStatuses}}'
此命令将以原始 JSON 格式返回与上述相同的信息。
访问初始化容器的日志
将初始化容器名称和 Pod 名称一起传入,以访问其日志。
kubectl logs <pod-name> -c <init-container-2>
运行 shell 脚本的初始化容器在执行时会打印命令。例如,你可以在 Bash 中通过在脚本开头运行 set -x
来实现这一点。
理解 Pod 状态
以 Init:
开头的 Pod 状态总结了初始化容器的执行状态。下表描述了你在调试初始化容器时可能会看到的一些示例状态值。
Status | 含义 |
---|---|
Init:N/M | Pod 有 M 个初始化容器,其中 N 个已完成。 |
Init:Error | 一个初始化容器执行失败。 |
Init:CrashLoopBackOff | 一个初始化容器反复失败。 |
Pending | Pod 尚未开始执行初始化容器。 |
PodInitializing 或 Running | Pod 已完成执行初始化容器。 |
最后修改于 2023年12月29日 晚上9:47 (太平洋标准时间): 修复过时链接/锚点 (bcc55ae7c9)