Kubernetes Deployment故障排除图解指南

here's a diagram to help you debug your deployments in Kubernetes (and you can download it in the PDF version here).

原文:https://learnk8s.io/troubleshooting-deployments

Kubernetes Deployment故障排除图解指南

K8s pod生命周期和容器状态:

  • Pod phase: Pod phase 是对 Pod 在其生命周期中所处位置的一个高层次的概括,包括 PendingRunningSucceededFailed 和 Unknown

    • Pending:Pod 已被 Kubernetes 系统接受,但有一个或者多个容器尚未被创建。此阶段包括等待 Pod 被调度的时间和通过网络下载镜像的时间。

    • Running:Pod 中的所有容器都已经被创建,并且至少有一个容器正在运行,或者正在启动或者重启。

    • Succeeded:Pod 中的所有容器都已经成功终止,并且不会再重启。

    • Failed:Pod 中的所有容器都已经终止,但至少有一个容器是因为失败而终止。

    • Unknown:Pod 的状态无法被获取,通常是由于与 Pod 应该运行的节点通信失败导致的。

  • Container states: 容器的状态,包括 WaitingRunning 和 Terminated

    • Waiting:容器正在等待某些条件满足,例如正在拉取镜像,或者应用 Secret 数据。

    • Running:容器正在运行中。

    • Terminated:容器已经终止,可能是正常结束或者因为某些原因失败。如果你使用 kubectl describe pod 或者 kubectl get pod 命令来查询包含 Terminated 状态的容器的 Pod 时, 你会看到容器进入此状态的原因、退出代码以及容器执行期间的起止时间。

  • Pod Status:在执行 kubectl get pod 命令时返回的 Pod 状态,该字段是 Pod 内所有容器状态的一个聚合,具体的源代码参见 printPod 函数.有以下几个常见的状态:

    • Init:N/M:Pod 包含 M 个 init 容器,其中 N 个已经运行完成。

    • Init:Error:Pod 中的某个 init 容器执行失败。

    • Init:CrashLoopBackOff:Pod 中的某个 init 容器多次失败。

    • Pending:Pod 尚未开始创建 init 容器。

    • PodInitializing:Pod 已经执行完所有 init 容器,在等待创建主容器。

    • ContainerCreating:当 Pod 中不包含 init 容器时,在等待创建主容器时会显示这个状态。

    • Running:Pod 中的所有容器都在运行中。

  • Pod Ready:以 Ready 的容器数量 / 所有容器的数量的形式展示。


K8s镜像状态及拉取策略:

在Kubernetes中,容器镜像策略(ImagePullPolicy)定义了容器在启动时如何拉取镜像的策略。常见的容器镜像策略状态包括:

  1. Always(始终):表示容器将始终尝试从镜像仓库拉取最新版本的镜像。即使本地已经存在相同的镜像,也会尝试拉取最新版本。

  2. IfNotPresent(如果不存在则拉取):表示容器仅在本地不存在所需镜像时才会尝试从镜像仓库拉取。如果本地已经存在相同的镜像,则不会拉取新的镜像。

  3. Never(从不拉取):表示容器不会尝试从镜像仓库拉取镜像。容器假定本地已经存在所需的镜像。

容器镜像下载的几种状态包括:

  1. Pulling(拉取中):表示容器正在从镜像仓库中下载镜像文件。

  2. Pulled(已拉取):表示容器已成功下载所需的镜像文件。

  3. ImagePullBackOff(镜像拉取失败):表示容器尝试拉取镜像但失败。

  4. ErrImagePull(镜像拉取错误):表示容器尝试拉取镜像时发生了错误。

  5. ImageInspectError(镜像检查错误):表示在尝试拉取镜像之前对镜像进行检查时出现了错误。


K8s容器探针:

Kubernetes中的容器探针(Probes)包括startupProbe、readinessProbe和livenessProbe,它们各自有不同的作用。

startupProbe:

Kubernetes Deployment故障排除图解指南

    • 作用:startupProbe用于验证容器内的应用程序是否已启动。它在其他探针之前运行,如果启动探针失败,则会禁用其他探针并杀死容器。

    • 用例:适用于需要在容器启动后立即发送流量的情况。

    • 最佳实践:如果容器启动时间较长,可以指定Startup Probe。Startup Probe和Liveness Probe可以使用相同的端点,但Startup Probe可以具有较宽松的失败阈值,以防止启动时的失败。

readinessProbe:

Kubernetes Deployment故障排除图解指南

    • 作用:readinessProbe用于确定容器是否准备好提供服务。如果readinessProbe返回失败状态,Kubernetes将从所有服务的端点中删除容器的IP地址。

    • 用例:适用于等待应用程序执行耗时初始任务的情况,如建立网络连接、加载文件和缓存预热。

    • 最佳实践:包括所有必要的检查,但检查不应耗时过长。始终指定Readiness Probe,以确保只有当容器能够正确处理传入请求时才接收流量。

livenessProbe:

Kubernetes Deployment故障排除图解指南

    • 作用:livenessProbe用于确定容器中运行的应用程序是否处于健康状态。如果livenessProbe检测到不健康状态,Kubernetes将杀死容器并尝试重新部署。

    • 用例:适用于检测应用程序是否处于可用状态的情况。

    • 最佳实践:只包含基本检查在livenessProbe中,不要包含对其他服务连接的检查。检查不应该耗时过长。


参考:


anzhihe 安志合个人博客,版权所有 丨 如未注明,均为原创 丨 转载请注明转自:https://chegva.com/4157.html | ☆★★每天进步一点点,加油!★★☆ | 

您可能还感兴趣的文章!

发表评论

电子邮件地址不会被公开。 必填项已用*标注