K8s 静态 Pod 是一种由 kubelet 直接管理、不依赖 Kubernetes API Server 的特殊 Pod。

简单来说,它不受集群控制平面(Master节点)的调度,而是直接绑定在某台具体的 Node 节点上。

以下是静态 Pod 的主要用途和价值:

1. 启动和控制平面组件

这是静态 Pod 最核心的用途。在部署 Kubernetes 集群时(特别是使用 kubeadm 部署),API Server、Controller Manager、Scheduler 等核心控制平面组件通常都以静态 Pod 的形式运行。

  • 为什么? 因为集群本身还没有完全启动好,API Server 还没运行,无法通过正常的 Deployment 或 Pod 方式来启动它们。kubelet 不依赖 API Server,它直接监控本机磁盘上的文件,从而把这些核心组件“自举”起来。

2. 不依赖集群可用性

静态 Pod 不依赖于集群的控制平面(即 Master 组件)是否正常工作。

  • 即使整个集群的 API Server 宕机了,或者网络不通,只要节点上的 kubelet 还在运行,静态 Pod 就会一直保持运行状态。
  • 这对于需要运行关键的后台守护进程(比如日志收集Agent、监控Agent)非常有用,确保这些服务不会因为集群故障而停止。

3. 简化部署和测试

  • 快速测试: 对于开发人员或集群管理员来说,如果想在特定节点上快速运行一个 Pod 进行调试或测试,只需要登录到该节点,把 Pod 的 YAML 定义文件放到 kubelet 监听的目录下即可,kubelet 会自动运行它。不需要通过 kubectl apply
  • 自愈性: 如果静态 Pod 进程崩溃了,kubelet 会自动尝试重启它(类似于 Docker 的 restart 策略)。

4. 部署集群基础设施组件

在某些边缘计算或特定场景下,可以使用静态 Pod 部署一些节点级别的必要服务,例如:

  • CNI 网络插件(如 Flannel、Calico 的 Agent 部分)。
  • Kube-proxy(虽然在常规部署中它通常作为 DaemonSet 运行,但在某些自建环境中,早期可能用静态 Pod 替代)。
  • 节点监控组件。

5. 管理方式简单直接

静态 Pod 由文件驱动。你只需要在 kubelet 配置的 staticPodPath 目录下(通常是 /etc/kubernetes/manifests)放置或删除 YAML 文件,kubelet 就会自动创建或删除对应的 Pod。


总结:静态 Pod vs 普通 Pod

特征静态 Pod普通 Pod (由控制器管理)
管理来源由节点上的 kubelet 直接管理API Server (控制平面)管理
依赖组件只依赖 kubelet依赖 API Server、Scheduler、Controller Manager
创建方式在节点磁盘的特定目录下放置 YAML 文件通过 kubectl 或 API 请求创建
查看方式通过 kubectl get pod 可以看到只读镜像,但不能修改完全可创建、更新、删除
主要用途启动核心组件 (API Server)、节点级守护进程运行业务应用、微服务

如果你正在用 kubeadm 搭建集群,可以看一下 /etc/kubernetes/manifests 目录,里面的 YAML 文件定义的就是集群的静态 Pod。

更多推荐