k8s学习--Kruise Rollouts 基本使用
文章目录
- Kruise Rollouts简介
- 什么是 Kruise Rollouts?
- 核心功能
- 应用
- 环境
- 一、OpenKruise部署
- 1.安装helm客户端工具
- 2. 通过 helm 安装
- 二、Kruise Rollouts 安装
- 2. kubectl plugin安装
- 三、Kruise Rollouts 基本使用(多批次发布)
- 1. 使用Deployment部署应用
- 2.准备Rollout对象
- 将部署升级到“version-2” 并发布第一批次
- 4. 发布第二批次
- 5. 发布第三批次
- 总结
Kruise Rollouts简介
什么是 Kruise Rollouts?
Kruise Rollouts 是由 OpenKruise 开发的 Kubernetes 拓展工具,专门设计用于管理应用部署和更新过程中的复杂需求。它提供了多种高级部署策略,旨在优化和控制 Kubernetes 应用程序的发布过程,使得可以更灵活、更安全地进行版本迭代和回滚。这个工具是对 Kubernetes 标准部署策略(如 RollingUpdate)的扩展和增强。
核心功能
1. 多种部署策略
Kruise Rollouts 支持多种部署策略,包括:
蓝绿部署(Blue-Green Deployment): 快速切换版本,在新旧版本间切换流量,旧版本保持可用直到新版本完全稳定,有利于快速回滚。
金丝雀部署(Canary Deployment): 逐步引入新版本,初期仅向少数用户暴露新版本,逐渐增加曝光率,减少风险。
A/B 测试: 根据特定规则向不同用户展示不同版本,适用于功能测试和用户行为研究。
2. 灵活的流量管理
利用 Istio 等服务网格技术,Kruise Rollouts 可以更精细地控制流量,比如按百分比切分流量到不同版本。
3. 声明式 API
Kruise Rollouts 提供声明式 API,用户可以在 YAML 文件中定义部署策略和规则,Kubernetes 控制器将负责实施这些策略,简化了操作复杂度。
4. 动态配置和更新
支持在不重启容器的情况下动态更改配置,减少因配置变更造成的服务中断。
5. 分阶段发布和验证
可以在部署过程中设置不同的验证点,确保每个阶段的稳定性后再继续推进部署。
使用案例和好处
更安全的部署: 通过多种部署策略,尤其是蓝绿和金丝雀策略,可以显著降低新版本引入问题的风险。
连续部署: Kruise Rollouts 支持 CI/CD 流程,使得应用更新更加流畅和自动化。
实验性功能测试:A/B 测试支持让开发者能够测试新功能对特定用户群体的影响。
实现方式
Kruise Rollouts 是作为一个 Kubernetes Operator 实现的。它监听自定义资源的变化,然后按照定义的规则调整 Kubernetes 的 Service、Deployment 等资源,以实现精细的版本控制和流量管理。
与其他工具的对比
与 Kubernetes 原生的 Deployment 和其他部署工具(如 Spinnaker、Argo Rollouts)相比,Kruise Rollouts 提供了更为丰富的功能和更高的灵活性,尤其是在复杂的生产环境中。它通过扩展和增强原生 Kubernetes 功能,提供了更适合企业级应用的部署选项。
应用
环境
虚拟机
Ip | 主机名 | cpu | 内存 | 硬盘 |
---|---|---|---|---|
192.168.10.11 | master01 | 2cpu双核 | 4G | 100G |
192.168.10.12 | worker01 | 2cpu双核 | 4G | 100G |
192.168.10.13 | worker02 | 2cpu双核 | 4G | 100G |
版本 centos7.9
已部署k8s-1.27
一、OpenKruise部署
本案例使用helm方式安装部署
Helm用于实现kubernetes中相互关联的多个yaml文件的安装部署,相当于linux系统中的yum工具
1.安装helm客户端工具
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
helm repo add stable http://mirror.azure.cn/kubernetes/charts/
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo update
helm repo list
详情请看
链接: k8s学习–helm的详细解释及安装和常用命令
2. 通过 helm 安装
helm repo add openkruise https://openkruise.github.io/charts/helm repo updatehelm search repo openkruise
搜索OpenKruise仓库中的Charts
可以看到已经存在
由于本次部署在K8S 1.27版本集群,并使用cri-dockerd,所以手动指定CRI。
注意:如果是1.24以下,则不需要,因为默认就是docker
helm install kruise openkruise/kruise --version 1.6.3 --set daemon.socketLocation=/var/run --set daemon.socketFile=cri-dockerd.sock
查看一下
helm list
kubectl -n kruise-system get all
可以看到都已经运行起来了
二、Kruise Rollouts 安装
添加openkruise charts库
helm repo add openkruise https://openkruise.github.io/charts/helm repo update
安装最新版本
helm install kruise-rollout openkruise/kruise-rollout --version 0.5.0
kubectl get ns
已经可以看到kruise-rollout的命令空间了
kubectl get pods -n kruise-rollout
2. kubectl plugin安装
注:需要科学上网
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 version --output=yaml
三、Kruise Rollouts 基本使用(多批次发布)
1. 使用Deployment部署应用
vim 01-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:name: workload-demonamespace: default
spec:replicas: 10selector:matchLabels:app: demotemplate:metadata:labels:app: demospec:containers:- name: busyboximage: busybox:latestcommand: [ "/bin/sh", "-c", "sleep 100d" ]env:- name: VERSIONvalue: "version-1"
应用yaml文件
kubectl apply -f 01-deployment.yaml
查看pod
kubectl get pods
2.准备Rollout对象
vim 02-rollout.yaml
apiVersion: rollouts.kruise.io/v1alpha1
kind: Rollout
metadata:name: rollouts-demonamespace: defaultannotations:rollouts.kruise.io/rolling-style: partition # 指示 Rollout 使用分区方式进行滚动更新
spec:objectRef:workloadRef:apiVersion: apps/v1kind: Deploymentname: workload-demostrategy:canary:steps:- replicas: 1- replicas: 50%- replicas: 100%
应用yaml文件
kubectl apply -f 02-rollout.yaml
查看rollout
kubectl get rollout
将部署升级到“version-2” 并发布第一批次
kubectl get pods
kubectl get deployments.apps
下列命令是用来更新名为 workload-demo 的部署(Deployment),将容器的环境变量 VERSION 设置为 version-2。
kubectl patch deployment workload-demo -p '{"spec":{"template":{"spec":{"containers":[{"name":"busybox", "env":[{"name":"VERSION", "value":"version-2"}]}]}}}}'
然后查看
kubectl get pods
可以看到添加了一个pod
第一次更新可能会多创建一个Pod的原因主要是为了在不影响现有服务的前提下进行新版本的测试和验证
4. 发布第二批次
kubectl-kruise rollout approve rollouts/rollouts-demokubectl get rollout
查看pod
kubectl get pod
可以看到增加了5个
5. 发布第三批次
kubectl-kruise rollout approve rollouts/rollouts-demo
kubectl get rollouts
稍等一会查看
kubectl get pod
再稍等一会
可以看到旧的pod逐渐被删除,最后只剩下新的pod
kubectl get pod
kubectl get replicasets
总结
总结来说,Kruise Rollouts 是 Kubernetes 生态中的一个重要拓展,适用于需要高度可控和自动化部署策略的复杂应用环境。
相关文章:

k8s学习--Kruise Rollouts 基本使用
文章目录 Kruise Rollouts简介什么是 Kruise Rollouts?核心功能 应用环境一、OpenKruise部署1.安装helm客户端工具2. 通过 helm 安装 二、Kruise Rollouts 安装2. kubectl plugin安装 三、Kruise Rollouts 基本使用(多批次发布)1. 使用Deployment部署应用2.准备Roll…...
PHP框架详解 - CakePHP框架
CakePHP 是一个开源的 PHP Web 应用框架,它遵循 MVC(模型-视图-控制器)设计模式。CakePHP 提供了快速开发的功能,如代码自动生成、数据库交互的 CRUD 操作支持、灵活的路由、模板引擎、表单处理以及其它许多有用的特性22。 CakeP…...

el-cascader 支持多层级,多选(可自定义限制数量),保留最后一级
多功能的 el-cascader 序言:最近遇到一个需求关于级联的,有点东西,这里是要获取某个产品类型下的产品,会存在产品类型和产品在同一级的情况,但是产品类型不能勾选; 情况1(二级菜单是产品&…...

leetcode498 对角线遍历
题目 给你一个大小为 m x n 的矩阵 mat ,请以对角线遍历的顺序,用一个数组返回这个矩阵中的所有元素。 示例 输入:mat [[1,2,3],[4,5,6],[7,8,9]] 输出:[1,2,4,7,5,3,6,8,9] 解析 本题目主要考察的就是模拟法,首…...

北京活动会议通常会邀约哪些媒体参会报道?
传媒如春雨,润物细无声,大家好,我是51媒体网胡老师。 北京作为我国的首都和文化中心,各类活动会议资源丰富,吸引了众多媒体的关注。以下是一些通常会被邀约参会报道的重要媒体类型: 国家级新闻机构&#x…...

随心笔记,第六更
目录 一、 三步构建 XML转成java bean 1.XML转XSD 2.XSD转JavaBean 3.jaxb 工具类 4.测试 📢📢📢📣📣📣 哈喽!大家好,我是「Leen」。刚工作几年,想和大家一同进步&am…...

zustand 状态管理库的使用 结合TS
zustand 是一个用于React应用的简单、快速且零依赖的状态管理库。它使用简单的钩子(hooks)API来创建全局状态,使得在组件之间共享状态变得容易。 React学习Day10 基本用法 安装:首先,你需要安装zustand库。 npm insta…...
Maven 的生命周期详解
Maven 是目前最流行的项目管理和构建工具之一,广泛应用于 Java 开发项目中。它通过一系列约定和配置,极大地简化了项目的构建、依赖管理和生命周期管理。其中,Maven 的生命周期是其核心概念之一,贯穿了项目从构建、测试、打包到部…...

【稳定检索/投稿优惠】2024年生物技术与食品科学国际会议(ICBFS 2024)
2024 International Conference on Biotechnology and Food Science 2024年生物技术与食品科学国际会议 【会议信息】 会议简称:ICBFS 2024 大会时间:点击查看 截稿时间:点击查看 大会地点:中国厦门 会议官网:www.icb…...
iOS Category
原理: 【iOS】——分类、扩展和关联对象_ios 为什么分类不能加成员变量-CSDN博客 面试题: 1.Category和Extension区别? 在 Objective-C 中,Category 和 Extension 是两种用于向现有类添加新功能的机制,但它们各有特…...

5.Sentinel入门与使用
5.Sentinel入门与使用 1.什么是 Sentinel?Sentinel 主要有以下几个功能: 2.为什么需要 Sentinel?3.Sentinel 基本概念3.1 什么是流量控制?3.1.1 常见流量控制算法3.1.2 Sentinel 流量控制流控效果介绍如下: 3.2 什么是熔断?熔断策略 3.3 Sentinel 组成(资源和规…...

上位机图像处理和嵌入式模块部署(h750 mcu和图像处理)
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 前面我们说过,h750和之前的103、407相比较,本身cpu频率比较高,flash大小一般,但是ram比较大&#x…...

信创服务器操作系统的适配迁移分析
浅谈信创服务器操作系统的适配迁移 01 服务器操作系统迁移适配流程复杂 随着CentOS停服临近和红帽RHEL源码权限受限,服务器操作系统安全漏洞风险加剧。国内众多企业面临CentOS、REHL等系统升级替换的挑战。同时,出于安全、功能升级和合规需求࿰…...
在Ubuntu 20.04上安装和配置MySQL 8:详细指南和远程访问设置
目录 一、MySQL 8的特点和优势 二、在Ubuntu 20.04上安装MySQL 8 三、初始化MySQL 四、配置MySQL远程访问 五、 创建远程访问用户 六. 配置防火墙 七、 测试远程访问 总结 MySQL是一种开源的关系型数据库管理系统,被广泛应用于各种应用程序和网站中。MySQL …...

Vue43-单文件组件
一、脚手架的作用 单文件组件:xxx.vue,浏览器不能直接运行!!! 脚手架去调用webpack等第三方工具。 二、vue文件的命名规则 建议用下面的两种方式。(首字母大写!!!&#x…...

如何快速使用向量检索服务DashVector?
免费体验阿里云高性能向量检索服务:https://www.aliyun.com/product/ai/dashvector 本文将介绍如何快速上手使用向量检索服务DashVector。 前提条件 已创建Cluster:创建Cluster。 已获得API-KEY:API-KEY管理。 已安装最新版SDK:…...
Linux 用户和用户组 创建用户 创建组
介绍 一个组有多个用户,可以给组分配权限,那么该组的使用用户都有该组的权限,就不用一个个分配,而且很好管理。 创建用户组 groupadd 组名删除用户组 groupdel test查看用户所属组 id [用户名]修改用户组 把abc用户添加到m…...

Character Animator 2024 mac/win版:赋予角色生命,动画更传神
Character Animator 2024是一款强大的角色动画制作软件,以其创新的功能和卓越的性能,为动画师、游戏开发者以及设计师们带来了全新的创作体验。 Character Animator 2024 mac/win版获取 这款软件采用了先进的骨骼绑定技术,使得角色动画的制作…...
短剧app广告变现模式开发
短剧app搭建是一个涉及多个方面的复杂过程,下面将介绍主要的步骤和考虑因素: 明确目标和定位:在开始搭建之前,首先要明确你的目标受众是谁,以及短剧app的主要定位是什么。这有助于在后续的开发过程中更有针对性地进行…...
如何选择适合的编程语言入门?
推荐学习网站:offernow.cn 如何选择最适合自己的编程语言呢?接下来,我给大家分享一些实用的建议,希望能帮到你们。 一、明确目标和兴趣 考虑你的兴趣和未来方向是选择编程语言的首要因素。如果你对网页开发感兴趣,可以…...

深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录
ASP.NET Core 是一个跨平台的开源框架,用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录,以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...
Leetcode 3576. Transform Array to All Equal Elements
Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接:3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到…...

家政维修平台实战20:权限设计
目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系,主要是分成几个表,用户表我们是记录用户的基础信息,包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题,不同的角色…...
高防服务器能够抵御哪些网络攻击呢?
高防服务器作为一种有着高度防御能力的服务器,可以帮助网站应对分布式拒绝服务攻击,有效识别和清理一些恶意的网络流量,为用户提供安全且稳定的网络环境,那么,高防服务器一般都可以抵御哪些网络攻击呢?下面…...

RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程
本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文全面剖析RNN核心原理,深入讲解梯度消失/爆炸问题,并通过LSTM/GRU结构实现解决方案,提供时间序列预测和文本生成…...
LeetCode - 199. 二叉树的右视图
题目 199. 二叉树的右视图 - 力扣(LeetCode) 思路 右视图是指从树的右侧看,对于每一层,只能看到该层最右边的节点。实现思路是: 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...

视频行为标注工具BehaviLabel(源码+使用介绍+Windows.Exe版本)
前言: 最近在做行为检测相关的模型,用的是时空图卷积网络(STGCN),但原有kinetic-400数据集数据质量较低,需要进行细粒度的标注,同时粗略搜了下已有开源工具基本都集中于图像分割这块,…...
【Go语言基础【13】】函数、闭包、方法
文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数(函数作为参数、返回值) 三、匿名函数与闭包1. 匿名函数(Lambda函…...
用鸿蒙HarmonyOS5实现中国象棋小游戏的过程
下面是一个基于鸿蒙OS (HarmonyOS) 的中国象棋小游戏的实现代码。这个实现使用Java语言和鸿蒙的Ability框架。 1. 项目结构 /src/main/java/com/example/chinesechess/├── MainAbilitySlice.java // 主界面逻辑├── ChessView.java // 游戏视图和逻辑├──…...
区块链技术概述
区块链技术是一种去中心化、分布式账本技术,通过密码学、共识机制和智能合约等核心组件,实现数据不可篡改、透明可追溯的系统。 一、核心技术 1. 去中心化 特点:数据存储在网络中的多个节点(计算机),而非…...