【Kubernetes】应用的部署(二):蓝绿部署 & 滚动部署

Deployment 控制器》系列,共包含以下几篇文章:

😊 如果您觉得这篇文章有用 ✔️ 的话,请给博主一个一键三连 🚀🚀🚀 吧 (点赞 🧡、关注 💛、收藏 💚)!!!您的支持 💖💖💖 将激励 🔥 博主输出更多优质内容!!!

应用的部署(二):蓝绿部署 & 滚动部署

1.蓝绿部署

蓝绿部署:同时部署旧版本和新版本(旧版本 被叫作 蓝色版本新版本 被叫作 绿色版本);在绿色版本中对应用进行测试,待测试完全通过后,将应用从蓝色版本路由到绿色版本,然后将绿色版本变成新的生产环境。

🚀 蓝绿部署可以在线进行,具有较小的风险,但是会对用户的体验有影响。另外,蓝绿部署由于同时部署了新旧两套版本,所以需要双倍的资源。

创建 blue-green-demo-v1.yaml 文件,并在其中输入以下内容。

apiVersion: v1
kind: Service
metadata:
  name: blue-green-demo
  labels:
    app: blue-green-demo
spec:
  type: NodePort
  ports:
  - name: http
    port: 80
    targetPort: http
  selector:
    app: blue-green-demo
    version: v1.0.0
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: blue-green-demo-v1
  labels:
    app: blue-green-demo
spec:
  replicas: 3
  selector:
    matchLabels:
      app: blue-green-demo
      version: v1.0.0
  template:
    metadata:
      labels:
        app: blue-green-demo
        version: v1.0.0
    spec:
      containers:
      - name: blue-green-demo
        image: collenzhao/k8s-deployment-strategies
        ports:
        - name: http
          containerPort: 8080
        env:
        - name: VERSION
          value: v1.0.0

部署应用的 v1.0.0 版本。

kubectl apply -f blue-green-demo-v1.yaml

查看创建的 Pod。

kubectl get pod

在这里插入图片描述

查看创建的 Service(服务)。

kubectl get service

输出的信息如下:

在这里插入图片描述

执行以下脚本请求应用。

for a in {1..3}
  do
    sleep 1;
    curl "10.108.180.158:80";
  done

这时所有的请求将访问 v1.0.0 版本,输出的信息如下:

在这里插入图片描述

创建 blue-green-demo-v2.yaml 文件,并在其中输入以下内容。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: blue-green-demo-v2
  labels:
    app: blue-green-demo
spec:
  replicas: 3
  selector:
    matchLabels:
      app: blue-green-demo
      version: v2.0.0
  template:
    metadata:
      labels:
        app: blue-green-demo
        version: v2.0.0
    spec:
      containers:
      - name: blue-green-demo
        image: collenzhao/k8s-deployment-strategies
        ports:
        - name: http
          containerPort: 8080
        env:
        - name: VERSION
          value: v2.0.0

将应用升级到 v2.0.0 版本。

kubectl apply -f blue-green-demo-v2.yaml

查看 Pod 的信息。

kubectl get pod

输出的信息如下:

在这里插入图片描述

🚀 这里可以看到前 3 3 3 个 Pod 是 v1.0.0 版本,而后 3 3 3 个 Pod 是 v2.0.0 版本。

将 Service(服务)全部切换到 v2.0.0 版本。

kubectl patch service blue-green-demo \
-p '{"spec": {"selector": {"version":"v2.0.0"}}}'

重新执行以下脚本请求应用。

for a in {1..3}
  do
    sleep 1;
    curl "10.1.88.3:80";
  done

这时所有的请求将访问 v2.0.0 版本,输出的信息如下:

在这里插入图片描述

删除应用的 v1.0.0 版本。

kubectl delete deploy blue-green-demo-v1

在这里插入图片描述

2.滚动部署

滚动部署:先将新版本部署到集群中的一台或几台服务器上,在更新版本后将这些服务器重新投入使用;循环这个过程,直到集群中的所有服务器都更新成新版本。

相对于蓝绿部署,这种部署方式更加节约资源。下面来演示如何实现应用的滚动部署升级。

创建 rolling-update-demo-v1.yaml 文件,并在其中输入以下内容。

apiVersion: v1
kind: Service
metadata:
  name: rolling-update-demo
  labels:
    app: rolling-update-demo
spec:
  type: NodePort
  ports:
  - name: http
    port: 80
    targetPort: http
  selector:
    app: rolling-update-demo
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: rolling-update-demo
  labels:
    app: rolling-update-demo
spec:
  replicas: 3
  selector:
    matchLabels:
      app: rolling-update-demo
  template:
    metadata:
      labels:
        app: rolling-update-demo
        version: v1.0.0
    spec:
      containers:
      - name: rolling-update-demo
        image: collenzhao/k8s-deployment-strategies
        ports:
        - name: http
          containerPort: 8080
        env:
        - name: VERSION
          value: v1.0.0

部署应用的 v1.0.0 版本。

kubectl apply -f rolling-update-demo-v1.yaml

使用 watch 命令监控 Pod 的变化.

kubectl get --watch pod

在这里插入图片描述

创建 rolling-update-demo-v2.yaml 文件,并在其中输入以下内容。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: rolling-update-demo
  labels:
    app: rolling-update-demo
spec:
  replicas: 3
  selector:
    matchLabels:
      app: rolling-update-demo
  template:
    metadata:
      labels:
        app: rolling-update-demo
        version: v2.0.0
    spec:
      containers:
      - name: rolling-update-demo
        image: collenzhao/k8s-deployment-strategies
        ports:
        - name: http
          containerPort: 8080
        env:
        - name: VERSION
          value: v2.0.0

将应用升级到 v2.0.0 版本。

kubectl apply -f rolling-update-demo-v2.yaml

这时会发现 v1.0.0 版本的 Pod 正在逐步被替换成 v2.0.0 版本的 Pod。

在这里插入图片描述

  • 17
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

G皮T

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

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

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

打赏作者

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

抵扣说明:

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

余额充值