k8s學習筆記

九.deployment:聲明式的升級應用

9.1.使用RC實現滾動升級

#kubectl rolling-update kubia-v1 kubia-v2 --image=luksa/kubia:v2

  使用kubia-v2版本應用來替換運行着kubia-v1的RC,將新的複製控制器命名爲kubia-v2,並使用luksa/kubia:v2最爲鏡像。

  升級完成後使kubectl describe rc kubia-v2查看升級後的狀態。
  爲什麼現在不再使用rolling-update?
  1.直接更新pod和RC的標籤並不是一個很的方案;
  2.kubectl只是執行升級中的客戶端,但如果執行kubectl過程中是去了網絡連接,升級將會被中斷,pod和RC將會處於一箇中間的狀態,所以纔有了Deployment資源的引入。
 

9.2.使用Deployment聲明式的升級應用

  Rs替代Rc來複制個管理pod。
  創建Deployment前確保刪除所有的RC和pod,但是暫時保留Service,
  kubectl delete rc --all
  創建Deployment
#kubectl create -f kubectl.depl-v1.yaml --record  //--record可以記錄歷史版本

#查看Deployment的相關信息
#kubectl get deployment
#kubectl describe deployment

#查看部署狀態:
#kubectl rollout status deployment kubia

  

9.3.觸發deployment升級

#kubectl edit deployment kubia //修改完後資源對象會被更新
#kubectl patch deployment kubia -p '{...}' //只能包含想要更新的字段
#kubectl apply -f kubia-deploy-v2.yml //如果yml中定義的資源不存在,會自動被創建
#kubectl replace -f kubia-deploy-v2.yml //如果yml中定義的資源不存在,則會報錯
  修改configmap並不會觸發升級,如果想要觸發,可以創建新的configmap並修改pod模板引用新的configmap。
 

9.4.回滾deployment

  在上述升級deployment過程中可以使用如下命令來觀察升級的過程
#kubectl rollout status deployment kubia
  如果出現報錯,如何進行停止?可以使用如下命令進行回滾到先前部署的版本
#kubectl rollout undo deployment kubia
  如何顯示deployment的歷史版本?
#kubectl rollout history deployment kubia
  如何回滾到特定的版本?
#kubectl rollout undo deployment kubia --to-revision=1

  

9.5.控制滾動升級的速率

  在deployment的滾動升級過程中,有兩個屬性決定一次替換多少個pod:maxSurge、maxUnavailable,可以通過strategy字段下的rollingUpdate的屬性來配置,
  maxSurge:決定期望的副本數,默認值爲25%,如果副本數設置爲4個,則在滾動升級過程中,不會運行超過5個pod。
  maxUnavaliable: 決定允許多少個pod處於不可用狀態,默認值爲25%,如果副本數爲4,那麼只能有一個pod處於不可用狀態,
       默認情況下如果10分鐘內沒有升級完成,將被視爲失敗,如果要修改這個參數可以使用kubectl describe deploy kubia 查看到一條ProgressDeadline-Exceeded的記錄,可以修改此項參數修改判斷時間。
 

十:Statefulset:部署有狀態的多副本應用

10.1.什麼是Statefulset

  StatefulSet是Kubernetes提供的管理有狀態應用的負載管理控制器API
       特點:
  1.具有固定的網絡標記(主機名)
  2.具有持久化存儲
  3.需要按順序部署和擴展
  4.需要按順序終止和刪除
  5.需要按順序滾動和更新

10.2.statefulset的創建

  statefulset的創建順序從0到N-1,終止順序則相反,如果需要對satateful擴容,則之前的n個pod必須存在,如果要終止一個pod,則他的後續pod必須全部終止。

       創建statefulset

#kubectl create -f ss-nginx.yml

  查看statefulset

#kubectl get statefulset

  

  statefulset會使用一個完全一致的pod來替換被刪除的pod。

  statefulset擴容和縮容時,都會刪除最高索引的pod,當這個pod完全被刪除後,纔回刪除擁有次高索引的pod。

10.3.statefulset中發現夥伴的節點

  通過DNS中SRV互相發現。

10.4.更新statefulset

#kuebctl edit statefulset kubia

  但修改後pod不會自動 被更新,需要手動delete pod後會重新調度更新。

10.5.statefulset如何處理節點失效

 
 
 
 
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章