调试 Pods 和 Replication Controllers

    你必须拥有一个 Kubernetes 的集群,同时你的 Kubernetes 集群必须带有 kubectl 命令行工具。 如果你还没有集群,你可以通过 Minikube 构建一 个你自己的集群,或者你可以使用下面任意一个 Kubernetes 工具构建:

    要获知版本信息,请输入 .

    调试一个 pod 的第一步是观察它。使用下面的命令检查这个 pod 的当前状态和最近事件:

    看看 pod 中的容器的状态。他们都是 Running 吗?有最近重启了吗?

    根据 pod 的状态继续调试。

    如果一个 pod 被卡在 Pending 状态,就意味着它不能调度在某个节点上。一般来说,这是因为某种类型的资源不足而 阻止调度。 看看上面的命令 kubectl describe ... 的输出。调度器的消息中应该会包含无法调度 Pod 的原因。 原因包括:

    资源不足

    可以考虑配置 资源配额 来限制可耗用的资源总量。如果与命名空间一起使用,它可以防止一个团队吞噬所有的资源。

    使用hostPort

    当你将一个 pod 绑定到一个 hostPort 时,这个 pod 能被调度的位置数量有限。 在大多数情况下,hostPort 是不必要的; 尝试使用服务对象来暴露您的 pod。 如果你需要 hostPort,那么你可以调度的 Pod 数量不能超过集群的节点个数。

    • 确保您的镜像的名称正确。
    • 您是否将镜像推送到存储库?
    • 在您的机器上手动运行 docker pull <image>,看看是否可以拉取镜像。

    首先,查看当前容器的日志:

    如果您的容器先前已崩溃,则可以访问上一个容器的崩溃日志:

    1. $ kubectl logs --previous ${POD_NAME} ${CONTAINER_NAME}

    或者,您可以使用 exec 在该容器内运行命令:

    例如,要查看正在运行的Cassandra pod的日志,可以运行:

      如果这些方法都不起作用,您可以找到该运行 pod 所在的主机并 SSH 到该主机。

      您也可以使用kubectl describe rc ${CONTROLLER_NAME}来检查和Replication Controllers有关的事件。