K8S中静态pod

静态 Pod 直接由特定节点上的kubelet进程来管理,不通过 master 节点上的 apiserver 。无法与常用的控制器Deployment 或者 DaemonSet 进 行关联,它由 kubelet进程自己来监控,当pod 崩溃时重启该pod , kubelete也无法对他们进行健康检查。静态 pod 始终绑定在某一个 kubelet,并且始终运行在同一个节点上

kubelet 定期的去扫描这个目录,根据这个目录下出现或消失的 YAML/JSON 文件来创建或删除静态 pod

静态pod官方文档:创建静态 Pod | Kubernetes

静态pod的使用场景:长期使用应用

创建静态 Pod 有两种方式:配置文件和 HTTP 两种方式

#比如删除scheduler
[root@k8s-master nginx]# kubectl get pod -A
NAMESPACE              NAME                                         READY   STATUS    RESTARTS   AGE
default                web-nginx                                    2/2     Running   2          19m
kube-system            coredns-7f89b7bc75-52dpp                     1/1     Running   0          6h10m
kube-system            coredns-7f89b7bc75-f2sbs                     1/1     Running   0          6h10m
kube-system            etcd-k8s-master                              1/1     Running   0          6h10m
kube-system            kube-apiserver-k8s-master                    1/1     Running   0          6h10m
kube-system            kube-controller-manager-k8s-master           1/1     Running   0          6h10m
kube-system            kube-proxy-2t8ln                             1/1     Running   0          6h10m
kube-system            kube-proxy-ngnts                             1/1     Running   0          6h9m
kube-system            kube-proxy-pz2qc                             1/1     Running   0          6h9m
kube-system            kube-scheduler-k8s-master                    1/1     Running   0          4s
kubernetes-dashboard   dashboard-metrics-scraper-6cc7d54bc8-kthm9   1/1     Running   0          110m
kubernetes-dashboard   kubernetes-dashboard-58d9fffd68-fktsj        1/1     Running   0          110m

kubectl delete pod kube-scheduler-k8s-master -n kube-system
#虽然提示已删除,但再次查看会发现正在重启

配置文件

配置文件需放在特定目录下的标准的 JSON 或 YAML 格式的 pod 定义 文件,用kubelet --pod-manifest-path= 来启动,kubelet 定期的去扫描这个目录,根据这个目录下出现或 消失的 YAML/JSON 文件来创建或删除静态 pod。

#k8s-node1执行来查找kubelet对应的启动配置文件路径
systemctl status -l kubelet
systemctl show --property=Environment kubelet | cat

/etc/kubernetes/bootstrap-kubelet.conf
/etc/kubernetes/kubelet.conf
/var/lib/kubelet/config.yaml
/usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf

#环境变量在
/var/lib/kubelet/config.yaml
staticPodPath: /etc/kubernetes/manifests
#就在此路径下创建静态pod的yaml文件,也可修改
#例:创建nginx静态pod
vim /etc/kubernetes/manifests/nginx.yaml
apiVersion: v1
kind: Pod
metadata:
    name: stop-web
    labels:
      app: static
spec:
  containers:
    - name: web
      image: nginx
      ports:
        - name: web
          containerPort: 80

#保存后无需操作可直接在master节点查看是否启动,当把配置文件删除或者移动到其他位置pod就会删除