2. 环境准备:Kubernetes集群搭建与Kyverno安装
本章节将指导你完成故障演练所需的全部基础环境搭建,包括轻量级Kubernetes集群的创建、Kyverno策略引擎的部署,以及命令行工具链的配置。所有操作均可在单台开发机或CI Runner节点上完成。
2.1 环境概览与组件清单
本次演练环境采用轻量化部署方案,核心组件及版本要求如下表所示:
| 组件 | 推荐版本 | 用途说明 |
|---|---|---|
| K3s | v1.28+ | 轻量级Kubernetes集群,资源占用低,适合CI/CD流水线集成 |
| Kyverno | v1.12+ | Kubernetes原生策略引擎,提供准入控制与资源验证 |
| kubectl | v1.28+ | Kubernetes命令行管理工具 |
| Helm | v3.14+ | Kubernetes包管理器,用于部署Kyverno |
选型建议: 若本地资源充裕(4核8G以上),可选择Minikube替代K3s;Minikube更贴近生产集群行为,但启动速度较慢。本方案以K3s为主,兼顾效率与功能完整性。
2.2 Kubernetes集群搭建(K3s)
K3s是经过CNCF认证的轻量级Kubernetes发行版,安装过程仅需一条命令。以下步骤在Ubuntu 22.04 LTS上验证通过。
2.2.1 安装K3s
# 安装K3s,禁用traefik和servicelb以节省资源
curl -sfL https://get.k3s.io | \
INSTALL_K3S_EXEC="--disable=traefik --disable=servicelb" \
sh -
2.2.2 配置kubectl
K3s安装后自动生成kubeconfig文件,需将其复制到默认路径并设置权限:
# 复制kubeconfig
mkdir -p ~/.kube
sudo cp /etc/rancher/k3s/k3s.yaml ~/.kube/config
sudo chown $USER:$USER ~/.kube/config
# 验证集群状态
kubectl get nodes
kubectl get pods -A
2.2.3 验证集群就绪
执行以下命令确认集群组件正常运行:
kubectl cluster-info
kubectl get componentstatuses
常见问题: 若kubectl提示权限拒绝,请检查~/.kube/config文件属主是否为当前用户;若节点状态为NotReady,请确认系统cgroup版本为v2(K3s v1.28+要求)。
2.3 安装Helm
Helm是部署Kyverno的推荐方式,安装脚本如下:
# 下载并安装Helm
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
# 验证版本
helm version --short
2.4 安装Kyverno
Kyverno以Helm Chart形式部署到集群中,包含准入控制器、Webhook和指标采集组件。
2.4.1 添加Helm仓库并安装
# 添加Kyverno官方Helm仓库
helm repo add kyverno https://kyverno.github.io/kyverno/
helm repo update
# 创建命名空间并安装Kyverno
kubectl create namespace kyverno
helm install kyverno kyverno/kyverno \
--namespace kyverno \
--set admissionController.replicas=1 \
--set backgroundController.replicas=1 \
--set cleanupController.replicas=1 \
--set reportsController.replicas=1
2.4.2 验证Kyverno组件状态
# 查看Pod运行状态
kubectl get pods -n kyverno -w
# 预期输出示例:
# NAME READY STATUS RESTARTS
# kyverno-admission-controller-6d8b9c7f8b-abc12 1/1 Running 0
# kyverno-background-controller-7f9c5d4e9-xyz34 1/1 Running 0
# kyverno-cleanup-controller-5e4f3a2b1c-def56 1/1 Running 0
# kyverno-reports-controller-8a2b3c4d5e-ghi78 1/1 Running 0
2.5 环境架构总览
下图展示了本次故障演练环境的完整组件拓扑与数据流关系:
2.6 环境验证清单
完成上述安装后,请逐项确认以下检查点,确保环境符合演练要求:
- 集群节点就绪:
kubectl get nodes输出显示节点状态为Ready - Kyverno Pod运行:
kubectl get pods -n kyverno显示所有Pod为Running状态 - Webhook注册:
kubectl get mutatingwebhookconfigurations和kubectl get validatingwebhookconfigurations包含kyverno相关条目 - Helm Chart版本:
helm list -n kyverno显示kyverno chart已部署且状态为deployed - 策略API可用:
kubectl api-resources | grep policy输出包含clusterpolicies.kyverno.io和policies.kyverno.io
快速诊断命令: 执行
kubectl run test-pod --image=nginx --restart=Never 创建一个测试Pod,若Pod成功创建且无拒绝事件,说明Kyverno未拦截该资源;后续章节将部署具体策略来验证回滚护栏功能。
2.7 环境清理(可选)
若需重置环境,可执行以下命令彻底清理:
# 卸载Kyverno
helm uninstall kyverno -n kyverno
kubectl delete namespace kyverno
# 卸载K3s
/usr/local/bin/k3s-uninstall.sh
# 清理kubectl配置
rm -f ~/.kube/config
至此,故障演练的基础环境已全部就绪。下一阶段将进入Kyverno策略编写与回滚护栏规则的定义环节。