k8s的master節(jié)點(diǎn)上會(huì)有kube-controler-manager這個(gè)組件,顧名思義熊户,這個(gè)組件就是用來管理所有的controler的。
控制器模式的思想就是用一個(gè)對象來管理另外一個(gè)對象。
可以通過如下方式查看所有的controler:
$ cd kubernetes/pkg/controller/
$ ls -d */? ? ? ? ? ? ?
今天要講的deployment就是最常見的一種controler躯护。
注意:deployment控制器管理的是ReplicaSet,而不是pod丽涩。
ReplicaSet:?
ReplicaSet是K8S中特別重要的一個(gè)api對象。 Deployment中ReplicaSet和pod的關(guān)系如下:?
ReplicaSet通過“控制器模式”保證當(dāng)前的pod的個(gè)數(shù)永遠(yuǎn)等于配置文件中配置的個(gè)數(shù)毡鉴。?
Deployment通過“控制器模式”來控制ReplicaSet的數(shù)量和屬性秒赤,從而達(dá)到了ReplicaSet的水平擴(kuò)展/收縮 和 滾動(dòng)更新的功能。 舉例: Deployment要實(shí)現(xiàn)水平擴(kuò)展功能憎瘸,Deployment Controler只需要修改他控制的ReplicaSet的數(shù)量就可以了入篮。 也可以通過指令($ kubectl scale deployment nginx-deployment --replicas=4)來實(shí)現(xiàn)。?
Deployment實(shí)現(xiàn)滾動(dòng)更新的原理是幌甘,創(chuàng)建一個(gè)新的ReplicaSet潮售,然后滾動(dòng)的在這個(gè)新的RepicaSet中創(chuàng)建新的pod,同時(shí)移除舊的ReplicaSet中的pod含潘,還可以通過RollingUpdateStrategy策略來配置滾動(dòng)更新過程中饲做,最大不可用的pod個(gè)數(shù)等屬性。?
如上圖所示遏弱,Deployment真正控制的是ReplicaSet的數(shù)量和屬性盆均,這樣Deployment對應(yīng)的多個(gè)ReplicaSet其實(shí)就是對應(yīng)的應(yīng)用的過個(gè)版本。 應(yīng)用版本和 ReplicaSet是 一一對應(yīng)的漱逸。?
Deployment Controler還會(huì)保證在任何時(shí)間泪姨,只要有pod出現(xiàn)了問題,它會(huì)自動(dòng)創(chuàng)建出來一個(gè)新的pod饰抒。?