使用kubernetes的deployment進行RollingUpdate

rolling update,能夠使得服務近乎無縫地平滑升級,即在不中止對外服務的前提下完成應用的更新。nginx

replication controller與deployment的區別

replication controller

Replication Controller爲Kubernetes的一個核心內容,應用託管到Kubernetes以後,須要保證應用可以持續的運行,Replication Controller就是這個保證的key,主要的功能以下:web

  • 確保pod數量:它會確保Kubernetes中有指定數量的Pod在運行。若是少於指定數量的pod,Replication Controller會建立新的,反之則會刪除掉多餘的以保證Pod數量不變。app

  • 確保pod健康:當pod不健康,運行出錯或者沒法提供服務時,Replication Controller也會殺死不健康的pod,從新建立新的。spa

  • 彈性伸縮 :在業務高峯或者低峯期的時候,能夠經過Replication Controller動態的調整pod的數量來提升資源的利用率。同時,配置相應的監控功能(Hroizontal Pod Autoscaler),會定時自動從監控平臺獲取Replication Controller關聯pod的總體資源使用狀況,作到自動伸縮。3d

  • 滾動升級:滾動升級爲一種平滑的升級方式,經過逐步替換的策略,保證總體系統的穩定,在初始化升級的時候就能夠及時發現和解決問題,避免問題不斷擴大。code

Deployment

Deployment一樣爲Kubernetes的一個核心內容,主要職責一樣是爲了保證pod的數量和健康,90%的功能與Replication Controller徹底同樣,能夠看作新一代的Replication Controller。可是,它又具有了Replication Controller以外的新特性:blog

  • Replication Controller所有功能:Deployment繼承了上面描述的Replication Controller所有功能。繼承

  • 事件和狀態查看:能夠查看Deployment的升級詳細進度和狀態。事件

  • 回滾:當升級pod鏡像或者相關參數的時候發現問題,能夠使用回滾操做回滾到上一個穩定的版本或者指定的版本。ip

  • 版本記錄: 每一次對Deployment的操做,都能保存下來,給予後續可能的回滾使用。

  • 暫停和啓動:對於每一次升級,都可以隨時暫停和啓動。

  • 多種升級方案:Recreate:刪除全部已存在的pod,從新建立新的; RollingUpdate:滾動升級,逐步替換的策略,同時滾動升級時,支持更多的附加參數,例如設置最大不可用pod數量,最小升級間隔時間等等。

deployment的經常使用命令

  建立 Deployment

    

    

 

更新Deployment

 

擴容:

kubectl scale deployment nginx-deployment --replicas 10

若是集羣支持 horizontal pod autoscaling 的話,還能夠爲Deployment設置自動擴展:

kubectl autoscale deployment nginx-deployment --min=10 --max=15 --cpu-percent=80 

更新鏡像也比較簡單:

kubectl set image deployment/nginx-deployment nginx=nginx:1.9.1

回滾到上一個版本:

kubectl rollout undo deployment/nginx-deployment

也能夠使用 --revision參數指定某個歷史版本:

 kubectl rollout undo deployment/nginx-deployment --to-revision=2
deployment "nginx-deployment" rolled back

歷史記錄

kubectl rollout history deployment/alpine-fbgweb   

REVISION        CHANGE-CAUSE
1               kubectl apply --filename=/data/scripts/app/fbgweb.yaml --record=true
2               kubectl apply --filename=/data/scripts/app/fbgweb.yaml --record=true

建立 Deployment 的時候使用了--record參數能夠記錄命令,咱們能夠很方便的查看每次 revision 的變化。

查看單個revision 的詳細信息:

kubectl rollout history deployment alpine-fbgweb --revision=1

複製代碼
[root@master scripts]# kubectl rollout history deployment alpine-fbgweb --revision=1
deployments "alpine-fbgweb" with revision #1
Pod Template:
  Labels:       app=alpine-fbgweb
        pod-template-hash=469852024
  Annotations:  kubernetes.io/change-cause=kubectl apply --filename=/data/scripts/app/fbgweb.yaml --record=true
  Containers:
   alpine-fbgweb:
    Image:      192.168.0.153:5000/fbgweb:2017-11-13-13-49-30
    Port:       80/TCP
    Environment:        <none>
    Mounts:
      /etc/localtmie from tz-config (rw)
  Volumes:
   tz-config:
    Type:       HostPath (bare host directory volume)
    Path:       /usr/share/zoneinfo/Asia/Shanghai 

 查看歷史記錄

 擴容:

相關文章
相關標籤/搜索