目录

1、为什么忽然想到静态pod

2、何为静态pod

3、为什么需要静态pod

4、静态pod以什么形式部署

5、非kubeadm部署方式如何配置


1、为什么忽然想到静态pod

日常学习k8s都是采用二进制部署方式,统一规划集群核心组件配置文件目录为/opt/kubernetes/cfg/*,实际环境采用kubeadm部署时核心组件配置文件存放在/etc/kubernetes/manifests里面。

为什么这三个核心组件部署文件单独存放在这里?该目录是否只是随机自定义?我如何找到这个目录?于是static pod出现了。

kubernetes为什么关闭swap分区 kubernetes static pod_kubernetes

 

2、何为静态pod

静态pod是kubelet直接启动的pod, k8s系统pod就是静态pod

动态pod是apiserver控制下启动的pod

在Kubernetes中有一个DaemonSet类型的POD,这种类型的POD可以在某个节点上长期运行,这种类型的POD就是静态POD。静态POD直接由某个节点上的kubelet程序进行管理,不需要api server介入,静态POD也不需要关联任何RC,完全是由kubelet程序来监控,当kubelet发现静态POD停止掉的时候,重新启动静态POD。

3、为什么需要静态pod

Node上需要的应当持续运行的长期设施,比如在环境部署时使用静态Pod实现一部分核心组件。结合实际就是kube-apiserver、kube-controller-manager、kube-scheduler之类,他们需要固定的部署在相应节点上还不能被驱逐,static pod不受健康检查影响。

那么为什么kubelet不以容器形式部署呢?由于kubelet在配置容器网络、管理容器数据卷时,都需要直接操作宿主机,而如果现在 kubelet 本身就运行在一个容器里,那么直接操作宿主机就会变得很麻烦。

4、静态pod以什么形式部署

kubelet启动参数“--config”时涉及

由此可见,static pod由kubelet创建更新删除操作,首先查看kubelet状态,找到配置文件

kubernetes为什么关闭swap分区 kubernetes static pod_kubernetes_02

 

我们可以看到—config标签显示

启动参数配置在一个叫/var/lib/kubelet/config.yaml的文件中

kubernetes为什么关闭swap分区 kubernetes static pod_k8s_03

 

静态Pod路径配置为/etc/kubernetes/manifests路径

kubernetes为什么关闭swap分区 kubernetes static pod_kubernetes_04

 

由此可见,通过kubelet启动配置参数指定kubelet需要监控的配置文件所在的目录,kubelet会定期扫描该目录,并根据目录中的yaml或json文件进行创建操作。

通常四个Master上运行的核心组件是通过此方式进行创建的。

5、非kubeadm部署方式如何配置

需要在kubelet启动参数配置文件中添加如下一行:

Environment="KUBELET_SYSTEM_PODS_ARGS=--pod-manifest-path=/etc/kubernetes/manifests --allow-privileged=true

修改配置之后需要重启kubelet

systemctl stop kubelet

systemctl daemon-reload

systemctl start kubelet