問題說明:node
一個POD裏放了百個容器,而後讓K8S集羣部署上百個POD,獲得可運行上萬個容器的實驗目的。docker
實驗環境:3臺DELL裸機服務器,16核+64G,硬盤容量忽略吧,上T了,確定夠。數據庫
1.一開始運行5000多個容器的時候(也就50個POD),集羣部署後,10幾分鐘就起來了,感受還不錯。服務器
2.增長壓力,把50個POD增長到100個POD,感受也不會很長時間,都等到下班後又過了半個小時,仍是沒有起來,集羣連接緩慢,使用kubect裏面的命令,很久都出不來信息,UI界面顯示服務器超時。ssh
心想,完了,起不來了,把服務器撐死了。讓其晚上慢慢啓動吧,明天早上查看。spa
噹噹噹,早上來上班了資源
打開服務器,使用SSH鏈接 master 節點,挺好,鏈接挺快,使用kubectl命令獲取pods 信息,竟然報服務器錯誤了,基本都是服務器超時的錯誤。……部署
而後用ssh鏈接 node 節點,直接連不上,本地一致在轉圈圈,去機房接顯示屏鏈接,直接也沒有反應。get
這下子壞了,難道要從新裝服務器了,鍵盤鼠標 CPU都給他分配資源了。這不壞了嘛。。ast
敲重點……還好,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個容器,不敢玩大了,下面圖