当前位置: 首页 > news >正文

Kruise Rollout多批次发布

实验环境

安装好k8s集群

一、Kruise Rollouts简介

1、什么是 Kruise Rollouts?

Kruise Rollouts 是一个 Bypass(旁路) 组件,提供高级渐进式交付功能 。

它可以实现对应用程序的更平稳和受控的更改部署,支持金丝雀、多批次和A/B测试交付模式,同时它兼容 Gateway API 和各种 Ingress 实现,使其更容易集成到现有基础设施中。

2、Kruise Rollouts主要特点

更多的发布策略

用于 Deployment、CloneSet、StatefulSet、Advanced StatefulSet 的多批次更新策略

用于 Deployment 的金丝雀(Canary)更新策略。

更多的流量路由管理策略

在更新工作负载时进行流量细粒度、加权流量转移。

流量A/B测试,基于HTTP头和Cookie进行流量转移。

环境准备

部署OpenKruise

1、部署helm

下载或上传helm-v3.13.2-linux-amd64.tar.gz包到/root目录

下载方法:wget https://get.helm.sh/helm-v3.13.2-linux-amd64.tar.gz

tar xf helm-v3.13.2-linux-amd64.tar.gz

mv linux-amd64/helm /usr/bin/

helm version

2、添加openkruise仓库

helm repo add openkruise https://openkruise.github.io/charts/

helm repo update

helm repo list

3、使用helm安装kruise

helm search repo openkruise

这里使用本地包安装

上传kruise-manager.tar镜像包到/root目录(master1、worker1、worker2)也可以执行下面命令联网下载镜像

docker load -i kruise-manager.tar

上传kruise-1.8.0.tgz包到/root目录(master1)

helm install kruise kruise-1.8.0.tgz --set daemon.socketLocation=/var/run --set daemon.socketFile=cri-dockerd.sock --set featureGates="InPlaceUpdateEnvFromMetadata=true\,PreDownloadImageForInPlaceUpdate=true"

kubectl get all -n kruise-system

二、Kruise Rollouts 安装

1、使用helm安装kruise-rollout

helm search repo kruise-rollout

使用openkruise仓库安装(需要连接VPN

helm install kruise-rollout openkruise/kruise-rollout --version 0.5.0

这里使用本地包安装

上传kruise-rollout.tar镜像包到/root目录(master1、worker1、worker2)也可以执行下面命令联网下载镜像

docker load -i kruise-rollout.tar

上传kruise-rollout-0.5.0.tgz包到/root目录(master1)

helm install kruise-rollout kruise-rollout-0.5.0.tgz

kubectl get ns

kubectl get pod -n kruise-rollout

2、kubectl plugin安装(master1)

下载或上传kubectl-kruise-linux-amd64.tar.gz包到/root目录

下载方法(需要连接VPN):wget https://github.com/openkruise/kruise-tools/releases/download/v1.1.2/kubectl-kruise-linux-amd64.tar.gz

tar xf kubectl-kruise-linux-amd64.tar.gz

mv linux-amd64/kubectl-kruise /usr/bin/

kubectl-kruise version或kubectl-kruise version --output=yaml

三、Kruise Rollouts 基本使用(多批次发布)

1、使用Deployment部署应用

vim 01-deployment.yaml

添加:

apiVersion: apps/v1

kind: Deployment

metadata:

  name: workload-demo

  namespace: default

spec:

  replicas: 10

  selector:

    matchLabels:

      app: demo

  template:

    metadata:

      labels:

        app: demo

    spec:

      containers:

        - name: busybox

          image: busybox:latest

          command: [ "/bin/sh", "-c", "sleep 100d" ]

          env:

            - name: VERSION

              value: "version-1"

kubectl apply -f 01-deployment.yaml

kubectl get pod

2、准备Rollout对象

vim 02-rollout.yaml

添加:

apiVersion: rollouts.kruise.io/v1alpha1

kind: Rollout

metadata:

  name: rollouts-demo

  namespace: default

  annotations:

    rollouts.kruise.io/rolling-style: partition

spec:

  objectRef:

    workloadRef:

      apiVersion: apps/v1

      kind: Deployment

      name: workload-demo

  strategy:

    canary:

      steps:

      - replicas: 1

      - replicas: 50%

      - replicas: 100%

kubectl apply -f 02-rollout.yaml

查看 Kubernetes 集群中的 Rollout 资源

kubectl get rollout

字段解析:

NAME: Rollout 资源的名称,这里是 rollouts-demo。

STATUS: Rollout 的当前状态,这里是 Healthy,表示 Rollout 健康且正常运行。

CANARY_STEP: 当前金丝雀发布的步骤,这里是 3,表示已经完成了第三步(即 100% 的 Pod 更新)。

CANARY_STATE: 当前金丝雀发布的状态,这里是 Completed,表示金丝雀发布已完成。

MESSAGE: 附加信息,这里是 workload deployment is completed,表示相关工作负载的部署已完成。

AGE: Rollout 资源的创建时间,这里是 58s,表示资源已经创建了 58 秒。

3、将部署升级到“version-2” 并发布第一批次

kubectl get deployment

通过 kubectl patch 更新 workload-demo Deployment 的 Pod 模板,具体是为名为 busybox 的容器添加一个环境变量 VERSION,并将其值设置为 version-2

kubectl patch deployment workload-demo -p '{"spec":{"template":{"spec":{"containers":[{"name":"busybox", "env":[{"name":"VERSION", "value":"version-2"}]}]}}}}'

字段解析:

kubectl patch: 用于部分更新 Kubernetes 资源。

deployment workload-demo: 指定要更新的资源类型和名称,这里是 workload-demo Deployment。

-p: 指定要应用的 JSON 或 YAML 格式的补丁内容。

kubectl get pod

kubectl get deployment

kubectl get replicaset -L pod-template-hash

-L pod-template-hash:显示 pod-template-hash 标签的值。pod-template-hash 是 Kubernetes 自动为每个 ReplicaSet 生成的唯一标签,用于标识其 Pod 模板。

已根据策略更新一个Pod

kubectl get rollout

字段解析:

STATUS: Rollout 的当前状态,这里是 Progressing,表示 Rollout 正在进行中。

CANARY_STEP: 当前金丝雀发布的步骤,这里是 1,表示已经完成了第一步(即更新 1 个 Pod)。

CANARY_STATE: 当前金丝雀发布的状态,这里是 StepPaused,表示 Rollout 在第一步完成后暂停,等待手动确认。

MESSAGE: 附加信息,这里是 Rollout is in step(1/3), and you need manually confirm to enter the next step,表示 Rollout 处于第一步(共三步),需要手动确认才能进入下一步。

4、发布第二批次

手动确认 rollouts-demo 进入下一步

kubectl-kruise rollout approve rollouts/rollouts-demo

字段解析:

kubectl-kruise rollout approve: 这是 OpenKruise 提供的命令,用于手动确认 Rollout 进入下一步。

rollouts/rollouts-demo: 指定要确认的 Rollout 资源,格式为 <资源类型>/<资源名称>。这里 rollouts 是资源类型,rollouts-demo 是资源名称。

kubectl get rollout

字段解析:

CANARY_STEP: 当前金丝雀发布的步骤,这里是 2,表示已经完成了第二步(即更新 50% 的 Pod)。

CANARY_STATE: 当前金丝雀发布的状态,这里是 StepPaused,表示 Rollout 在第二步完成后暂停,等待手动确认。

MESSAGE: 附加信息,这里是 Rollout is in step(2/3), and you need manually confirm to enter the next step,表示 Rollout 处于第二步(共三步),需要手动确认才能进入下一步。

kubectl get deployment

kubectl get pod

已根据策略更新50% Pod

5、发布第三批次

手动确认 rollouts-demo 进入下一步

kubectl-kruise rollout approve rollouts/rollouts-demo

kubectl get rollout

返回字段解析:

STATUS:当前 Rollout 的状态,这里是 Progressing,表示 Rollout 正在进行中。

CANARY_STEP:当前金丝雀部署的阶段,这里是 3,表示 Rollout 正处于第 3 个阶段。

CANARY_STATE:当前金丝雀部署的状态,这里是 StepUpgrade,表示 Rollout 正在升级到新版本。

MESSAGE:描述 Rollout 的详细信息,这里是:复制Rollout is in step(3/3), and upgrade workload to new version,表示 Rollout 正处于第 3 个阶段(总共 3 个阶段),并且正在将工作负载升级到新版本。

kubectl get replicaset

等待一,会集中更新

kubectl get rollout

返回字段解析:

STATUS: Rollout 的当前状态,这里是 Healthy,表示 Rollout 健康且正常运行。

CANARY_STEP: 当前金丝雀发布的步骤,这里是 3,表示已经完成了第三步(即 100% 的 Pod 更新)。

CANARY_STATE: 当前金丝雀发布的状态,这里是 Completed,表示金丝雀发布已完成。

kubectl get replicaset

kubectl get pod

已根据策略更新100% Pod

http://www.xdnf.cn/news/531829.html

相关文章:

  • 3D 数据交换格式(.3DXML)简介
  • PyTorch Geometric(PyG):基于PyTorch的图神经网络(GNN)开发框架
  • 如何评估开源商城小程序源码的基础防护能力?
  • SCAU18924--二叉树的宽度多解
  • uniapp打包H5,输入网址空白情况
  • 样本复杂性:机器学习的数据效率密码
  • 【Vite】静态资源的动态访问
  • Libero离线IP安装
  • JWT : JSON Web Token
  • Linux 常用命令
  • 华为云Flexus+DeepSeek征文|基于华为云Flexus云服务的云服务器单机部署Dify-LLM应用开发平台
  • 力扣HOT100之二叉树:230. 二叉搜索树中第 K 小的元素
  • 【高德开放平台-注册安全分析报告】
  • LeetCode-滑动窗口-找到字符串中所有字母异位词
  • Swift 二分查找实战:精准定位第一个“Bug版本”(LeetCode 278)
  • 【栈 / 链表板子题】
  • 解决 uv run 时 ModuleNotFoundError: No module named ‘anthropic‘ 的完整指南
  • 【OSS】如何使用OSS提供的图片压缩服务
  • IDEA+AI 深度融合:重构高效开发的未来模式
  • 缺乏团队建设活动,如何增强凝聚力?
  • 隨筆20250519 Async+ThreadPoolTaskExecutor⾃定义线程池进阶实战
  • 基于卫星遥感的耕地非农化监测的技术原理简述
  • 论坛系统(中-2)
  • 【HTML】【面试提问】HTML面试提问总结
  • 网球机器人自动捡球机械结构设计与创新研究
  • 如何git clone下来自定义文件名
  • Java设计模式之享元模式:从基础到高级的全面解析
  • Python集合
  • 第35周Zookkeeper+Dubbo 面试题精讲
  • RISC-V 开发板 MUSE Pi Pro PCIE 测试以及 fio 崩溃问题解决