静态 Pod
本教程共 65 篇 · 第 23 篇 · 更新于 2026-08-14 · 约 10 分钟阅读
本节目标:学完你能说清静态 Pod 和普通 Pod 的根本区别——它不经 API Server,直接由 kubelet 管,并知道它是怎么被用来托管控制平面组件的。
你前面见的 Pod,都是”写清单 → apiserver 收下 → 调度器安排 → kubelet 执行”。静态 Pod 走的是另一条路:它根本不进 apiserver,是节点上的 kubelet 自己看着本地文件起的。
23-1 什么是静态 Pod
静态 Pod(Static Pod)由特定节点上的 kubelet 守护进程直接管理,不经过 API Server。你不会用 kubectl apply 去创建它(虽然能用 kubectl 看)。
它就像 kubelet 的”私有家务”:kubelet 读到本地有个 Pod 清单,就把它跑起来;清单删了,Pod 就停。
Note静态 Pod 永远绑定在”某一个节点”的 kubelet 上,不会在节点间迁移。这是它和普通 Pod 最大的不同。
23-2 kubelet 怎么管它
kubelet 的配置里有个字段 staticPodPath,指向一个目录。kubelet 定期扫描这个目录,把里面的 YAML/JSON 文件当成静态 Pod 清单。
目录里出现新文件 → 起 Pod;文件被删 → 停 Pod;文件改了 → 重建 Pod。
# kubelet 配置片段(kubelet-config.yaml)
staticPodPath: /etc/kubernetes/manifests
在 kubeadm 搭建的集群里,这个目录默认就是 /etc/kubernetes/manifests。你往里放文件,控制平面组件就起来了。
Warningkubelet 扫描目录时会读取所有非点开头的文件,不看扩展名。备份清单千万别存
.yaml.backup这种名字——它照样会被读,可能造成同名 Pod 定义冲突。备份请移到目录外。
23-3 两种创建方式
方式一:文件系统清单(最常用)。直接把 Pod 的 YAML 放进 staticPodPath 目录。
# /etc/kubernetes/manifests/static-web.yaml
apiVersion: v1
kind: Pod
metadata:
name: static-web
labels:
role: my-web
spec:
containers:
- name: web
image: nginx:1.27
ports:
- containerPort: 80
方式二:HTTP 托管。kubelet 也能配置从某个 HTTP 地址拉清单。适合集中下发配置的场景,但用得少。
23-4 怎么查看静态 Pod
虽然不经 apiserver 创建,但 kubelet 会镜像一个同名的 Pod 对象到 apiserver,好让你能用 kubectl 看到它。镜像对象只读,删它没用——得去节点上删源文件。
kubectl get pod
# static-web-node01 1/1 Running ...
名字通常带节点后缀(如 static-web-node01),一眼能认出是静态 Pod。
kubectl describe pod static-web-node01
Tip想改静态 Pod,直接编辑节点上的源 YAML 文件。kubelet 检测到变化会自动重建。用
kubectl edit改那个镜像对象是不生效的。
23-5 典型用途
静态 Pod 最大的用处是自托管控制平面。
你想:控制平面的组件(apiserver、scheduler、controller-manager)本身也得跑成 Pod。但它们不能依赖 apiserver 来调度自己——鸡生蛋蛋生鸡。所以 kubeadm 把这些组件写成静态 Pod,由 kubelet 直接拉起,不依赖控制平面自己。
ls /etc/kubernetes/manifests/
# kube-apiserver.yaml
# kube-controller-manager.yaml
# kube-scheduler.yaml
# etcd.yaml
这也是为什么节点宕机后,这些核心组件能随 kubelet 自动恢复。
23-6 常见坑
一是改了源文件 Pod 没变。确认文件在 staticPodPath 目录内、且不以点开头,kubelet 才扫得到。
二是误以为 kubectl delete 能删静态 Pod。删了 apiserver 里的镜像对象,kubelet 一同步又给你建回来。正解是删节点上的源文件。
三是把业务 Pod 写成静态 Pod。它不能跨节点调度、不受 Deployment 管理,运维起来很别扭。业务请用普通工作负载。
Note日常管理几乎碰不到静态 Pod。你只要知道”它存在、它管控制平面、它不听 apiserver 的”就够了。真要排查控制平面起不来,第一步就是去节点看
/etc/kubernetes/manifests/里的文件。
学完 6 种 Pod 与工作负载,可能有点乱。第 24 章给你一张选型表,一眼知道该用哪个。