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 实例加载并触发告警。
2.6 环境验证清单
完成安装后,执行以下命令逐项验证环境健康度:
- Kubernetes 集群:
kubectl get nodes显示 Ready 状态 - Argo CD:
kubectl get pods -n argocd所有 Pod 为 Running - Prometheus Operator:
kubectl get crd | grep prometheus显示prometheusrules.monitoring.coreos.com - Grafana:
kubectl get svc -n monitoring prometheus-stack-grafana显示 NodePort 30300 - 数据源连通性: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 提供告警可视化与统一管理界面