rolling update,能夠使得服務近乎無縫地平滑升級,即在不中止對外服務的前提下完成應用的更新。nginx
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一樣爲Kubernetes的一個核心內容,主要職責一樣是爲了保證pod的數量和健康,90%的功能與Replication Controller徹底同樣,能夠看作新一代的Replication Controller。可是,它又具有了Replication Controller以外的新特性:blog
Replication Controller所有功能:Deployment繼承了上面描述的Replication Controller所有功能。繼承
事件和狀態查看:能夠查看Deployment的升級詳細進度和狀態。事件
回滾:當升級pod鏡像或者相關參數的時候發現問題,能夠使用回滾操做回滾到上一個穩定的版本或者指定的版本。ip
版本記錄: 每一次對Deployment的操做,都能保存下來,給予後續可能的回滾使用。
暫停和啓動:對於每一次升級,都可以隨時暫停和啓動。
多種升級方案:Recreate:刪除全部已存在的pod,從新建立新的; RollingUpdate:滾動升級,逐步替換的策略,同時滾動升級時,支持更多的附加參數,例如設置最大不可用pod數量,最小升級間隔時間等等。
建立 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
查看歷史記錄
擴容: