天天看點

k8s叢集-容器更新擴容縮減

兩種方法

一,第一種還是圖形界面,簡單一些

1,打開k8s 的dashboard 管理平台

2,找到相對應的命名空間-->部署-->找到你的項目-->伸縮

3,填寫容器的數量

二,指令模式操作

rolling-update

rolling-update是一個非常重要的指令,對于已經部署并且正在運作的業務,rolling-update提供了不中斷業務的更新方式。rolling-update每次起一個新的pod,等新pod完全起來後删除一個舊的pod,然後再起一個新的pod替換舊的pod,直到替換掉所有的pod。

rolling-update需要確定新的版本有不同的name,Version和label,否則會報錯 。

kubectl rolling-update rc-nginx-2 -f rc-nginx.yaml

如果在更新過程中,發現有問題還可以中途停止update,并復原到前面版本

kubectl rolling-update rc-nginx-2 --rollback

rolling-update還有很多其他選項提供豐富的功能,如—update-period指定間隔周期,使用時可以使用-h檢視help資訊

scale

scale用于程式在負載加重或縮小時副本進行擴容或縮小,如前面建立的nginx有兩個副本,可以輕松的使用scale指令對副本數進行擴充或縮小。

擴充副本數到4:

kubectl scale rc rc-nginx-3 --replicas=4

重新縮減副本數到2:

kubectl scale rc rc-nginx-3 --replicas=2

autoscale

scale雖然能夠很友善的對副本數進行擴充或縮小,但是仍然需要人工介入,不能實時自動的根據系統負載對副本數進行擴、縮。autoscale指令提供了自動根據pod負載對其副本進行擴縮的功能。

autoscale指令會給一個rc指定一個副本數的範圍,在實際運作中根據pod中運作的程式的負載自動在指定的範圍内對pod進行擴容或縮容。如前面建立的nginx,可以用如下指令指定副本範圍在1~4

kubectl autoscale rc rc-nginx-3 —min=1 —max=4

attach

attach指令類似于docker的attach指令,可以直接檢視容器中以daemon形式運作的程序的輸出,效果類似于logs -f,退出檢視使用ctrl-c。如果一個pod中有多個容器,要檢視具體的某個容器的的輸出,需要在pod名後使用-c containers name指定運作的容器。如下示例的指令為檢視kube-system namespace中的kube-dns-v9-rcfuk pod中的skydns容器的輸出。

kubectl attach kube-dns-v9-rcfuk -c skydns —namespace=kube-system

exec

exec指令同樣類似于docker的exec指令,為在一個已經運作的容器中執行一條shell指令,如果一個pod容器中,有多個容器,需要使用-c選項指定容器。

run

類似于docker的run指令,直接運作一個image。

cordon, drain, uncordon 

這三個指令是正式release的1.2新加入的指令,三個指令一起介紹,是因為三個指令配合使用可以實作節點的維護。在1.2之前,因為沒有相應的指令支援,如果要維護一個節點,隻能stop該節點上的kubelet将該節點退出叢集,是叢集不在将新的pod排程到該節點上。如果該節點上本生就沒有pod在運作,則不會對業務有任何影響。如果該節點上有pod正在運作,kubelet停止後,master會發現該節點不可達,而将該節點标記為notReady狀态,不會将新的節點排程到該節點上。同時,會在其他節點上建立新的pod替換該節點上的pod。這種方式雖然能夠保證叢集的健壯性,但是任然有些暴力,如果業務隻有一個副本,而且該副本正好運作在被維護節點上的話,可能仍然會造成業務的短暫中斷。

1.2中新加入的這3個指令可以保證維護節點時,平滑的将被維護節點上的業務遷移到其他節點上,保證業務不受影響。如下圖所示是一個整個的節點維護的流程(為了友善demo增加了一些檢視節點資訊的操作):1)首先檢視目前叢集所有節點狀态,可以看到共四個節點都處于ready狀态;2)檢視目前nginx兩個副本分别運作在d-node1和k-node2兩個節點上;3)使用cordon指令将d-node1标記為不可排程;4)再使用kubectl get nodes檢視節點狀态,發現d-node1雖然還處于Ready狀态,但是同時還被禁能了排程,這意味着新的pod将不會被排程到d-node1上。4)再檢視nginx狀态,沒有任何變化,兩個副本仍運作在d-node1和k-node2上;5)執行drain指令,将運作在d-node1上運作的pod平滑的趕到其他節點上;6)再檢視nginx的狀态發現,d-node1上的副本已經被遷移到k-node1上;這時候就可以對d-node1進行一些節點維護的操作,如更新核心,更新Docker等;7)節點維護完後,使用uncordon指令解鎖d-node1,使其重新變得可排程;8)檢查節點狀态,發現d-node1重新變回Ready狀态