0%

kubernetes中的静态Pod

平常我们提得比较多的Pod,都是通过Deployment,DaemonSet,StatefulSet等方式创建管理的。今天我们介绍一种特殊的Pod,叫静态(Static) Pod。

什么是静态Pod

静态Pod是由kubelet进行管理,仅存在于特定Node上的Pod,这些Pod是不能通过API Server进行管理的,无法与ReplicationController,Deployment或DaemonSet关联。

静态Pod的创建

通过配置yaml文件可以创建静态Pod。只要有kubelet进程,就可以在所在节点运行静态Pod。

如果通过二进制启动的kubelet,可以在kubelet执行时添加配置参数--pod-manifest-path=<yaml directory>,kubelet会定期扫描目录,应用目录下面的yaml文件来创建静态Pod。

我是通过kubeadm安装的集群,我们以kube-scheduler这个静态Pod为例,看看它是如何运行的。

1
2
ps -ef | grep kubelet
root 6088 1 3 Dec23 ? 01:45:47 /usr/bin/kubelet --bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf --config=/var/lib/kubelet/config.yaml --cgroup-driver=systemd --network-plugin=cni --pod-infra-container-image=k8s.gcr.io/pause:3.1

看到--config的目录为/var/lib/kubelet/config.yaml,查看此文件内容,我们可以看到参数staticPodPath的值:

1
2
cat /var/lib/kubelet/config.yaml | grep staticPodPath
staticPodPath: /etc/kubernetes/manifests

查看目录内容

1
2
3
4
5
6
ll /etc/kubernetes/manifests
total 16
-rw------- 1 root root 1928 Dec 12 10:38 etcd.yaml
-rw------- 1 root root 2610 Dec 12 10:38 kube-apiserver.yaml
-rw------- 1 root root 2486 Dec 12 10:38 kube-controller-manager.yaml
-rw------- 1 root root 990 Dec 12 10:38 kube-scheduler.yaml

由此得知,kubelet会扫描staticPodPath,检测到这个目录下有yaml文件,就创建Pod了。如果要删除Pod,把这些配置文件删除即可。