kubelet依赖于kube-apiserver来获得关于在其node上加载哪些pod的指令,这是基于存储在etcd数据库中的kube-scheduler所做的决定。
kubelet也可以独立运行,可以创建pod,可以指定用于存储pod信息的目录中读取pod定义文件。kubelet会每隔一段时间确认pod定义文件的信息,并保持一致。
replicasets、deployment、service无法独立运行。它们都是整个Kubernetes架构的概念组成部分,需要复制和部署控制器等其他控制平面组件。
kubelet在pod级别工作,只能理解pod,这也是为什么它能够创建static pod。
指定目录可以是任意地址,指定方式为kubelet.service
文件中
--pod-manifest-path=/etc/Kubernetes/manifests
--config=kubeconfig.yaml
ps : kubeadmin也是用这种方式实现的
其中kubeconfig.yaml
staticPodPath: /etc/Kubernetes/manifests
用docker ps
查看Static Pod生成结果,如果没有Kubernetes cluster。
如果有Kubernetes cluster,kube-apiserver会知道Static Pod的情况。(kube-apiserver上会有个Static Pod的只读镜像,pod的name会附加node的名称)
可以使用Static Pod将控制平面组件本身作为pod部署在node上,这样就可以在本地进行部署,不必下载二进制文件配置服务或担心服务崩溃,这也是kubeadmin工具设置Kubernetes集群的方式。
Static Pods vs DaemonSets
Static Pods | DaemonSets |
---|---|
Created by the Kubelet | Created by Kube-API server (DaemonSet Controller) |
Deploy Control Plane components as Static Pods | Deploy Monitoring Agents, Logging Agents on nodes |
Ignored by the Kube-Scheduler | Ignored by the Kube-Scheduler |
判断是Static Pod的几种方式:
- pod name结尾带有node name
kubectl get pod pod-name -n=kube-system -o yaml
中查看配置文件,ownerReferences属性下kind为Node,普通的为ReplicaSet等
查看Static Pod的配置文件位置:
- 查看
/var/lib/kubelet/config.yaml
中的staticPodPath
添加command的方式:在kubectl命令后加上--command -- sleep 1000
,请保证--command
放在整条命令之后,所有在--
后的都会被视为添加的command。
创建Static Pod的方式就是把pod定义文件放到staticPath
切换node的方式ssh node-ip-address