k8s deployment

k8s的deployment是最常用的workload,也是基礎(chǔ)設(shè)施擴縮容基礎(chǔ)。deployment的作用:

  • 發(fā)布應(yīng)用
  • 升級應(yīng)用
  • 回退應(yīng)用
  • 擴縮容

deployment的yaml

deployment.yaml

從上到下四個圈依次是:

  • deployment元信息
  • 選擇器信息
  • replicate信息
  • pod模板信息

deployment的結(jié)構(gòu)

deployment

deployment創(chuàng)建出replicate,然后由replicate負(fù)責(zé)pod的創(chuàng)建。

使用命令實驗一下

kubectl apply -f deployment.yaml

kubectl get deployments


deploy,ent

kubectl get rs


rs

kubectl get pods
pods

從名字上可以很清楚的看到ref關(guān)系,rs的名字是deployment的名字+rs編號,pod的名字是rs的名字+pod的Hash。

pod升級

可以有兩種方法,一種是將yaml中的容器版本修改一下,重新apply一次,另外一種顯示的進(jìn)行修改,這里我們看一看顯示的進(jìn)行修改
···
set image deployment nginx-deploy nginx-deployment=nginx:1.8
···
升級完成后kubectl get pods,


pods

可以看到ReplicaSet的編號和pods的編號都改變了,說明發(fā)生了一些事情
kubectl get rs


rs

可以看到rs,其中編號尾號77的rs是正在運行中的,那這個過程發(fā)生了什么呢?
升級

如圖升級的過程,是創(chuàng)建出新的rs,舊的rs上的pod逐個刪除掉,rscontroller在新的rs上創(chuàng)建出新的pod。

擴容

···
kubectl edit deployment nigix-deploy
···
修改replica為3,然后使用kubectl get pods查看


pods

可以看到原有的兩個pod沒有變化,并且在同樣一個rs上新增了一個pod


scale

擴容的示意圖如上

回滾

此時我們先查看一下歷史

kubectl rollout history deployment nginx-deploy
history

一共有兩次歷史,一次是首次,第二次是升級,然后就是當(dāng)前的擴容了。

kubectl rollout undo deployment nginx-deploy

可以看到會回退到老的rs上

為什么會這么工作

主要是k8s控制器的工作原理,控制器會執(zhí)著的循環(huán),直到當(dāng)前狀態(tài)達(dá)到期望狀態(tài),這里有兩個控制器,一個deployment控制器,一個rs控制器


deployment controller
  • 我們看到如果是擴縮容,就會創(chuàng)刪rs
  • 否則,僅僅更新rs


    rs controller
  • 如果接到的是創(chuàng)刪rs,則會調(diào)api進(jìn)行創(chuàng)建刪除pod
  • 如果僅僅是對rs更新,則會調(diào)api對pod進(jìn)行更新

小結(jié)

通過原理可以看到,rs是維系多版本的關(guān)鍵,而rs的數(shù)量是進(jìn)行擴縮容的關(guān)鍵,這樣一個設(shè)計是比較巧妙而且強大的。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容