RS和Deployment

Deployment

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

  定义Deployment来创建Pod和ReplicaSet

  滚动升级和回滚应用

  扩容和缩容

  暂停和继续Deployment

I、部署一个简单的Nginx应用

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 3
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.7.9
        ports:
        - containerPort: 80
kubectl apply -f deployment-nginx.yaml --record

Ⅱ、扩容

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 myapp=nginx:1.9.1

Ⅴ、回滚

kubectl rollout undo deployment/nginx-deployment

Deployment更新策略

Deployment可以保证在升级时只有一定数量的Pod是down的。默认的,它会确保至少有比期望的Pod数量少一个是up状态(最多一个不可用)

Deployment同时也可以确保只创建出超出期望数量的一定数量的Pod。默认的,它会确保最多比期望的Pod数量多一个的Pod是Up的(最多一个surge)

未来的k8s版本中,将从1-1变成25%~25%

kubectl describe deployments

Rollover(多个rollout并行)

假如您创建了一个有5个nginx:1.7.9 replica的Deployment,但是当还只有3个nginx:1.7.9的replica创建出来的时候您就开始更新含有5个nginx:1.9.1 replica的Deployment。在这种情况下,Deployment会立即杀掉已创建的3个nginx:1.7.9 的Pod,并开始创建nginx:1.9.1的Pod。它不会等到所有的5个nginx:1.7.9的Pod都创建完后才开始更新

回退Deployment

只要Deployment的rollout被触发就会创建一个revision。也就是说当且仅当Deployment的Pod template(如‘.spec.template’)被更改,例如更新template中的label和容器镜像时,就会创建出一个新的revision。其他的更新,比如扩容Deployment不会创建revision,因此我们可以很方便的手动或者自动扩容。这意味着当您回头到历史revision时,只有Deployment中的Pod template部分才会回退

kubectl rollout status deployment/nginx-deployment
kubectl rollout history deployment/nginx-deployment
kubectl rollout undo deployment/nginx-deployment --to-revision=版本       //可以使用--revision参数值指定某个历史版本
kubectl rollout pause deployment/nginx-deployment                               //暂停deployment的更新

您可以用kubectl rollout status命令查看Deployment是否完成。如果rollout成功完成,kubectl rollout status将返回一个0值的Exit Code

kubectl rollout status deployment/nginx-deployment

echo $?

清理Policy

您可以通过设置.spec.revisonHistoryLimit项来指定deployment最多保留多少revision历史记录。默认的会保留所有的revision;如果将该项设置为0,Deployment就不允许回退了。

posted @ 2019-12-09 16:46  BachrRR  阅读(334)  评论(0)    收藏  举报