3. 实验环境准备:Minikube 集群搭建、kubectl 配置、Argo Rollouts 控制器安装、Argo Rollouts kubectl 插件安装

本章节将指导你从零搭建一套完整的 Argo Rollouts 实验环境。我们将依次完成 Minikube 本地集群的创建、kubectl 命令行工具的配置、Argo Rollouts 控制器在集群内的部署,以及 Argo Rollouts kubectl 插件的安装。这套环境将作为后续所有灰度发布与自动回滚演练的基础平台。

环境要求: 本实验推荐在 Linux 或 macOS 系统上进行。Windows 用户建议使用 WSL2(Windows Subsystem for Linux 2)以获得最佳体验。确保你的机器至少拥有 4GB 可用内存和 20GB 可用磁盘空间。

3.1 实验环境架构总览

下图展示了我们即将搭建的实验环境整体架构。Minikube 作为单节点 Kubernetes 集群运行在本地,Argo Rollouts 控制器作为核心组件部署在集群内,而 kubectl 和 Argo Rollouts 插件则作为客户端工具与集群交互。

实验环境架构总览 本地开发机 kubectl Argo Rollouts 插件 Minikube 客户端 Minikube 集群 (单节点) kube-apiserver 集群控制面 Argo Rollouts 控制器 Deployment 工作负载 Service 网络代理 Rollout / AnalysisRun / Service Argo CRD 资源 交互流程说明 1. kubectl/插件 → API Server 2. API Server → Rollouts 控制器 3. 控制器管理 Rollout 资源 4. Rollout 控制 Deployment

3.2 Minikube 集群搭建

Minikube 是运行本地 Kubernetes 集群的最佳工具之一,特别适合学习和实验场景。我们将使用 Minikube 创建一个包含所有必要组件的单节点集群。

3.2.1 安装 Minikube

根据你的操作系统,选择对应的安装方式:

操作系统 安装命令 / 方式
Linux (x86-64)
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube
macOS (Intel)
brew install minikube
macOS (Apple Silicon)
brew install minikube
Windows (WSL2)
# 在 WSL2 终端中执行
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube

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
预期输出: 等待约 30 秒后,应看到一个名为 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)
curl -LO https://github.com/argoproj/argo-rollouts/releases/latest/download/kubectl-argo-rollouts-linux-amd64
chmod +x kubectl-argo-rollouts-linux-amd64
sudo mv kubectl-argo-rollouts-linux-amd64 /usr/local/bin/kubectl-argo-rollouts
macOS (使用 brew)
brew install argoproj/tap/kubectl-argo-rollouts
Windows (WSL2)
curl -LO https://github.com/argoproj/argo-rollouts/releases/latest/download/kubectl-argo-rollouts-linux-amd64
chmod +x kubectl-argo-rollouts-linux-amd64
sudo mv kubectl-argo-rollouts-linux-amd64 /usr/local/bin/kubectl-argo-rollouts

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