调试 Pods 和 ReplicationControllers
你必须拥有一个 Kubernetes 的集群,同时你的 Kubernetes 集群必须带有 kubectl 命令行工具。 建议在至少有两个节点的集群上运行本教程,且这些节点不作为控制平面主机。 如果你还没有集群,你可以通过 Minikube 构建一个你自己的集群,或者你可以使用下面任意一个 Kubernetes 工具构建:
To check the version, enter .
- 你应该先熟悉 和 Pod 生命周期 的基础概念。
调试一个 pod 的第一步是观察它。使用下面的命令检查 Pod 的当前状态和最近事件:
看看 Pod 中的容器的状态。它们都是 Running
吗?最近有重启吗?
根据 Pod 的状态继续调试。
资源不足
你可能已经耗尽了集群中供应的 CPU 或内存。在这个情况下你可以尝试几件事情:
终止不需要的 Pod 为 Pending 状态的 Pod 提供空间。
检查该 Pod 是否不大于你的节点。例如,如果全部节点具有
cpu:1
容量,那么具有 请求为 的 Pod 永远不会被调度。你可以使用
kubectl get nodes -o <format>
命令来检查节点容量。 下面是一些能够提取必要信息的命令示例:kubectl get nodes -o yaml | egrep '\sname:|cpu:|memory:'
kubectl get nodes -o json | jq '.items[] | {name: .metadata.name, cap: .status.capacity}'
使用 hostPort
当你将一个 Pod 绑定到某 hostPort
时,这个 Pod 能被调度的位置数量有限。 在大多数情况下, 是不必要的; 尝试使用服务对象来暴露你的 Pod。 如果你需要 hostPort
,那么你可以调度的 Pod 数量不能超过集群的节点个数。
如果 Pod 一直停滞在 Waiting
状态,那么它已被调度在某个工作节点,但它不能在该机器上运行。 再次,来自 kubectl describe ...
的内容应该是可以是很有用的。 最常见的原因 Waiting
的 Pod 是无法拉取镜像。有三件事要检查:
- 确保你的镜像的名称正确。
- 尝试手动拉取镜像,看能否拉取。例如,如果你在 PC 上使用 Docker,运行 。
一旦 Pod 已经被调度,就可以依据 调试运行中的 Pod 展开进一步的调试工作。
Replication Controller 相当简单。它们或者能或者不能创建 Pod。如果它们无法创建 Pod, 请参考 来调试你的 Pod。
你也可以使用 kubectl describe rc ${CONTROLLER_NAME}
来检查和副本控制器有关的事件。