K8S基本操作-14-Static pods
Static pods
在 Kubernetes 中,Static Pod 是一種特殊的 Pod,它不像一般的 Pod 由 Deployment 或 DaemonSet 等控制器管理,而是直接由特定節點上的 kubelet 进程管理。Static Pod 的主要特點如下:
- 不依賴 API Server:Static Pod 不需要通過 Kubernetes API Server 進行創建或管理,因此即使 API Server 故障,Static Pod 仍然可以正常工作。
- 綁定到特定節點:Static Pod 在創建時會綁定到特定的節點上,並始終在該節點上運行。
- 由 kubelet 管理:Static Pod 由 kubelet 进程直接監控和管理,kubelet 會負責重啟因故障而失敗的 Static Pod。
如何知道某個 Pod 是 static pod ?
用以下方式查詢後:
kubectl get pods --all-namespaces
名稱如下就是 static pod:
<Pod名稱>-<Node名稱>
例如以下pod就是位於controlplane
上的static pod:
kube-apiserver-controlplane
etcd-controlplane
kube-apiserver-controlplane
取得 Static pod 設定檔位置
ps -aux | grep /kubelet
然後找尋類似以下參數
--config=/var/lib/kubelet/config.yaml
接著我們找尋上述檔案裏頭的 staticPodPath 關鍵字
cat /var/lib/kubelet/config.yaml | grep staticPodPath
沒意外可以在以下位置發現 Static pod 的各式檔案。
/etc/kubernetes/manifests
看起來像這樣
controlplane ~ ➜ ls /etc/kubernetes/manifests
etcd.yaml kube-controller-manager.yaml
kube-apiserver.yaml kube-scheduler.yaml
如何自己建立 Static pod ?
假定 Static pod 檔案儲存位置在/etc/kubernetes/manifests
。
我們這就建立一個 Yaml 放入該目錄。
kubectl run nginx --image=nginx -o yaml --dry-run=client > /etc/kubernetes/manifests/nginx.yaml
注意,如果需要刪除時,務必要刪除掉 /etc/kubernetes/manifests
的檔案,否則單純刪除 Pod 又會自動重新創建。