啥是静态Pod

静态pod就是不通过Kubernetes控制器直接运行的pod,比如下面是一个nginx的静态pod

1
2
3
4
5
6
7
8
9
10
11
12
apiVersion: v1
kind: Pod
metadata:
name: static-web
spec:
containers:
- name: web
image: registry.cn-hangzhou.aliyuncs.com/iuxt/nginx:1.27.0
ports:
- name: web
containerPort: 80
protocol: TCP

这种pod 如果通过 kubectl delete pod static-web 来删除, 那么就直接删除了,不会像控制器一样重建pod。

kubeadm 集群的组件

二进制运行的组件

二进制运行的组件就是不通过容器化,直接在机器上运行的组件,有3个组件 kubeadm kubelet kubectl ,其中:

  • kubectl 这个是客户端程序,不是必须的,如果需要用到kubectl命令,安装一个就行
  • kubeadm 这个程序每台机器都需要安装,使用它来管理master,worker节点也需要执行kubeadm才能加入集群
  • kubelet 这个组件每台机器都需要安装, 它负责管理节点上的Pod生命周期,也是它负责将节点注册到集群中

kubelet 组件在节点上是通过systemd来管理的。

静态Pod组件

使用kubeadm部署的集群中,etcdkube-apiserverkube-controller-managerkube-scheduler 这些组件都是通过静态Pod来运行的,如图:

image.png|754

但是有个奇怪的问题, 把这些静态Pod删除后,它会自己重建一个新的,不像静态pod一样删除了就没了。

查看kubelet配置

由于所有的Pod都是kubelet负责启动的,我们看下kubelet的配置

image.png|849

找到配置文件在 /var/lib/kubelet/config.yaml , 查看下这个文件的内容:

image.png

staticPodPath 定义了静态Pod yaml文件的位置,可以看到果然都在这里:

image.png

测试

将上面的Nginx 静态Pod 的yaml文件复制到这个目录,可以看到Pod自动创建出来了

image.png

kubelet 自动创建的静态Pod会在Pod名字后面加上 -<计算机名>

/etc/kubernetes/manifests 中的yaml文件删除,pod也会自动销毁。