1,Deployment介绍

Deployment为Pod和RS提供了一个声明式定义(declarative)方法,用来替代以前的RC来方便的管理应用。典型的应用场景包括:

  • RC全部功能:Deployment继承了上面描述的Replication Controller全部功能。
  • 事件和状态查看:可以查看Deployment的升级详细进度和状态。
  • 回滚:当升级pod镜像或者相关参数的时候发现问题,可以使用回滚操作回滚到上一个稳定的版本或者指定的版本。
  • 版本记录: 每一次对Deployment的操作,都能保存下来,给予后续可能的回滚使用。
  • 暂停和启动:对于每一次升级,都能够随时暂停和启动。
  • 多种升级方案:Recreate:删除所有已存在的pod,重新创建新的; RollingUpdate:滚动升级,逐步替换的策略,同时滚动升级时,支持更多的附加参数,例如设置最大不可用pod数量,最小升级间隔时间等等。

2,示例

定义一个简单的nginx应用

  1. apiVersion: extensions/v1beta1
  2. kind: Deployment
  3. metadata:
  4. name: nginx-deployment
  5. spec:
  6. replicas: 3
  7. template:
  8. metadata:
  9. labels:
  10. app: nginx
  11. spec:
  12. containers:
  13. - name: nginx
  14. image: nginx:1.7.9
  15. ports:
  16. - containerPort: 80

注意:必须在Deployment中的selector指定正确pod template label(在该示例中是 app = nginx),不要跟其他的controller搞混了(包括Deployment、Replica Set、Replication Controller等)

  1. # 可以看到Deployment已经创建了3个replica
  2. $ kubectl get deployments
  3. NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
  4. nginx-deployment 3 3 3 3 18s
  5. # 执行kubectl get rs和kubectl get pods会显示RS和Pod已创建
  6. $ kubectl get rs
  7. NAME DESIRED CURRENT READY AGE
  8. nginx-deployment-2035384211 3 3 0 18s
  9. # 刚创建的RS将保证总是有3个nginx的pod存在
  10. $ kubectl get pods --show-labels
  11. NAME READY STATUS RESTARTS AGE LABELS
  12. nginx-deployment-2035384211-7ci7o 1/1 Running 0 18s app=nginx,pod-template-hash=2035384211
  13. nginx-deployment-2035384211-kzszj 1/1 Running 0 18s app=nginx,pod-template-hash=2035384211
  14. nginx-deployment-2035384211-qqcnn 1/1 Running 0 18s app=nginx,pod-template-hash=2035384211

注意:Replica Set的名字总是-

3, 常用操作命令

  1. # 扩容,会自动扩充至10个pod
  2. kubectl scale deployment nginx-deployment --replicas 10
  3. # 如果集群支持 horizontal pod autoscaling 的话,还可以为Deployment设置自动扩展
  4. kubectl autoscale deployment nginx-deployment --min=10 --max=15 --cpu-percent=80
  5. # 更新镜像
  6. kubectl set image deployment/nginx-deployment nginx=nginx:1.9.1
  7. # 回滚
  8. kubectl rollout undo deployment/nginx-deployment
  9. # 查看回滚进度
  10. kubectl rollout status deployment/nginx-deployment
  11. # 暂停更新Deployment
  12. kubectl rollout pause deployment/nginx-deployment
  13. # 恢复更新Deployment
  14. kubectl rollout resume deploy nginx