Pod Tips


Pod 状态计算细节

Pod 的 QoS 分类

request 是最低资源需求,limit 是最高资源需求

QoS 类别 描述
Guaranteed(确保) Pod 的资源 request 和 limit 相同
Burstable(可破裂) Pod 的资源 request 小于 limit
BestEffort(尽力而为) Pod 的资源没有设置任何 request 和 limit

当计算节点上存在内存/磁盘压力时,k8s 会按照 BestEffort -> Burstable -> Guaranteed 的顺序一次驱逐 pod.

CPU 是可以压缩的资源,当 CPU 存在压力时,k8s 不会驱逐 pod.

通常情况下,Burstable 是最好的 QoS 策略,对于一些重要的核心 pod,可以设置为 Guaranteed, 确保它最后被驱逐。

统计集群中运行 pod 的数量

sum(kube_pod_status_phase{phase="Running"})

kube_pod_container_status_ready 指标有 namespace, cluster, phase Label 可以对指标进行筛选,其他的看起来都是 prom 相关的

phase 有五种: Pending|Running|Succeeded|Failed|Unknown

  • 统计处于 Running 和 Succeeded 状态的 Pod,某些 Job 执行成功后是 Succeed 状态
sum(kube_pod_status_phase{phase=~"Running|Succeeded"})
  • 按 namespace 统计集群中运行 pod 的数量,并按逆序排序
sort_desc(sum(kube_pod_status_phase{phase="Running"}) by (namespace))

参考链接

k8s 停止 Pod 的过程

  1. 将 Pod 的状态设置为 Terminating,将 Pod 从 service 的 endpoints 列表中移除。
  2. 执行 preStopHook
  3. 发送 SIGTERM 信号给进程。
    • 注意: k8s 不会等待 preStopHook 结束后再发送信号,发送 SIGTERM 和 执行 preStopHook 是同时进行的
  4. 等待 Pod 正常退出,等待的时间由 terminationGracePeriod 设置
  5. 如果等待超时,会发送 SIGKILL 信号给进程。
  6. 清理 k8s 中存储的 Pod 信息。

参考链接

2023年03月02日 / 09:31