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
查看历史记录
扩容: