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。下图展示了多副本架构与流量路径:

Kyverno 高可用组件架构 Kubernetes API Server Service (ClusterIP) Admission Controller 副本 1 (az-1) Admission Controller 副本 2 (az-2) Admission Controller 副本 3 (az-3) 共享 PVC (RWX) 说明:三个副本分布在不同的可用区,通过 ClusterIP Service 负载均衡,共享同一份 PVC 存储 Webhook 证书

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 版本时,建议遵循以下流程:

  1. 备份当前 values:helm get values kyverno -n kyverno-system > kyverno-values-backup.yaml
  2. 升级:helm upgrade kyverno kyverno/kyverno -n kyverno-system --values ha-values.yaml --version <new-version>
  3. 验证升级:检查 Pod 滚动更新状态,确认 Webhook 配置未丢失
  4. 回滚:helm rollback kyverno -n kyverno-system <revision>
升级注意事项:Kyverno 1.12 版本后移除了对 v1beta1 CRD 的支持。如果从旧版本升级,请先确认集群中所有 Kyverno 策略已迁移至 v1 API 版本,否则升级后策略将失效。

至此,Kyverno 的高可用部署已完成,所有组件健康状态已验证通过。下一阶段将进入策略编写与样本抽检环节。