簡體   English   中英

如何停止Kubernetes控制飛機吊艙?

[英]How can I stop Kubernetes control plane pods?

只是好奇,我已經習慣於使用mesos來使systemctl stop mesos-mastersystemctl start mesos-master (如果我出於某些原因需要將其退回)。 使用k8,在控制平面中有多個要“停止”的組件,例如apiserver,控制器-管理器等。

使用kubeadm創建集群時,它會以Pod的形式運行控制平面(沒有副本集或類似的內容,也許是因為目前我只有一個主服務器)。

在控制平面中停下來然后重新啟動它們而不破壞群集的最佳方法是什么?

Kubernetes集群本身分為微服務,這意味着每個組件應該彼此獨立,如果其中一個組件發生故障,則不應影響其他組件,以避免可怕的級聯效應。

讓我們從Linux Kernel開始。 它可以確保Systemd正常運行。 現在, Kubeadm確保Kubelet(在主節點中)作為systemd service運行。 您可以通過以下命令進行檢查

systemctl status kubelet

Kubelet(在主節點中)確保由docker引擎作為Pod運行的etcd,kube-apiserver,kube-controller-manager和kube-scheduler的控制平面組件是系統化服務。主機套接字在清單文件中。 您可以使用systemctljournalctl檢查它們的狀態。

 systemctl status kube-apiserver

在Worker節點中的Pod,請通過CNI插件使用Pod Network。

現在,K8s集群處於活動狀態,並且Kube-apiServer和其他組件正常運行。 您可以提供所有其他k8s資源,例如Deployment,copySet,service等,並將被部署到工作節點。 它會根據您的期望進行工作,而這將是etcd中的理想狀態

一旦部署的資源(pod,service等)在工作節點中運行,主節點的職責就是確保所需狀態=== current State

如果主節點已死,則工作節點將為孤立節點,這意味着您的當前狀態為最終狀態。

回答你的問題

您可以在“主”節點中啟動每個組件,但要記住它們的依賴性。

例子

如果Kube api-server失敗,則其他組件(kube-scheduler,kube-controller-manager)將無法與etcd對話(真相的來源)。

Kube-Controller-manager進一步划分為控制器,例如copysetSet控制器,Deployment Controller,Service Controller等等。他們關注自己的業務,並確保所需狀態===當前狀態。 有趣的是,如果Kube-controller-manager中的一個控制器發生故障,它將停止所有控制器並自行終止。 現在,Kubelet將其制作成agian。

總之,我們需要確保我們的主節點沒有任何單點故障,這就是為什么我們一直希望擁有高度可用的控制平面。

Kubernetes控制平面吊艙通常被部署為靜態吊艙 這些文件不受任何類型的Deployment Controller的管理,而是在放置在配置目錄(例如/etc/kubelet.d//etc/kubernetes/manifests )中的靜態(因此稱為名稱)配置文件中定義的有關如何設置群集的信息)。 這些定義文件由在創建相應容器的Kubernetes主節點上運行的Kubelet拾取。

根據文檔,您可以簡單地通過刪除相應的配置文件來停止/刪除靜態容器,並通過創建新文件來再次啟動/創建它們:

運行kubelet會定期掃描配置的目錄(在我們的示例中為/etc/kubelet.d )以查找更改,並隨着文件在此目錄中出現/消失而添加/刪除pod。

 [joe@my-node1 ~] $ mv /etc/kubelet.d/static-web.yaml /tmp [joe@my-node1 ~] $ sleep 20 [joe@my-node1 ~] $ docker ps // no nginx container is running [joe@my-node1 ~] $ mv /tmp/static-web.yaml /etc/kubelet.d/ [joe@my-node1 ~] $ sleep 20 [joe@my-node1 ~] $ docker ps CONTAINER ID IMAGE COMMAND CREATED ... e7a62e3427f1 nginx:latest "nginx -g 'daemon of 27 seconds ago 

要臨時禁用/啟用這些窗格,只需將定義文件移至安全位置並再次返回:

$ mv /etc/kubelet.d/*.yaml /tmp   # Disable static pods
$ mv /tmp/*.yaml /etc/kubelet.d   # Re-enable static pods

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM