2. 环境准备:安装 Kubernetes 集群、Argo CD 与 Grafana 可观测栈

本章将搭建完整的实验环境,包含三个核心层:Kubernetes 集群(运行时底座)、Argo CD(GitOps 控制器)、Grafana + Prometheus Operator(可观测平台)。环境全部运行在单机开发节点上,适合本地实验与课程练习。

2.1 环境总览与组件版本

下表列出本课程使用的核心组件及推荐版本,确保各组件间的兼容性。

组件 版本 说明
K3s v1.28.7+k3s1 轻量级 Kubernetes,资源占用低,适合本地实验
Argo CD v2.11.3 GitOps 工具,管理告警规则配置的声明式部署
Prometheus Operator v0.73.2 管理 Prometheus 实例与告警规则 CRD
Grafana 10.4.2 可视化面板与告警管理界面
Helm v3.14.3 Kubernetes 包管理器,用于安装 Operator
kubectl v1.28.7 Kubernetes 命令行工具
版本选择说明:K3s 相比 Minikube 启动更快、内存占用更低,且原生支持 Helm 和 Traefik Ingress,适合在 2C4G 的虚拟机或 WSL2 上运行。如果使用 Minikube,请确保 --driver=docker 并分配至少 4GB 内存。

2.2 安装 Kubernetes 集群(K3s)

K3s 安装过程极简,一条命令即可完成控制平面与工作节点的合并部署。

# 安装 K3s 主节点(同时作为 worker)
curl -sfL https://get.k3s.io | INSTALL_K3S_VERSION=v1.28.7+k3s1 sh -s - \
  --disable traefik \
  --write-kubeconfig-mode 644

# 验证集群状态
sudo k3s kubectl get nodes
# 输出示例:
# NAME     STATUS   ROLES                  AGE   VERSION
# ubuntu   Ready    control-plane,master   2m    v1.28.7+k3s1

# 配置 kubectl 环境
mkdir -p ~/.kube
sudo cp /etc/rancher/k3s/k3s.yaml ~/.kube/config
sudo chown $USER:$USER ~/.kube/config
export KUBECONFIG=~/.kube/config
kubectl cluster-info
验证要点:执行 kubectl get pods -A 确认 coredns、local-path-provisioner 等系统组件处于 Running 状态。如果使用 Minikube,请运行 minikube start --cpus=2 --memory=4096 并确保 kubectl config use-context minikube。

2.3 安装 Helm 与 Argo CD

Argo CD 通过 Helm chart 部署到 argocd 命名空间,后续所有 GitOps 应用都将通过它同步。

# 安装 Helm
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
helm version

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

# 创建命名空间并安装 Argo CD
kubectl create namespace argocd
helm install argocd argo/argo-cd \
  --namespace argocd \
  --version 5.51.6 \
  --set server.service.type=NodePort \
  --set server.service.nodePortHttp=30080

# 等待所有 Pod 就绪
kubectl wait --for=condition=Ready pods --all -n argocd --timeout=180s

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

Argo CD 安装完成后,通过 http://<节点IP>:30080 访问 Web UI,用户名为 admin。

端口冲突处理:如果 30080 端口被占用,修改 nodePortHttp 为其他端口(如 30081),或改用 --set server.service.type=ClusterIP 配合 kubectl port-forward 访问。

2.4 安装 Prometheus Operator 与 Grafana

使用 kube-prometheus-stack Helm chart 一键部署 Prometheus Operator、Prometheus、Alertmanager 和 Grafana。该 chart 是社区最成熟的可观测性方案。

# 添加 Prometheus 社区 Helm 仓库
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo update

# 创建监控命名空间
kubectl create namespace monitoring

# 安装 kube-prometheus-stack
helm install prometheus-stack prometheus-community/kube-prometheus-stack \
  --namespace monitoring \
  --version 56.0.0 \
  --set grafana.service.type=NodePort \
  --set grafana.service.nodePort=30300 \
  --set prometheus.service.type=NodePort \
  --set prometheus.service.nodePort=30900

# 等待所有 Pod 就绪
kubectl wait --for=condition=Ready pods --all -n monitoring --timeout=300s

# 查看部署状态
kubectl get pods -n monitoring

安装完成后,Grafana 通过 http://<节点IP>:30300 访问,默认管理员账号为 admin,密码为 prom-operator。

快速验证:访问 Grafana → 左侧菜单 "Alerting" → "Alert rules",确认 Prometheus 数据源已自动配置。如果看到 "No alert rules defined",说明环境就绪,后续章节将使用 Argo CD 管理这些规则。

2.5 环境架构总览

下图展示三个核心组件之间的交互关系:Argo CD 从 Git 仓库拉取告警规则配置,通过 Prometheus Operator 的 CRD 写入 Kubernetes,最终由 Prometheus 实例加载并触发告警。

环境组件架构与数据流 Git 仓库 告警规则 YAML Argo CD GitOps 同步 Prometheus Operator CRD 控制器 Prometheus 告警评估引擎 Grafana 告警可视化 数据流说明: ① Argo CD 从 Git 仓库拉取告警规则 → ② 写入 PrometheusRule CRD → ③ Operator 生成 Prometheus 配置 ④ Prometheus 加载规则并评估 → ⑤ Grafana 通过数据源展示告警状态

2.6 环境验证清单

完成安装后,执行以下命令逐项验证环境健康度:

  1. Kubernetes 集群:kubectl get nodes 显示 Ready 状态
  2. Argo CD:kubectl get pods -n argocd 所有 Pod 为 Running
  3. Prometheus Operator:kubectl get crd | grep prometheus 显示 prometheusrules.monitoring.coreos.com
  4. Grafana:kubectl get svc -n monitoring prometheus-stack-grafana 显示 NodePort 30300
  5. 数据源连通性:Grafana Web UI → Configuration → Data Sources → Prometheus 状态为 "OK"
排障提示:如果 Grafana 数据源显示 "Error connecting to Prometheus",检查 kubectl get svc -n monitoring prometheus-stack-kube-prom-prometheus 的 ClusterIP 是否正确,以及网络策略是否允许跨命名空间访问。

2.7 本章小结

至此,实验环境已全部就绪:

  • K3s 集群提供轻量 Kubernetes 运行时
  • Argo CD 作为 GitOps 控制器,负责从 Git 同步告警规则配置
  • Prometheus Operator 管理 PrometheusRule CRD,实现告警规则的声明式管理
  • Grafana 提供告警可视化与统一管理界面