3. 实验环境准备:Minikube 集群搭建、kubectl 配置、Argo Rollouts 控制器安装、Argo Rollouts kubectl 插件安装
本章节将指导你从零搭建一套完整的 Argo Rollouts 实验环境。我们将依次完成 Minikube 本地集群的创建、kubectl 命令行工具的配置、Argo Rollouts 控制器在集群内的部署,以及 Argo Rollouts kubectl 插件的安装。这套环境将作为后续所有灰度发布与自动回滚演练的基础平台。
3.1 实验环境架构总览
下图展示了我们即将搭建的实验环境整体架构。Minikube 作为单节点 Kubernetes 集群运行在本地,Argo Rollouts 控制器作为核心组件部署在集群内,而 kubectl 和 Argo Rollouts 插件则作为客户端工具与集群交互。
3.2 Minikube 集群搭建
Minikube 是运行本地 Kubernetes 集群的最佳工具之一,特别适合学习和实验场景。我们将使用 Minikube 创建一个包含所有必要组件的单节点集群。
3.2.1 安装 Minikube
根据你的操作系统,选择对应的安装方式:
| 操作系统 | 安装命令 / 方式 |
|---|---|
| Linux (x86-64) | |
| macOS (Intel) | |
| macOS (Apple Silicon) | |
| Windows (WSL2) | |
3.2.2 启动 Minikube 集群
启动集群时,我们需要指定足够的资源以确保 Argo Rollouts 及其依赖组件能够正常运行。推荐使用 Docker 驱动,这是最稳定且兼容性最好的方式。
# 启动 Minikube 集群,指定 4GB 内存和 2 个 CPU
minikube start --memory=4096 --cpus=2 --driver=docker
# 验证集群状态
minikube status
# 查看集群节点信息
kubectl get nodes
minikube status 后,应看到 host: Running、kubelet: Running、apiserver: Running 等状态。执行 kubectl get nodes 后,应看到一个名为 minikube 的节点处于 Ready 状态。
3.2.3 启用必要的 Minikube 插件
为了支持后续的灰度发布场景,我们需要启用 Ingress 控制器和 Metrics Server 插件。
# 启用 Ingress 控制器,用于外部流量接入
minikube addons enable ingress
# 启用 Metrics Server,用于 Pod 资源监控
minikube addons enable metrics-server
# 验证插件状态
minikube addons list | grep -E "ingress|metrics-server"
3.3 kubectl 配置
Minikube 启动后会自动配置 kubectl 的上下文。我们只需要验证配置是否正确,并确保能够正常访问集群。
3.3.1 验证 kubectl 配置
# 查看当前 kubectl 上下文
kubectl config current-context
# 查看集群信息
kubectl cluster-info
# 测试 API 访问
kubectl api-versions | head -10
kubectl config current-context 显示的不是 minikube,请执行 kubectl config use-context minikube 切换到 Minikube 上下文。如果 kubectl cluster-info 连接失败,请检查 Minikube 是否正在运行。
3.3.2 配置自动补全(可选但推荐)
# Bash 自动补全
source <(kubectl completion bash)
echo "source <(kubectl completion bash)" >> ~/.bashrc
# Zsh 自动补全
source <(kubectl completion zsh)
echo "source <(kubectl completion zsh)" >> ~/.zshrc
3.4 Argo Rollouts 控制器安装
Argo Rollouts 控制器是灰度发布的核心组件,它负责监听 Rollout 资源的变化并执行相应的发布策略。我们将通过官方提供的清单文件进行安装。
3.4.1 安装控制器
# 创建 argo-rollouts 命名空间
kubectl create namespace argo-rollouts
# 安装 Argo Rollouts 控制器
kubectl apply -n argo-rollouts -f https://github.com/argoproj/argo-rollouts/releases/latest/download/install.yaml
# 查看控制器 Pod 状态
kubectl get pods -n argo-rollouts -w
argo-rollouts-xxxxx-xxxxx 的 Pod 处于 Running 状态。如果 Pod 一直处于 Pending 状态,请检查 Minikube 集群资源是否充足。
3.4.2 验证控制器安装
# 查看 Argo Rollouts 相关的 CRD
kubectl get crd | grep argoproj.io
# 查看控制器日志
kubectl logs -n argo-rollouts deployment/argo-rollouts --tail=50
安装完成后,集群中将注册以下关键的自定义资源定义(CRD):
| CRD 名称 | 缩写 | 用途说明 |
|---|---|---|
| rollouts.argoproj.io | ro | 定义灰度发布策略,包括蓝绿、金丝雀等 |
| experiments.argoproj.io | exp | 定义 A/B 测试实验,用于流量对比分析 |
| analysistemplates.argoproj.io | at | 定义分析模板,用于自动回滚判断 |
| analysisruns.argoproj.io | ar | 分析运行实例,记录每次分析的结果 |
3.5 Argo Rollouts kubectl 插件安装
Argo Rollouts kubectl 插件提供了丰富的命令来管理 Rollout 资源,包括查看发布进度、手动 promote、回滚等操作。安装该插件可以极大提升操作效率。
3.5.1 安装插件
根据你的操作系统选择对应的安装方式:
| 操作系统 | 安装命令 |
|---|---|
| Linux / macOS (使用 curl) | |
| macOS (使用 brew) | |
| Windows (WSL2) | |
3.5.2 验证插件安装
# 验证插件是否可用
kubectl argo rollouts version
# 查看插件帮助信息
kubectl argo rollouts --help
kubectl argo rollouts version 后,应显示类似 kubectl-argo-rollouts version: v1.6.2 的输出。如果提示 command not found,请检查 /usr/local/bin 是否在 PATH 环境变量中。
3.5.3 启用插件自动补全(可选)
# Bash 自动补全
source <(kubectl argo rollouts completion bash)
echo "source <(kubectl argo rollouts completion bash)" >> ~/.bashrc
# Zsh 自动补全
source <(kubectl argo rollouts completion zsh)
echo "source <(kubectl argo rollouts completion zsh)" >> ~/.zshrc
3.6 环境验证清单
完成以上所有步骤后,请使用以下清单逐一验证你的实验环境是否准备就绪:
| 验证项 | 验证命令 | 预期结果 |
|---|---|---|
| Minikube 集群状态 | minikube status |
host/kubelet/apiserver 均为 Running |
| kubectl 连接 | kubectl cluster-info |
显示 Kubernetes master 和 CoreDNS 地址 |
| Argo Rollouts 控制器 | kubectl get pods -n argo-rollouts |
1 个 Running 状态的 Pod |
| Argo Rollouts CRD | kubectl get crd | grep argoproj.io |
至少包含 rollouts/experiments/analysistemplates/analysisruns |
| kubectl 插件 | kubectl argo rollouts version |
显示插件版本号 |
| Ingress 插件 | kubectl get pods -n ingress-nginx |
1 个 Running 状态的 ingress-nginx-controller Pod |
| Metrics Server | kubectl get pods -n kube-system | grep metrics-server |
1 个 Running 状态的 metrics-server Pod |