kubernetes之十三–不停机部署应用

1. 简介

有很多应用是不能中断服务的,这需要我们在部署更新的时候不能够停服,这种方式也叫做zero downtime deployment.
这里主要介绍两种方式:

(1) Rolling updates
(2) Blue-green deployments
2. Rolling updates
(1) 新建文件,名称为web-deploy-rolling-v1.yaml,内容如下:
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: web
spec:
  replicas: 5
  selector:
    matchLabels:
      app: pets
      service: web
  template:
    metadata:
      labels:
        app: pets
        service: web
    spec:
      containers:
      - image: fundamentalsofdocker/ch08-web:1.0
        name: web
        ports:
        - containerPort: 3000
          protocol: TCP
(2) 创建部署
$ kubectl create -f web-deploy-rolling-v1.yaml
$ kubectl create -f web-service.yaml (和Kubernetes之十二web-service内容一样)
(3) 执行下面命令进行测试。
$ PORT=$(kubectl get svc/web -o yaml | grep nodePort | cut -d' ' -f5)
$ IP=$(minikube ip)
$ curl -4 ${IP}:${PORT}/
Pets Demo Application
(4) 部署web的应用2.0,文件内容只是更改了如下图红色圈的那些。

这里写图片描述

(5) 构建新的镜像文件
$ docker image build -t fundamentalsofdocker/ch13-web:2.0 web
(6) 把构建的镜像上传到Docker Hub上面。
$ docker image push fundamentalsofdocker/ch13-web:2.0
(7) 使用kubectl的set image命令设置镜像。
$ kubectl set image deployment/web \
    web=fundamentalsofdocker/ch13-web:2.0
(8) 再次进行测试,看是否更新如预期的那样。
curl -4 ${IP}:${PORT}/
Pets Demo Application v2
(9) 进行校验更新时是否中断服务,和更新时使用的模式。使用rollout status进行校验。

$ kubectl rollout status deploy/web
deployment “web” successfully rolled out
这里写图片描述
这里写图片描述

(10) 假如程序有bug的话,那么可以执行下面命令进行回退并校验。
$ kubectl rollout undo deploy/web
deployment “web”
$ curl -4 ${IP}:${PORT}/
Pets Demo Application

这里写图片描述

3. Blue-green deployment

有时不想新老版本共存的情况下,那么可以采用Blue-green deployment.

(1)Blue-green粗略的部署指导步骤
  • 部署的第一个版本作为blue,所以我们给pods标签定义为blue.
  • 在selector章节中针对标签为blue的pods部署kubernetes服务。
  • 部署web组件的第二个版本,但这次标签为green.
  • 测试green的版本效果是否符合预期。
  • 现在可以把流量慢慢的从blue版本切换到green版本。
(2)针对版本1,blue 定义Deployment对象.

这里写图片描述

(3)针对web组件定义Service 对象。

这里写图片描述

(4)然后进行部署

$ kubectl create -f web-deploy-blue.yaml
$ kubectl create -f web-svc-blue-green.yam
l

(5)在服务启动和运行后,我们进行测试是否符合预期。
$ PORT=$(kubectl get svc/web -o yaml | grep nodePort | cut -d’ ‘ -f5)
$ IP=$(minikube ip)
$ curl -4 ${IP}:${PORT}/
Pets Demo Application
(6)现在定义green 版 本的web组件。

这里写图片描述

(7)部署green版本的服务。

$ kubectl create -f web-deploy-green.yaml

(8)从下图可以看到两个版本的共存。

这里写图片描述

(9)如预期一样,有两个版本,分别为blue和green同时运行,通过以下方式进行校验。
$ curl -4 ${IP}:${PORT}/
Pets Demo Application
(10)现在针 对web组件编辑存在的服务,让流量从blue到green进行翻滚。

$ kubectl edit svc /web

(11)通过改变color标签的值,从blue到green. 然后存存储并退出编辑器。Kubernetes CLI将会自动的更新服务。

执行以下命令进行再次校验。

$ curl -4 ${IP}:${PORT}/
Pets Demo Application v2
(12)假如我们想要进行回退的话,那么可以再次编辑第(12)步的配置,把green的值改变为blue。
(13)如果green的版本测试一切如预期的话,那么执行下列命令,删除老的版本。

$ kubectl delete deploy/web-blue

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱尚维

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值