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 集群中的核心组件架构与数据流关系:
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 状态为 Runningargocd version --client显示 v2.10.xargocd 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 |