一、什么是Deployment对象

明明ReplicaSet已经可以控制pod的数量了,为什么还需要Deployment?
Deploymen实际上一个两层控制器,遵循一种滚动更新的方式来实升级现有的容器,这个能力的实现,依赖的就是ReplicaSet这个对象
当我们修改了Deployment对象后,Deployment控制器会使用修改后的模板,创建一个新的ReplicaSet对象,这时候有两个RelicaSet对象,
Deployment通过控制ReplicaSet对象的pod数量来达到滚动升级的效果
例如A和B,如果最终设置的pod数都是3,通过A-1,B+1这样的方式,直到A的pod数量变为0,最终 达到了滚动升级的目的。
同时,因为存在多个ReplicaSet,让回滚成为了可能

二、使用示例

示例yaml文件

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 2
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.7.9
        ports:
        - containerPort: 80

template字段,指定了创建pod的模板
replicas指定了pod的节点数量
还有一个 type: RollingUpdate,指定了滚动升级的策略

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
...
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 1

三、查看历史和回滚

查看历史版本

kubectl rollout history deployment ${name} 
deployment.extensions/demo2 
REVISION CHANGE-CAUSE
1 <none>
2 <none>
3 <none>
4 <none>

查看指定版本

kubectl rollout history deployment ${name} --revision=${version}

回滚到上一版本

kubectl rollout undo deployment  ${name}

回滚到指定版本

kubectl rollout undo deployment ${name} --to-revision=${version}

简单的说,Deployment控制ReplicaSet的多个版本,ReplicaSet控制Pod个数

版权声明:本文为chenqionghe原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/chenqionghe/p/11602950.html