靜態Pod
kubernetes 除了我們常用的普通Pod外,還有一種特殊的Pod,叫靜態Pod。
概念
靜態Pod是直接由節點kubelet進程來管理的,不能通過apiserver的master節點控制。無法與我們常用的控制器daemonset 和 deployment 聯合使用,它由kubelet進程負責監控,當Pod崩潰時重啟該Pod,kubelet也無法對靜態Pod進行健康檢查。靜態Pod始終綁定在某一個kubelet節點上,並且始終運行在同一個節點。kubelet會自動為每一個靜態Pod在kubernetes的apiserver上創建一個鏡像Pod(Mirror Pod),因此我們可以通過apiserver看到靜態Pod,但是不能通過apiserver控制。
創建靜態Pod的方式有兩種: 配置文件、HTTP
配置文件
以配置文件方式部署靜態Pod,需要開啟kubelet組件的 --pod-manifest-path=
如果在已經啟動的kubelet組件上,沒有添加 --pod-manifest-path=
比如--pod-manifest-path=/etc/kubernetes/manifests 而用kubeadm部署的集群,在這個目錄下,可以看到kube-apiserver.yaml 、kube-controller-manager.yaml 、kube-scheduler.yaml三個靜態Pod yaml文件
模板:
/etc/kubernetes/manifest/static-web.yaml
apiVersion: v1
kind: Pod
metadata:
name: static-web
labels:
app: static
spec:
containers:
- name: web
image: nginx
ports:
- name: web
containerPort: 80
HTTP方式創建靜態Pod
kubelet 周期地從–manifest-url=
參數指定的地址下載文件,並且把它翻譯成 JSON/YAML 格式的 pod 定義。此后的操作方式與–pod-manifest-path=
相同,kubelet 會不時地重新下載該文件,當文件變化時對應地終止或啟動靜態 pod。
靜態Pod的作用
由於靜態Pod只受所在節點的kubelet控制,可以有效預防通過kubectl、或管理工具操作的誤刪除,可以用來部署核心組件應用。保障應用服務總是運行穩定數量和提供穩定服務。