开源项目 OpenKruise Rollouts 使用教程
项目介绍
OpenKruise Rollouts 是一个 Kubernetes 控制器和一组自定义资源定义(CRDs),旨在为 Kubernetes 提供高级部署功能,如蓝绿部署、金丝雀部署、金丝雀分析、实验和渐进式交付。该项目通过集成入口控制器和服务网格,利用其流量控制能力,在更新过程中逐步转移流量到新版本。此外,Rollouts 还可以查询和解释来自各种提供商的指标,以验证关键性能指标(KPIs),并在更新过程中驱动自动化的推广或回滚。
项目快速启动
安装 OpenKruise Rollouts
首先,确保你已经安装了 Kubernetes 集群,并且 kubectl 工具已经配置好。然后,按照以下步骤安装 OpenKruise Rollouts:
# 克隆项目仓库
git clone https://github.com/openkruise/rollouts.git
cd rollouts
# 安装 CRDs 和控制器
kubectl apply -f config/crd/bases
kubectl apply -f config/manager
创建一个简单的 Rollout 资源
以下是一个简单的 Rollout 资源示例,用于进行金丝雀部署:
apiVersion: rollouts.kruise.io/v1alpha1
kind: Rollout
metadata:
name: example-rollout
spec:
objectRef:
workloadRef:
apiVersion: apps/v1
kind: Deployment
name: example-deployment
strategy:
canary:
steps:
- setWeight: 20
- pause: {}
trafficRoutings:
- type: Service
service: example-service
将上述 YAML 文件保存为 example-rollout.yaml
,然后应用它:
kubectl apply -f example-rollout.yaml
应用案例和最佳实践
金丝雀部署
金丝雀部署是一种逐步将流量从旧版本转移到新版本的方法。通过设置不同的权重,可以控制新版本接收的流量比例。以下是一个金丝雀部署的最佳实践示例:
apiVersion: rollouts.kruise.io/v1alpha1
kind: Rollout
metadata:
name: canary-rollout
spec:
objectRef:
workloadRef:
apiVersion: apps/v1
kind: Deployment
name: canary-deployment
strategy:
canary:
steps:
- setWeight: 20
- pause: {duration: 1h}
- setWeight: 50
- pause: {duration: 1h}
- setWeight: 100
trafficRoutings:
- type: Service
service: canary-service
蓝绿部署
蓝绿部署通过同时运行两个版本的应用,并将流量从旧版本切换到新版本。以下是一个蓝绿部署的最佳实践示例:
apiVersion: rollouts.kruise.io/v1alpha1
kind: Rollout
metadata:
name: blue-green-rollout
spec:
objectRef:
workloadRef:
apiVersion: apps/v1
kind: Deployment
name: blue-green-deployment
strategy:
blueGreen:
activeService: blue-green-active-service
previewService: blue-green-preview-service
autoPromotionEnabled: false
典型生态项目
OpenKruise Rollouts 可以与多个生态项目集成,以提供更强大的功能和更好的用户体验。以下是一些典型的生态项目:
入口控制器
- NGINX Ingress Controller: 用于管理入口流量,支持流量控制和路由。
- ALB Ingress Controller: 适用于 AWS 环境,提供高级的负载均衡和路由功能。
服务网格
- Istio: 提供强大的服务网格功能,支持流量管理、安全性和可观察性。
- Linkerd: 轻量级的服务网格,提供简单的配置和易于管理的特性。
- SMI (Service Mesh Interface): 服务网格的标准接口,支持多种服务网格实现。
指标提供商
- Prometheus: 用于收集和查询时间序列