Kruise Rollout v0.3.0:手把手教你实战操作Deployment 分批发布和流量灰度

2023-05-16

helm3

安装

kubectl版本:v1.20.9
在这里插入图片描述
heml版本:v3.1.2
在这里插入图片描述

[root@k8smaster peishunwu]
wget https://get.helm.sh/helm-v3.1.2-linux-amd64.tar.gz
tar zxvf helm-v3.1.2-linux-amd64.tar.gz
cd linux-amd64
cp helm /usr/bin/helm
helm version
version.BuildInfo{Version:"v3.1.2", GitCommit:"d878d4d45863e42fd5cff6743294a11d28a9abce", GitTreeState:"clean", GoVersion:"go1.13.8"}
[root@192 demo]# helm help
The Kubernetes package manager

Common actions for Helm:

- helm search:    search for charts
- helm pull:      download a chart to your local directory to view
- helm install:   upload the chart to Kubernetes
- helm list:      list releases of charts

helm3不在需要tiller,可以设置环境变量KUBECONFIG来指定存有ApiServre的地址与token的配置文件地址,默认为~/.kube/config

查看helm配置信息

[root@k8smaster linux-amd64]# helm env
HELM_BIN="helm"
HELM_DEBUG="false"
HELM_KUBECONTEXT=""
HELM_NAMESPACE="default"
HELM_PLUGINS="/root/.local/share/helm/plugins"
HELM_REGISTRY_CONFIG="/root/.config/helm/registry.json"
HELM_REPOSITORY_CACHE="/root/.cache/helm/repository"
HELM_REPOSITORY_CONFIG="/root/.config/helm/repositories.yaml"

添加共有的仓库

helm repo add stable http://mirror.azure.cn/kubernetes/charts
helm repo add aliyun https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts 
helm repo update

指定k8s集群的位置

这一步非常关键,它是helm与k8s通讯的保证,这一步就是把k8s环境变量KUBECONFIG进行配置
export KUBECONFIG=/root/.kube/config #可以写到/etc/profile里

Kruise-Rollout安装并使用

安装Kruise-Rollout

Kruise Rollout 可以通过 helm v3.1+ 进行简单安装,这是一个简单的命令行工具,您可以从这里获取。
安装 Kubernetes 集群,需要Kubernetes 版本 >= 1.19。

# Firstly add openkruise charts repository if you haven't do this.
$ helm repo add openkruise https://openkruise.github.io/charts/

# [Optional]
$ helm repo update
$ helm install kruise-rollout openkruise/kruise-rollout --version 0.3.0

# 卸载
$ helm uninstall kruise-rollout
release "kruise-rollout" uninstalled

Kruise-Rollout玩转第一步

kubectl create namespace test #创建一个名叫test的命名空间
部署一个nginx,副本调整为3

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
  namespace: test
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
        - name: nginx
          image: nginx:latest
          imagePullPolicy: IfNotPresent
          ports:
            - name: http
              protocol: TCP
              containerPort: 80
          resources:
            limits:
              cpu: "1.0"
              memory: 512Mi
            requests:
              cpu: "0.5"
              memory: 128Mi
---
apiVersion: v1
kind: Service
metadata:
  annotations:
  name: nginx-test-service
  namespace: test
spec:
  ports:
    - port: 80
      targetPort: 80
      nodePort: 32001
      protocol: TCP
  selector:
    app: nginx
  sessionAffinity: None
  type: NodePort

发布nginx 应用

kubectl create -f nginx-deployment.yaml -n test

在这里插入图片描述

为nginx的deployment绑定下发规则

kubectl apply -f rollouts-demo.yaml

rollouts-demo.yaml

apiVersion: rollouts.kruise.io/v1alpha1
kind: Rollout
metadata:
  name: rollouts-demo
  namespace: test
  annotations:
    rollouts.kruise.io/rolling-style: partition
spec:
  objectRef:  # 绑定你的 Deployment
    workloadRef:
      apiVersion: apps/v1
      kind: Deployment
      name: nginx
  strategy:   # 制定你的分批发布规则
    canary:
      steps:
      - replicas: 1     #第一批发一个 Pod,发布完后暂停,手动确认后进入下一批
      - replicas: 60%   #第二批发60% Pod,发布完后暂停,手动确认后进入下一批
      - replicas: 100%  #第三批发全量 Pod,最后一批发布完后默认自动完成

在这里插入图片描述

玩转 Deployment 的分批发布

1、玩前第一步,查看发布前的版本

kubectl get deployment -n test

kubectl get replicaset -L pod-template-hash -n test

在这里插入图片描述

2、玩前第一步,查看发布前的版本

此时,我们修改容器的镜像版本触发发布

kubectl patch deployment nginx --patch '{"spec": {"template": {"spec": {"containers": [{"name": "nginx","image":"nginx:1.22.1"}]}}}}' -n test

在这里插入图片描述

可以看到第一批只发布了一个 Pod,版本号为 5f56795d47:

kubectl get replicaset -L pod-template-hash -n test

在这里插入图片描述

3、继续发布第二批

第一批 Pod 发布完毕后,此时假设我们已经完成第一批的验证,想要继续发第二批 Pod,我们可以借助 kubectl-kruise 这个命令行工具来进行批次完成的确认操作。该工具是基于 kubectl 的拓展,目前也是由 OpenKruise 社区维护

# 确认上一步发布完成,用下命令进入下一步发布
kubectl-kruise rollout approve rollout/rollouts-demo -n test

在这里插入图片描述

# 查看rollout 目前状态
kubectl get rollout -n test

在这里插入图片描述

# 查看第二次发布pod 分布状态

在这里插入图片描述

# 第二次发布完成后  查看rollout 目前状态
kubectl get rollout -n test

在这里插入图片描述
注:确认发下一批的命令为 kubectl-kruise rollout approve rollout/rollouts-demo

从上述过程可以看出,在该批次发布过程中且未完成时,Rollout 会进入 StepUpgrade 状态,而当该批次发布完成,会转变成 StepPaused 状态。

注意:kubectl-kruise rollout approve rollout/rollouts-demo
该命令执行前需要安装kruise,但是安装他之前需要安装
安装 krew:具体安装步骤:

Kruise-tools
krew安装

否则kubectl-kruise无法执行。

4、发布最后一批

当第二批发布确认完成后,发最后一批后,Rollout 会进入 Completed 状态,表示发布完成:

# 确认第二步发布完成,用下命令进入下一步发布
kubectl-kruise rollout approve rollout/rollouts-demo -n test

在这里插入图片描述

# 查看rollout 目前状态
kubectl get rollout -n test

在这里插入图片描述
已经到了完成状态

# 查看pod的升级情况
kubectl get replicaset -L pod-template-hash -n test

在这里插入图片描述
最新的版本已经完全被替换

# 确认pod发布完成
kubectl get deployment -n test

在这里插入图片描述
特别要说明的是,在分批发布的单个发布批次内,我们仍然会遵循流式滚动发布的规则,也就是说你仍然可以通过调整 Deployment 的MaxUnavailable和MaxSurge来兼顾你发布时的稳定性和效率,例如在以下场景,你依然可以遵循 Deployment 的如下配置:

  • 单个批次内必须先扩后缩,最大程度保证发布稳定:
kind: Deployment
spec:
  strategy:
    rollingUpdate: 
      maxUnavailble: 0
      maxSurge: 20%
  • 单个批次内必须先缩后扩,最大程度节省资源占用:
kind: Deployment
spec:
  strategy:
    rollingUpdate: 
      maxUnavailble: 20%
      maxSurge: 0
  • 单个批次内边扩遍缩,最大程度提高发布效率:
kind: Deployment
spec:
  strategy:
    rollingUpdate: 
      maxUnavailble: 25%
      maxSurge: 25%

此外,该方案还充分考虑了各种发布场景,最大程度地提高方案的灵活性:

连续发布场景:v1 到 v2 的发布过程中(v2 未发布完成),又发布了 v3,此时 v3 仍然会从第一批开始走标准分批发布流程;
快速回滚场景:v1 到 v2 发布到中途,回滚回 v1,则会进行快速回滚,默认不再进行分批发布。
发布策略删除:无论是在发布完成后,甚至是在发布过程中,正常删除 Rollout 资源后,相应的 Deployment 都会无缝回退至流式滚动发布场景,方便某些特殊情况下快速进行变更。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Kruise Rollout v0.3.0:手把手教你实战操作Deployment 分批发布和流量灰度 的相关文章

随机推荐

  • 前端开发中常见的浏览器兼容性问题及解决方案

    文章目录 前言一 浏览器四大内核二 主流兼容问题 xff08 一 xff09 浏览器引擎 xff08 二 xff09 兼容问题的原因 xff08 三 xff09 为什么浏览器会存在兼容性问题 xff08 四 xff09 处理兼容问题的思路1
  • 论文复现——Sphereface-Pytorch

    最近在写论文 xff0c 要做一些对比实验 xff0c 需要以Sphereface为基础 其实实验早该做了 xff0c 就是一直拖拖拖 唉拖延症患者 今天总算是把github上的代码跑通了 xff0c 赶紧做下小笔记 因为还要赶论文 xff
  • mysql学习-9.如何正确的使用索引

    1 索引的规则 1 1 等值匹配 假设索引 A select from table where A 61 xxx就是走索引的 1 2 最左侧列匹配 假设索引 A B select from table where A 61 xxx and
  • Python/matplotlib之【RuntimeWarning: More than 20 figures have been opened】

    Python matplotlib之 RuntimeWarning More than 20 figures have been opened 当绘图的过程中 xff0c 建立了大量的figure xff0c 就会报错 解决的方法 xff0
  • 【学习】《软件工程》期末考试卷A+参考答案

    2021 福师网院 软件工程 2020年期末考试卷A xff08 参考答案见底部 xff09 1 软件需求分析阶段的工作 xff0c 可以分为以下4个方面 xff1a 对问题的识别 分析与综合 编写需求分析文档以及 xff08 xff09
  • C#自定义控件

    一 开发环境和工具 1 WIN10系统 2 Visual Studio社区版 2019 xff08 C xff09 二 创建自定义控件窗体 添加一个自定义控件 xff0c 右键解决方案 xff0c 点击添加 xff0c 然后点击用户控件 选
  • vdo 虚拟数据优化器详解以及配置

    VDO 我的博客 xff1a https blog itwk cc vdo xff08 虚拟数据优化器 xff09 是一个内核模块 xff0c 目的是通过重删 xff08 重复数据删除 xff09 减少磁盘的的空间占用 xff0c 以及减少
  • ROS 自定义消息类型方法

    流程 1 在package中新建文件夹名为msg 2 在msg文件夹中创建消息 xff08 此处以my msg msg xff09 为例 xff0c 注意的是要以msg为后缀名 内容举例如下 xff1a int32 data1 float6
  • 计算机网络第七版笔记--第一章

    第一章概述 1 1 计算机网络在信息时代中的作用 1 互联网是覆盖全球的 xff0c 具有两个重要基本特点 xff0c 即连通性和共享 1 2互联网的概述 1 2 1网络的网络 1 计算机网络 xff08 简称网络 xff09 由若干结点
  • 0.1+0.2不等于0.3 原因

    在计算机进行数字计算时会先将十进制转化为二进制进行计算 xff0c 由于二进制表示的有限数字不能超过 52 位在 JavaScript 里是不能精确存储的 xff0c 计算机进行了四舍五入这时造成了数字误差导致计算结果不为0 3 总结 xf
  • mac 终端 配置代理

    即使打开代理 xff0c mac终端默认不走 xff0c 需要配置 一 复制终端代理命令 export http proxy 61 http 127 0 0 1 1089 export https proxy 61 http 127 0 0
  • 【linux】安装Linux的交叉编译工具链

    1 linux中装软件的特点 linux中安装软件比windows中复杂 linux中安装软件一般有以下几种方法 xff1a 第一种 xff1a 在线安装 譬如ubuntu中使用apt get install vim来安装vim软件 第二种
  • 基于STM32F429 的 FreeRTOS 环境下 LCD1602驱动实现

    本文是基于STM32F429在FreeRTOS下的HAL库开发 xff0c 并验证在多任务不同优先级情况下运行情况 LCD1602介绍 xff1a 是一个只能显示字母 数字 符号的点阵型液晶模块 一行可以显示16个字符 xff0c 可以显示
  • 查询MYSQL和查询HBASE速度比较

    MySQL xff0c 关系型数据库 xff1b HBase xff0c NoSql数据库 查询Mysql和查询HBase xff0c 到底哪个速度快呢 xff1f 与一些真正的大牛讨论时 xff0c 他们说HBase写入速度 xff0c
  • Office Online Server 在线编辑Office文档,安装部署

    最近公司项目需求 xff0c 需要搭建一个office预览编辑的服务 xff0c 在网上找到了Office Online Server在线编辑office文档 xff0c 以下把自己搭建过程记录 一 Office Online Server
  • 安装vmware搭建k8s集群(亲试无坑)

    一 前言 下面这个坑我也遇到了 xff0c 同时看到别人的博客也遇到了 xff0c 害的我废了一天的时间来解决这个问题 xff0c 但是毫无卵用 xff0c 气的我快吐血 xff1a 问题 xff1a 因为k8s把版本的问题 xff0c 一
  • Kaniko构建镜像

    一 前言 最近公司重构devops相关的一系列平台 xff0c 对于流水线中用容器方式交付的产品越来越多 xff0c 为了更加安全的方式来构建容器镜像 xff0c 采用Kaniko构建 在了解如何用Kaniko构建镜像之前 xff0c 我们
  • Mysql批量插入对比(附github仓库demo)

    前言 本文记录个人使用MySQL插入大数据总结较实用的方案 xff0c 通过对常用插入大数据的4种方式进行测试 xff0c for循环单条拼接SQL批量插入saveBatch 循环 43 开启批处理模式 最近趁空闲之余 xff0c 在对My
  • docker内部如何访问宿主机上的服务或者应用

    背景 在docker启动的容器中需要访问宿主机上的服务 xff0c 所以在容器中通过localhost或者127 0 0 1 但是这样是不行的 访问url xff1a http 127 0 0 1 8088 或者http localhost
  • Kruise Rollout v0.3.0:手把手教你实战操作Deployment 分批发布和流量灰度

    helm3 安装 kubectl版本 xff1a v1 20 9 heml版本 xff1a v3 1 2 span class token punctuation span root 64 k8smaster peishunwu span