2. 环境准备:Kubernetes集群搭建、Kyverno安装与配置、Prometheus与Grafana部署
本章是课程的基础设施搭建环节。你将依次完成:一个功能完整的Kubernetes集群、Kyverno策略引擎、以及Prometheus+Grafana监控栈的部署。所有操作均面向生产级配置,并为后续“缓存命中巡检”实验提供稳定的运行环境。
2.1 整体环境架构
下图展示了三个核心组件在集群内的部署关系与数据流向。Kyverno作为动态准入控制器拦截资源请求,Prometheus采集Kyverno指标,Grafana负责可视化巡检结果。
2.2 Kubernetes集群搭建
本课程使用 kubeadm 部署一个 1 控制平面 + 2 工作节点的集群。最低要求:控制平面 2 核 4G,工作节点 2 核 4G,操作系统 Ubuntu 22.04 LTS。
2.2.1 节点规格与角色
| 主机名 | 角色 | vCPU | 内存 | 磁盘 |
|---|---|---|---|---|
| master-1 | 控制平面 | 2 | 4 GB | 40 GB |
| node-1 | 工作节点 | 2 | 4 GB | 40 GB |
| node-2 | 工作节点 | 2 | 4 GB | 40 GB |
2.2.2 部署步骤(关键命令)
- 所有节点:安装容器运行时(containerd)、kubelet、kubeadm、kubectl,并执行
kubeadm init前的系统配置。 - 控制平面:执行
kubeadm init --pod-network-cidr=10.244.0.0/16,初始化集群。 - 所有节点:安装 CNI 插件(本课程使用 Flannel):
kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml。 - 工作节点:执行
kubeadm join命令加入集群。
验证集群状态: 使用
kubectl get nodes -o wide 确认所有节点处于 Ready 状态,且版本一致。
2.3 Kyverno安装与配置
Kyverno 通过 Helm Chart 部署到 kyverno 命名空间。本课程使用 Kyverno v1.12+,支持缓存命中指标暴露。
2.3.1 安装步骤
# 添加 Kyverno Helm 仓库
helm repo add kyverno https://kyverno.github.io/kyverno/
helm repo update
# 创建命名空间并安装
kubectl create namespace kyverno
helm install kyverno kyverno/kyverno \
--namespace kyverno \
--set features.policyReports.enabled=true \
--set admissionController.metrics.enabled=true \
--set admissionController.metrics.serviceMonitor.enabled=true
2.3.2 关键配置参数
| 参数 | 默认值 | 说明 |
|---|---|---|
admissionController.metrics.enabled |
false |
启用 Prometheus 指标暴露,必须设为 true |
admissionController.metrics.serviceMonitor.enabled |
false |
自动创建 ServiceMonitor 供 Prometheus Operator 发现 |
features.policyReports.enabled |
true |
启用策略报告生成,便于巡检审计 |
admissionController.replicas |
1 |
生产环境建议设为 2 或 3 保证高可用 |
2.3.3 验证安装
# 检查 Pod 状态
kubectl get pods -n kyverno -l app.kubernetes.io/name=kyverno
# 检查 Kyverno 是否正常响应
kubectl get validatingwebhookconfigurations -l app.kubernetes.io/name=kyverno
注意: 如果集群中已存在其他准入控制器(如 OPA Gatekeeper),请确保 Kyverno 的 webhook 配置不会与之冲突。建议在独立的命名空间部署,并检查
MutatingWebhookConfiguration 和 ValidatingWebhookConfiguration 的 objectSelector 规则。
2.4 Prometheus与Grafana部署
本课程使用 kube-prometheus-stack Helm Chart 一键部署 Prometheus、Alertmanager 和 Grafana。该 Chart 会自动创建 ServiceMonitor 并抓取 Kyverno 指标。
2.4.1 部署步骤
# 添加 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 prometheus-community/kube-prometheus-stack \
--namespace monitoring \
--set grafana.adminPassword=admin123 \
--set prometheus.prometheusSpec.serviceMonitorSelectorNilUsesHelmValues=false
2.4.2 关键参数说明
| 参数 | 值 | 作用 |
|---|---|---|
grafana.adminPassword |
admin123 |
Grafana 管理员密码(生产环境请修改) |
prometheus.prometheusSpec.serviceMonitorSelectorNilUsesHelmValues |
false |
允许 Prometheus 发现非 Helm 安装的 ServiceMonitor(如 Kyverno 创建的) |
2.4.3 验证监控链路
- 确认 Prometheus 目标中已包含 Kyverno:访问 Prometheus UI(
kubectl port-forward -n monitoring svc/prometheus-operated 9090),在 Targets 页面搜索kyverno。 - 确认 Grafana 可访问:
kubectl port-forward -n monitoring svc/prometheus-grafana 3000:80,浏览器打开http://localhost:3000,使用admin/admin123登录。 - 在 Grafana 中导入 Kyverno 官方仪表盘(ID:
17626),验证缓存命中相关指标是否正常显示。
2.5 环境验证清单
完成上述部署后,请逐项确认以下检查点,确保环境就绪:
| 检查项 | 验证命令 / 方法 | 预期结果 |
|---|---|---|
| 集群节点状态 | kubectl get nodes |
所有节点 Ready |
| Kyverno Pod 运行 | kubectl get pods -n kyverno |
所有 Pod Running |
| Kyverno 指标端点 | kubectl port-forward -n kyverno svc/kyverno-svc 8000:8000 后访问 localhost:8000/metrics |
返回包含 kyverno_admission_requests_total 等指标 |
| Prometheus 目标 | Prometheus UI → Status → Targets | Kyverno 目标状态为 UP |
| Grafana 数据源 | Grafana UI → Configuration → Data Sources | Prometheus 数据源状态 Default & Healthy |
环境就绪标志: 当你在 Grafana 中看到 Kyverno 的
kyverno_admission_requests_total 和 kyverno_admission_request_duration_seconds 等指标随时间变化时,说明整个监控链路已完全打通,可以进入下一章的策略开发环节。