k8s集群啟動了上萬個容器(一個pod里放上百個容器,起百個pod就模擬出上萬個容器)服務器超時,無法操作的解決辦法


問題說明:

一個POD里放了百個容器,然后讓K8S集群部署上百個POD,得到可運行上萬個容器的實驗目的。

實驗環境:3台DELL裸機服務器,16核+64G,硬盤容量忽略吧,上T了,肯定夠。

1.一開始運行5000多個容器的時候(也就50個POD),集群部署后,10幾分鍾就起來了,感覺還不錯。

2.增加壓力,把50個POD增加到100個POD,感覺也不會很長時間,都等到下班后又過了半個小時,還是沒有起來,集群鏈接緩慢,使用kubect里面的命令,好久都出不來信息,UI界面顯示服務器超時。

心想,完了,起不來了,把服務器撐死了。讓其晚上慢慢啟動吧,明天早上查看。

 

 

當當當,早上來上班了

打開服務器,使用SSH連接 master 節點,挺好,連接挺快,使用kubectl命令獲取pods 信息,居然報服務器錯誤了,基本都是服務器超時的錯誤。……

然后用ssh連接 node 節點,直接連不上,本地一致在轉圈圈,去機房接顯示屏連接,直接也沒有反應。

這下子壞了,難道要重新裝服務器了,鍵盤鼠標 CPU都給他分配資源了。這不壞了嘛。。

 

敲重點……還好,master節點很好,可以連接。這一點Kubernetes做的比較好(我三台服務器的配置一樣),有Master節點在就不用擔心。

 

解決方案,上網,問大神,給的方法是 用etcd ,進入集群的專用數據庫etcd,刪除其POD,然后讓服務器轉起來

又呵呵了,對與我這樣的小白,壓根都不會ETCD數據庫,K8S集群才剛搭建起來玩玩,怎么會那么高深的操作。

這下會不會被炒魷魚!!!!!!!!

 

突然想到了一個絕招 ,用Docker 呀,看看Docker 是否好用,這也是本次實驗的殺手鐧了。。下面開始着重講述了

1.連接master節點,然后輸入docker images 和docker ps  和docker ps -a 命令也就會這三個,下了一跳 ,上萬個容器僵死在那里,怪不得服務器起不來,上圖

 

 

2.先把所有的容器 stop掉 ,或者把你認為想stop掉的容器都可以停掉,看下 面我的操作

 1 docker stop $(docker ps -q -f name=k8s_hello-ros-10*) //就是停止掉前綴名字為 k8s_hello-ros-10 的容器

3.把停到的容器 刪除掉,容器太多,這一步運行的有點慢(上面的代碼和這次代碼做了一個合並)

 1 docker stop $(docker ps -q -f name=k8s_hello-ros-10*) & docker rm $(docker ps -aq -f name=k8s_hello-ros-10*) 

 

4.處理完之后,迅速回到Master節點的kubectl命令下,此時K8S集群有反應了,先把你的創建的pod時用的yaml 文件刪除,輸入命令

 1 kubuetc delete -f XXX.yaml 

5. 刪除你的部署名,因為我是創建POD時,使用Deployments 部署的,所以刪除部署,省的根據副本控制器自己又創建POD,那又陷入死循環了

 1 1. kubeclt get deployments -n namespace名字 2 2.找到命令空間,刪除 3 kubectl delete deployemtns XXX -n XXX命名空間 

6.准備關機重啟吧

先關閉NODE節點機,再關閉MASTER機器,重啟看看吧

 

順利成功,K8S集群啟動后,原先的POD已全部刪除,剩下了系統要用的POD,集群正常運轉。

一次危機就這么化解了……

 

然后又部署了5000個容器,不敢玩大了,下面圖

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM