Static静态Pod
- pod
- 2024-10-08
- 49热度
- 0评论
当我们部署k8s时,会启动几个默认的pod,这些pod是k8s的默认组件,它们分别是:
- kube-apiserver:提供k8s各类资源对象的增删改查及watch等rest接口
- kube-scheduler:Kubernetes的调度器,是一个控制面的进程,负责将pods调度到节点上
- kube-controller-manager: 控制器作为集群内部的管理控制中心,负责集群内的node/pod副本/服务端点(Endpoint)、命名空间(Namespace)、服务帐号(ServiceAccount)、资源定额(ResourceQuota)的管理
- kube-porxy:网络代理,运行在node上,它反映了node上Kube-apiserver中定义的服务,并可以通过一组后端进行简单的TCP/UDP和SCTP流转发或者在一组后端进行循环TCP/UDP/SCTP转发
- etcd:可以使用systemd部署,也可以是pod,用于保存kubernetes的所有集群数据,etcd支持分布式集群功能
- coredns:负责为整个集群提供DNS服务,从而实现服务之间的访问
静态 Pod 直接由特定节点上的kubelet
进程来管理,不通过 master 节点上的apiserver
。无法与我们常用的控制器Deployment
或者DaemonSet
进行关联,它由kubelet
进程自己来监控,当pod
崩溃时重启该pod
,kubelete
也无法对他们进行健康检查。静态 pod 始终绑定在某一个kubelet
,并且始终运行在同一个节点上。 kubelet
会自动为每一个静态 pod 在 Kubernetes 的 apiserver 上创建一个镜像 Pod(Mirror Pod),因此我们可以在 apiserver 中查询到该 pod,但是不能通过 apiserver 进行控制(例如不能删除)。
创建静态 Pod 配置文件:
/etc/systemd/system/kubelet.service.d/10-kubeadm.conf
打开这个文件我们可以看到其中有一条如下的环境变量配置:
Environment="KUBELET_SYSTEM_PODS_ARGS=--pod-manifest-path=/etc/kubernetes/manifests --allow-privileged=true"
所以如果我们通过kubeadm
的方式来安装的集群环境,对应的kubelet
已经配置了我们的静态 Pod 文件的路径,那就是/etc/kubernetes/manifests
,所以我们只需要在该目录下面创建一个标准的 Pod 的 JSON 或者 YAML 文件即可:
如果你的 kubelet 启动参数中没有配置上面的--pod-manifest-path
参数的话,那么添加上这个参数然后重启 kubelet 即可。