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就会删除