Kubernetes Deployment

滚动发布

滚动发布 Rolling Update: 高级发布策略,按批次一次替换老版本,逐步升级到新版本。发布过程中,应用不中断,用户体验平滑。如下图所示,每批次可以发布一个实例,或者多个实例,验证没有问题,可以继续发布多个实例。

在这里插入图片描述

蓝绿发布

蓝绿发布可以配合金丝雀发布,先发一个或者少量实例,验证流量,验证通过之后,可以蓝绿切换,完成升级。
在这里插入图片描述

K8S Deployment原理

在这里插入图片描述
ReplicaSet是对pod的包装,Deployment是对replicaset和滚动发布的流程一起包装起来,实现了自动化。

通过Deployment调度实现滚动发布的图例。在这里插入图片描述

  1. 绿色应用老版本v1.0.0对应的replicaset是v1.0.0,然后通过deployment发布应用的v1.0.1蓝色版本。
  2. 发布之后,会创建一个新的replicaset v1.0.1. 之后deployment 会一次滚动。不管的创建和拉入新的POD并拉出和关闭绿色的POD。在过程中,deployment会保证始终有POD保持可用状态。
  3. 前置的Service会屏蔽POD地址的变化,让用户对发布过程无感知。
  4. 如果在发布过程中,蓝色POD有问题,健康检查通不过,deployment会自动终止,并回退发布。
  5. 即使发布成功,工程师也可以通过deployment回退版本。

Deployment发布规范样例

官方样例:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.20/#deployment-v1-apps

v1.0.0

本实验,我们需要创建文件有:

  • petclinic-deployment.yml
  • petclinic-service.yml

参考之前的样例文章,修改petclinic的发布文件。

petclinic-deployment.yml内容如下:

apiVersion: apps/v1
kind: Deployment
metadata:
  # Unique key of the Deployment instance
  name: petclinic
spec:
  # 3 Pods should exist at all times.
  replicas: 3
  selector:
    matchLabels:
      app: petclinic
  # 下面minReadySeconds不需要加,只为实验效果。10秒,表示POD起来之后,等10秒才算就绪。增加时延,查看滚动发布效果。
  minReadySeconds: 10
  template:
    metadata:
      labels:
        # Apply this label to pods and default
        # the Deployment label selector to this value
        app: petclinic
    spec:
      containers:
      - name: petclinic
        # Run this image
        image: spring2go/spring-petclinic:1.0.0.RELEASE

petclinic-service.yml内容如下:

apiVersion: v1
kind: Service
metadata:
  # Unique key of the Service instance
  name: petclinic
spec:
  ports:
    # Accept traffic sent to port 80
    - name: http
      # port为集群内部服务前通信的端口
      port: 8080
      targetPort: 8080
      nodePort: 31080
  selector:
    # 下面标签app: petclinic表示本服务会路由指向所有app标签为petclinic的pod。
    app: petclinic
  type: NodePort

kubectl apply -f . #发布当前目录的两个文件
kubectl get all #查看POD发布情况

浏览器校验,访问localhost:31080

下面做滚动发布。

v1.0.1

petclinic-deployment.yml内容如下:注意镜像文件已升级。

apiVersion: apps/v1
kind: Deployment
metadata:
  # Unique key of the Deployment instance
  name: petclinic
spec:
  # 3 Pods should exist at all times.
  replicas: 3
  selector:
    matchLabels:
      app: petclinic
  # 下面minReadySeconds不需要加,只为实验效果。10秒,表示POD起来之后,等10秒才算就绪。增加时延,查看滚动发布效果。
  minReadySeconds: 10
  template:
    metadata:
      labels:
        # Apply this label to pods and default
        # the Deployment label selector to this value
        app: petclinic
    spec:
      containers:
      - name: petclinic
        # Run this image
        image: spring2go/spring-petclinic:1.0.1.RELEASE

petclinic-service.yml内容如下:内容不变

apiVersion: v1
kind: Service
metadata:
  # Unique key of the Service instance
  name: petclinic
spec:
  ports:
    # Accept traffic sent to port 80
    - name: http
      # port为集群内部服务前通信的端口
      port: 8080
      targetPort: 8080
      nodePort: 31080
  selector:
    # 下面标签app: petclinic表示本服务会路由指向所有app标签为petclinic的pod。
    app: petclinic
  type: NodePort

kubectl apply -f . #发布当前目录的两个文件
kubectl get all #查看POD发布情况,重复命令,观察变化

会发现俩那个replicaset。
滚动发布结束后,老的replicaset会显示desired pod数为0,current pod数为0.

浏览器校验,访问localhost:31080

查看发布历史

kubectl rollout history deployment/petclinic

快速回滚

#回退到上一个版本:
kubectl rollout undo deployment/petclinic
#查看滚动回退状态,也可以用来查看滚动发布状态
kubectl rollout status deployment/petclinic
#查看发布历史
kubectl rollout history deployment/petclinic
#刷新浏览器,校验回滚结果。

回滚指定版本

kubectl rollout undo deployment/petclinic --to-revision=2
kubectl rollout history deployment/petclinic

#刷新浏览器,校验回滚结果。

环境清理

#deploy为deployment缩写
kubectl delete deploy petclinic
#发现replicaset, pods都会被删除掉。
kubectl get all
kubectl delete svc petclinic
#环境清理完毕

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值