概述
今儿是冬至,尽管如此,学习的脚步还是不能停下,今天学习实践一下kubernetes中的静态pod是什么?
我们知道在前面Pod的声明周期管理都是通过像DaemonSet、StatefulSet、Deployment这种方式创建管理的,而官方文档介绍了一种特殊的pod就是静态Pod,
什么是静态Pod
静态Pod是由kubelet进行管理,仅存在于特定Node上的Pod。它们不能通过API Server进行管理,无法与ReplicationController、Deployment或DaemonSet进行关联,并且kubelet也无法对其健康检查。
静态Pod的创建:
静态pod可以通过两种方式创建:使用配置文件或HTTP。
通过配置文件创建
配置文件只是特定目录中json或yaml格式的标准pod定义。他通过在kubelet守护进程中添加配置参数--pod-manifest-path=<the directory>
来运行静态Pod,kubelet经常会它定期扫描目录;
例如,如何将一个简单web服务作为静态pod启动
选择运行静态pod的节点服务器
不一定是node节点,只要有kubelet进程所在的节点都可以运行静态pod
我在某个节点上创建一个放置一个Web服务器pod定义的描述文件文件夹,例如/etc/kubelet.d/static-web.yaml
1 | $ mkdir kubelet.d/ |
通过使用–pod-manifest-path=/etc/kubelet.d/参数运行它,在节点上配置我的kubelet守护程序以使用此目录。
比如我这里kubelet启动参数位于/etc/systemd/system/kubelet.service.d/10-kubelet.conf, 修改配置,然后将参数加入到现有参数配置项中(安装方式不尽相同,但是道理一样)
1 | $ vim /etc/systemd/system/kubelet.service.d/10-kubelet.conf |
保存退出,reload一下systemd daeomon ,重启kubelet服务进程
1 | $ systemctl daemon-reload |
前面说啦,当kubelet启动时,它会自动启动在指定的目录–pod-manifest-path=或–manifest-url=参数中定义的所有pod ,即我们的static-web。
再该节点上检查是否创建成功:
1 | $ kubectl get pods -o wide |
上面也提到了,他不归任何部署方式来管理,即使我们尝试kubelet命令去删除
1 | $ kubectl delete pod static-web-k8s-m1 |
可以看出静态pod通过这种方式是没法删除的
那我如何去删除或者说是动态的添加一个pod呢?
这种机制已经知道,kubelet进程会定期扫描配置的目录(/etc/kubelet.d在我的示例)以进行更改,并在文件出现/消失在此目录中时添加/删除pod。
通过url来创建:
例如,我在这个url放置了一个pod创建的描述文件
那么上面提到了如何修改?通过url来创建的?就是kubelet启动配置参数中配置--manifest-url
指向即可
ok 以上就是如何创建静态Pod的具体食用方法,那什么场景需要用到它,这个我个人觉得还是因人或因环境而已,毕竟kubernetes开发出了这个功能,就说明有用武之地的。
同时在kubelet-conf.yml可以指定直接指定这个StaticPod的描述文件存放目录:
1 | $ cat kubelet-conf.yml |
但是还是需要在启动参数中配置 --pod-manifest-path