2. 环境准备:Kubernetes集群搭建(Minikube/K3s)、安装Argo CD、配置kubectl与argocd CLI

本章是课程实践的基础环节。你将完成本地Kubernetes集群的搭建、Argo CD的安装部署,以及命令行工具链的配置。我们提供Minikube与K3s两种方案,你可以根据本地资源灵活选择。

2.1 环境概览与工具链

本课程实验环境的核心组件如下表所示。所有组件均采用当前稳定版本,确保与Argo CD v2.10+兼容。

组件 版本要求 用途
Kubernetes 集群 v1.25+ 运行Argo CD及目标应用
Minikube v1.32+ 本地单节点集群(推荐)
K3s v1.28+ 轻量级集群(资源受限时选用)
kubectl v1.28+ Kubernetes命令行管理
argocd CLI v2.10+ Argo CD命令行管理
Helm v3.12+ Argo CD安装包管理
推荐选择: 如果你的宿主机内存 ≥ 8GB,优先使用 Minikube;若内存 ≤ 4GB 或使用虚拟机/树莓派,选择 K3s。两种方案在后续章节中的操作完全一致。

2.2 Kubernetes集群搭建

方案A:使用Minikube

Minikube 是本地运行 Kubernetes 的最快方式。执行以下命令完成安装与启动:

# 安装 Minikube(Linux/macOS)
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube

# 启动集群,指定驱动与资源
minikube start --driver=docker --cpus=2 --memory=4096 --kubernetes-version=v1.28.3

# 验证集群状态
kubectl cluster-info
kubectl get nodes

启动成功后,kubectl 上下文自动切换至 minikube。你可以通过 minikube dashboard 启动 Web 控制台。

方案B:使用K3s

K3s 是 Rancher 出品的轻量级 Kubernetes 发行版,适合资源受限环境:

# 安装 K3s(使用内置 containerd)
curl -sfL https://get.k3s.io | INSTALL_K3S_VERSION=v1.28.3+k3s1 sh -s - --write-kubeconfig-mode 644

# 配置 kubectl 使用 K3s 的 kubeconfig
export KUBECONFIG=/etc/rancher/k3s/k3s.yaml

# 验证集群
kubectl get nodes
注意: K3s 默认使用 Traefik 作为 Ingress Controller,可能与 Argo CD 的 Ingress 配置冲突。建议在安装 Argo CD 前先禁用 Traefik:curl -sfL https://get.k3s.io | sh -s - --disable=traefik。

2.3 安装Argo CD

我们使用官方 Helm Chart 安装 Argo CD,便于后续版本管理与配置覆盖。创建命名空间并执行安装:

# 创建命名空间
kubectl create namespace argocd

# 添加 Helm 仓库
helm repo add argo https://argoproj.github.io/argo-helm
helm repo update

# 安装 Argo CD(生产建议指定版本)
helm install argocd argo/argo-cd \
  --namespace argocd \
  --version 5.51.6 \
  --set server.service.type=NodePort \
  --set configs.params."server\.insecure"=true

安装完成后,检查所有 Pod 是否处于 Running 状态:

kubectl get pods -n argocd
# 预期输出:argocd-server-xxx, argocd-redis-xxx, argocd-repo-server-xxx 等

下图展示了 Argo CD 在 Kubernetes 集群中的核心组件架构与数据流关系:

Argo CD 组件架构与数据流 Argo CD 核心组件架构 Kubernetes Cluster (argocd namespace) argocd-server argocd-repo-server argocd-application-controller argocd-redis 说明:API Server 接收用户请求,Repo Server 拉取 Git 仓库,Application Controller 确保集群状态与 Git 一致,Redis 提供缓存与锁服务

2.4 获取Argo CD管理员密码

Argo CD 安装后会自动生成一个随机管理员密码,存储在 Secret 中。执行以下命令获取:

# 获取初始密码
kubectl get secret argocd-initial-admin-secret \
  -n argocd \
  -o jsonpath="{.data.password}" | base64 -d

# 输出示例:p8sT7kF2mN1qR4vX

用户名固定为 admin。建议首次登录后立即修改密码:

argocd account update-password --current-password <旧密码> --new-password <新密码>

2.5 配置kubectl与argocd CLI

2.5.1 安装kubectl

kubectl 是操作 Kubernetes 集群的核心工具。如果尚未安装,请执行:

# Linux (amd64)
curl -LO "https://dl.k8s.io/release/v1.28.3/bin/linux/amd64/kubectl"
chmod +x kubectl
sudo mv kubectl /usr/local/bin/

# 验证版本
kubectl version --client

2.5.2 安装argocd CLI

argocd CLI 提供对 Argo CD 的完整管理能力,包括应用同步、回滚、项目配置等:

# Linux (amd64)
curl -sSL -o argocd-linux-amd64 https://github.com/argoproj/argo-cd/releases/download/v2.10.7/argocd-linux-amd64
sudo install -m 555 argocd-linux-amd64 /usr/local/bin/argocd
rm argocd-linux-amd64

# 验证安装
argocd version --client

2.5.3 登录Argo CD

首先获取 Argo CD API Server 的访问地址:

# Minikube 环境
minikube service argocd-server -n argocd --url

# K3s 环境(NodePort)
kubectl get svc argocd-server -n argocd -o jsonpath='{.spec.ports[0].nodePort}'
# 访问地址:https://<节点IP>:<NodePort>

使用 CLI 登录:

argocd login <SERVER_ADDRESS> --username admin --password <初始密码> --insecure

# 验证登录状态
argocd account get-user-info
配置完成检查清单:
  • kubectl cluster-info 返回正常
  • kubectl get pods -n argocd 所有 Pod 状态为 Running
  • argocd version --client 显示 v2.10.x
  • argocd account get-user-info 返回当前用户信息

2.6 环境验证与故障排查

完成上述步骤后,执行一个快速端到端验证,确保所有组件协同工作:

# 1. 创建一个测试应用(Guestbook 示例)
argocd app create guestbook \
  --repo https://github.com/argoproj/argocd-example-apps.git \
  --path guestbook \
  --dest-server https://kubernetes.default.svc \
  --dest-namespace default

# 2. 同步应用
argocd app sync guestbook

# 3. 查看应用状态
argocd app get guestbook

# 4. 清理测试应用
argocd app delete guestbook

常见问题及解决方案:

问题现象 可能原因 解决方案
argocd login 连接超时 Service 类型为 ClusterIP,无法从外部访问 执行 kubectl port-forward svc/argocd-server -n argocd 8080:443,然后登录 localhost:8080
argocd app sync 报错 rpc error argocd-repo-server 无法访问 Git 仓库 检查网络代理或配置 configmap argocd-cm 中的 repositories 字段
Pod 处于 CrashLoopBackOff 资源不足或配置错误 执行 kubectl describe pod -n argocd <pod-name> 查看 Events