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 环境架构总览

下图展示了本次故障演练环境的完整组件拓扑与数据流关系:

故障演练环境架构图 K3s Kubernetes 集群 Kyverno 策略引擎 准入控制器 (Admission Controller) 后台控制器 (Background Controller) 清理控制器 (Cleanup Controller) 报告控制器 (Reports Controller) ClusterPolicy / Policy 回滚护栏策略定义 kubectl 命令行管理 Helm 包管理器 CI/CD 流水线 Jenkins / GitLab CI 说明: kubectl 和 Helm 通过 K3s API Server 与集群交互;Kyverno 以准入 Webhook 方式拦截资源请求, 根据 ClusterPolicy 规则执行验证或变更操作;CI/CD 流水线通过 kubectl 或 SDK 触发部署。

2.6 环境验证清单

完成上述安装后,请逐项确认以下检查点,确保环境符合演练要求:

  1. 集群节点就绪: kubectl get nodes 输出显示节点状态为 Ready
  2. Kyverno Pod运行: kubectl get pods -n kyverno 显示所有Pod为 Running 状态
  3. Webhook注册: kubectl get mutatingwebhookconfigurations 和 kubectl get validatingwebhookconfigurations 包含kyverno相关条目
  4. Helm Chart版本: helm list -n kyverno 显示kyverno chart已部署且状态为 deployed
  5. 策略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策略编写与回滚护栏规则的定义环节。