Kubernetes Pod 作为 Kubernetes 核心资源对象,不仅 Service、Controller、Workload 都是围绕它展开工作。作为最小调度单元的它,还担任着传统 IT 环境主机的职责,包含了调度,网络,存储,安全等能力。
正是因为 Pod 具有复杂的生命周期和依赖,绝大多数 Kubernetes 问题最终都会在 Pod 上表现出来。因此,我们介绍在实际工作实践中会遇到的 9 种典型场景,以及如何使用 Kubernetes 监控来处理这些场景,快速定位发现问题。
容器是用户进程,Pod 就像是机器,所以调度,网络,存储,安全等机器级别的异常以及进程运行的异常都会在 Pod 上面体现出来。围绕着 Pod 来说,有以下几个关键的点非常容易出现问题:
- 调度
- 镜像拉取
- 磁盘挂载
- Liveless/Readiness probe
- postStart/preStop handler
- 配置
- 运行时
那么,接下来我们来盘点一下相关常见的问题场景。
问题场景 1:就绪失败,即 Pod 一直无法到达 Ready 状态,无法接收请求进行业务处理。
常见的根因如下:
- 资源不足,无法调度(Pending),即集群的 Node 没有预留资源能够满足 Pod 的 Request 资源;
- 镜像拉取失败( ImagePullBackoff ),镜像的仓库地址,tag 出现问题;
- 磁盘挂载失败(Pending),容器挂载的 PVC 没有 bound;
- Liveless probe 探针失败,频繁重启;
- Readiness probe 探针失败,无法达到 Ready 状态;
- postStart 执行失败,一直无法进入运行状态;
- 运行时程序崩溃( CrashLoopBackOff ),频繁重启;
- 配置错误,比如挂载的 Volume 不存在(RunContainerError)。