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)。