1. 程式人生 > >k8s叢集啟動了上萬個容器(一個pod裡放上百個容器,起百個pod就模擬出上萬個容器)伺服器超時,無法操作的解決辦法

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個容器,不敢玩大了,下面圖