自己做网站哪里最好,福州手机模板建站,越秀网站建设方案,海南在线人才文章目录 Kruise Rollouts简介什么是 Kruise Rollouts#xff1f;核心功能 应用环境一、OpenKruise部署1.安装helm客户端工具2. 通过 helm 安装 二、Kruise Rollouts 安装2. kubectl plugin安装 三、Kruise Rollouts 基本使用(多批次发布)1. 使用Deployment部署应用2.准备Roll… 文章目录 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.11master012cpu双核4G100G192.168.10.12worker012cpu双核4G100G192.168.10.13worker022cpu双核4G100G
版本 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.socketFilecri-dockerd.sock查看一下
helm listkubectl -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-rollout2. 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 --outputyaml三、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 pods2.准备Rollout对象
vim 02-rollout.yamlapiVersion: 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 podskubectl 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 podkubectl get replicasets总结
总结来说Kruise Rollouts 是 Kubernetes 生态中的一个重要拓展适用于需要高度可控和自动化部署策略的复杂应用环境。