k8s学习--Kruise Rollouts 基本使用

发布于:2024-06-24 ⋅ 阅读:(123) ⋅ 点赞:(0)


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 update
 helm 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-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"

应用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-demo
  namespace: default
  annotations:
    rollouts.kruise.io/rolling-style: partition # 指示 Rollout 使用分区方式进行滚动更新
spec:
  objectRef:
    workloadRef:
      apiVersion: apps/v1
      kind: Deployment
      name: workload-demo
  strategy:
    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-demo
 kubectl 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 生态中的一个重要拓展,适用于需要高度可控和自动化部署策略的复杂应用环境。


网站公告

今日签到

点亮在社区的每一天
去签到