3. 安装与部署:Helm 安装 Kyverno、配置高可用、验证组件健康状态
在生产环境中部署 Kyverno 时,推荐使用 Helm 进行安装,以便于版本管理、参数化配置和后续升级。本章将演示从 Helm 仓库添加、命名空间创建、高可用配置到组件健康状态验证的完整流程。
3.1 前置条件与 Helm 仓库配置
在安装前,请确保集群满足以下最低要求:
- Kubernetes 版本:v1.24 及以上(Kyverno 1.12+ 要求 v1.26+)
- Helm 版本:v3.8+
- 集群资源:至少 2 个 Worker 节点,每个节点 2 核 CPU、4 GB 内存
- 存储类:支持 ReadWriteMany 的存储类(用于高可用模式下的 Webhook 证书持久化)
生产建议:建议在独立的命名空间(如
kyverno-system)中部署 Kyverno,避免与业务负载混用。
添加 Kyverno 官方 Helm 仓库并更新索引:
helm repo add kyverno https://kyverno.github.io/kyverno/
helm repo update
3.2 Helm 安装 Kyverno(高可用模式)
高可用部署需要启用多个副本、Pod 反亲和性以及持久化存储。以下为推荐的 values 配置片段:
# ha-values.yaml
replicaCount: 3
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: app.kubernetes.io/name
operator: In
values:
- kyverno
topologyKey: "kubernetes.io/hostname"
persistence:
enabled: true
storageClass: "your-rwx-storage-class"
accessMode: ReadWriteMany
size: 1Gi
webhooks:
failurePolicy: Fail
timeoutSeconds: 10
config:
resourceFilters:
- "[Event,*,*]"
- "[*,kube-system,*]"
- "[*,kube-public,*]"
执行安装命令:
helm install kyverno kyverno/kyverno \
--namespace kyverno-system \
--create-namespace \
--values ha-values.yaml \
--version 3.2.6
注意:如果集群没有默认的
StorageClass 支持 ReadWriteMany,请先部署 NFS 或 Longhorn 等 CSI 驱动,否则 Pod 将处于 Pending 状态。
3.3 组件架构与高可用设计
Kyverno 高可用部署包含三个核心组件:Admission Controller、Reports Controller 和 Background Controller。下图展示了多副本架构与流量路径:
3.4 验证组件健康状态
安装完成后,执行以下步骤验证所有组件正常运行:
3.4.1 检查 Pod 状态
kubectl get pods -n kyverno-system -o wide
预期输出应包含以下三个 Deployment 的 Pod,且全部处于 Running 状态:
| 组件 | Deployment 名称 | 预期副本数 | 说明 |
|---|---|---|---|
| Admission Controller | kyverno-admission-controller | 3 | 处理 Mutating / Validating Webhook 请求 |
| Reports Controller | kyverno-reports-controller | 2 | 生成策略报告和集群策略报告 |
| Background Controller | kyverno-background-controller | 2 | 执行后台扫描和周期性策略评估 |
3.4.2 验证 Webhook 配置
kubectl get mutatingwebhookconfigurations -l webhook.kyverno.io/managed-by=kyverno
kubectl get validatingwebhookconfigurations -l webhook.kyverno.io/managed-by=kyverno
应至少看到 kyverno-resource-mutating-webhook-cfg 和 kyverno-resource-validating-webhook-cfg 两个资源。
3.4.3 检查 Service 与 Endpoint
kubectl get svc -n kyverno-system
kubectl get endpoints -n kyverno-system kyverno-svc
Endpoint 的 ADDRESSES 列应显示所有 Running Pod 的 IP 地址。
3.4.4 查看 Kyverno 自身日志
kubectl logs -n kyverno-system -l app.kubernetes.io/name=kyverno --tail=50
正常启动日志应包含以下关键信息:
"msg"="starting" "kind"="admission-controller""msg"="webhook server started""msg"="leader election started"
健康检查速查表:如果 Pod 反复 CrashLoopBackOff,优先检查
--admission-controller-certs-dir 对应的证书目录权限,以及 PVC 是否处于 Bound 状态。
3.5 高可用配置关键参数对比
以下表格总结了单副本与高可用部署的核心差异:
| 配置项 | 单副本(开发/测试) | 高可用(生产) |
|---|---|---|
replicaCount |
1 | 3 |
podAntiAffinity |
未设置 | requiredDuringScheduling |
persistence.enabled |
false |
true(RWX) |
webhooks.failurePolicy |
Ignore |
Fail |
| Leader Election | 不启用 | 自动启用(基于 ConfigMap) |
| 推荐场景 | 功能验证、CI/CD | 生产环境、合规审计 |
3.6 升级与回滚策略
使用 Helm 管理 Kyverno 版本时,建议遵循以下流程:
- 备份当前 values:
helm get values kyverno -n kyverno-system > kyverno-values-backup.yaml - 升级:
helm upgrade kyverno kyverno/kyverno -n kyverno-system --values ha-values.yaml --version <new-version> - 验证升级:检查 Pod 滚动更新状态,确认 Webhook 配置未丢失
- 回滚:
helm rollback kyverno -n kyverno-system <revision>
升级注意事项:Kyverno 1.12 版本后移除了对
v1beta1 CRD 的支持。如果从旧版本升级,请先确认集群中所有 Kyverno 策略已迁移至 v1 API 版本,否则升级后策略将失效。
至此,Kyverno 的高可用部署已完成,所有组件健康状态已验证通过。下一阶段将进入策略编写与样本抽检环节。