Kubernetes(K8s)部署通常会带来各种角度的挑战,包括 pod、服务、ingress、无响应集群、控制平面和高可用性设置。Kubernetes pod 是 Kubernetes 生态系统中最小的可部署单元,封装了一个或多个共享资源和网络的容器。Pod 旨在运行应用程序或进程的单个实例,并根据需要创建和处置。Pod 对于在 K8s 环境中扩展、更新和维护应用程序至关重要。

译自 Master Kubernetes Pods: Advanced Troubleshooting Strategies,作者 None。

本文探讨了 Kubernetes pod 面临的挑战以及要采取的故障排除步骤。运行 Kubernetes pod 时遇到的部分错误消息包括:

  • ImagePullBackoff
  • ErrImagePull
  • InvalidImageName
  • CrashLoopBackOff

有时,您甚至不会遇到列出的错误,但仍会发现您的 pod 失败。首先,需要注意的是,在调试任何 Kubernetes 资源时,您都应该了解 API 参考。它解释了如何定义各种 Kubernetes API 以及 pod/部署中的多个对象如何工作。文档在 Kubernetes 网站上的 API 参考中定义得很明确。在这种情况下,在调试 pod 时,从 API 参考中选择 pod 对象以详细了解 pod 的工作原理。它定义了进入 pod 的字段,即版本、类型、元数据、规范和状态。Kubernetes 还提供了一个作弊小炒,其中包含所需命令的指南。

先决条件

本文假设读者具备以下条件:

  • 已安装 Kind 以进行场景演示
  • 对 Kubernetes 架构有中级了解
  • Kubectl 命令行工具

Kubernetes Pod 错误 – ImagePullBackoff

该错误显示有三个不同的原因:

  • 无效镜像
  • 无效标签
  • 无效权限

当您没有有关镜像的正确信息时,就会出现这些情况。您可能也没有从其存储库(私有存储库)中提取镜像的权限。为了在下面的示例中演示这一点,我们创建了一个 nginx 部署:

➜ ~ kubectl create deploy nginx --image=nginxdeployment.apps/nginx