4. Kyverno 安装与配置:Helm 安装、自定义配置与启动验证

在生产 Kubernetes 集群中部署 Kyverno 策略引擎,推荐使用 Helm 进行声明式安装。本章将详细讲解从 Helm 仓库配置、自定义资源限制与高可用设置,到策略引擎启动验证的完整流程。

4.1 使用 Helm 安装 Kyverno

Kyverno 官方维护的 Helm Chart 位于 https://kyverno.github.io/kyverno/。安装前需确保集群版本 ≥ 1.16,且已安装 Helm v3。

前置检查: 执行 kubectl version --short 确认集群版本;执行 helm version 确认 Helm 版本。

4.1.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 \
  --create-namespace

安装完成后,Kyverno 会启动以下核心组件:

组件名称 功能描述 默认副本数
kyverno-admission-controller 处理准入 Webhook 请求,执行策略校验与变更 2
kyverno-background-controller 执行定时/后台策略扫描(如报告生成、资源清理) 1
kyverno-reports-controller 管理集群策略报告与资源策略报告 1
kyverno-cleanup-controller 处理基于策略的资源清理任务(可选) 1

4.2 自定义配置:资源限制与高可用

生产环境必须为 Kyverno 组件设置合理的资源限制,并启用高可用部署。以下是一个完整的 values.yaml 自定义配置示例。

4.2.1 资源限制配置

# values-custom.yaml
admissionController:
  replicas: 3
  resources:
    requests:
      cpu: 500m
      memory: 512Mi
    limits:
      cpu: 1000m
      memory: 1Gi
  podAntiAffinity:
    preferredDuringSchedulingIgnoredDuringExecution:
      - weight: 100
        podAffinityTerm:
          labelSelector:
            matchExpressions:
              - key: app.kubernetes.io/component
                operator: In
                values:
                  - admission-controller
          topologyKey: kubernetes.io/hostname

backgroundController:
  replicas: 2
  resources:
    requests:
      cpu: 200m
      memory: 256Mi
    limits:
      cpu: 500m
      memory: 512Mi

reportsController:
  replicas: 2
  resources:
    requests:
      cpu: 200m
      memory: 256Mi
    limits:
      cpu: 500m
      memory: 512Mi

cleanupController:
  enabled: true
  replicas: 2
  resources:
    requests:
      cpu: 100m
      memory: 128Mi
    limits:
      cpu: 300m
      memory: 256Mi

4.2.2 高可用关键配置说明

  • 副本数 ≥ 2:admission-controller 建议 3 副本,其余控制器 2 副本。
  • Pod 反亲和性:确保同一组件的 Pod 分布在不同节点,避免单点故障。
  • 资源预留:requests 保证调度,limits 防止内存泄漏影响集群。
  • 清理控制器:启用 cleanupController.enabled: true 以支持策略驱动的资源清理。
注意: 如果集群节点数少于 3,请将 admission-controller 的 replicas 调整为 2,并移除反亲和性硬约束,避免 Pod 无法调度。

4.2.3 使用自定义配置安装

helm upgrade --install kyverno kyverno/kyverno \
  --namespace kyverno \
  --values values-custom.yaml

4.3 策略引擎启动验证

安装完成后,需验证 Kyverno 策略引擎是否正常运行。以下为推荐的验证步骤。

4.3.1 验证 Pod 状态

kubectl get pods -n kyverno

# 期望输出示例(所有 Pod 均为 Running 状态)
NAME                                           READY   STATUS    RESTARTS   AGE
kyverno-admission-controller-6f7b8c9d4d-abc12   1/1     Running   0          2m
kyverno-admission-controller-6f7b8c9d4d-def34   1/1     Running   0          2m
kyverno-admission-controller-6f7b8c9d4d-ghi56   1/1     Running   0          2m
kyverno-background-controller-5d4e6f7a8b-jkl78  1/1     Running   0          2m
kyverno-reports-controller-9b8c7d6e5f-mno90     1/1     Running   0          2m
kyverno-cleanup-controller-2a3b4c5d6e-pqr01     1/1     Running   0          2m

4.3.2 验证 Webhook 配置

kubectl get validatingwebhookconfigurations -l webhook.kyverno.io/managed-by=kyverno
kubectl get mutatingwebhookconfigurations -l webhook.kyverno.io/managed-by=kyverno

# 期望输出:至少存在一个 ValidatingWebhookConfiguration 和一个 MutatingWebhookConfiguration

4.3.3 部署测试策略验证引擎响应

# 创建一个简单的测试策略:要求所有 Pod 必须包含 app 标签
cat <
验证成功标志: 不带 app 标签的 Pod 创建被拒绝,并显示类似 policy require-app-label/check-app-label for resource Pod/test-pod: validation failure 的错误信息。

4.4 Kyverno 组件架构与数据流

下图展示了 Kyverno 各控制器之间的协作关系以及策略执行的数据流。

Kyverno 组件架构与策略执行数据流 Kubernetes API Server Admission Controller Background Controller Reports Controller Cleanup Controller 策略存储 (CRDs) 数据流说明 ① 准入请求 → Admission ② 后台扫描 → Background ③ 报告聚合 → Reports ④ 清理触发 → Cleanup

4.5 安装验证清单

完成安装后,建议对照以下清单逐项确认,确保策略引擎处于可用状态。

检查项 验证命令 期望结果
Pod 运行状态 kubectl get pods -n kyverno 所有 Pod 均为 Running,READY 为 1/1
Webhook 注册 kubectl get validatingwebhookconfigurations 至少存在一个 Kyverno 管理的 Webhook
策略 CRD 可用 kubectl get crd | grep kyverno 显示 ClusterPolicy、Policy、Report 等 CRD
策略执行测试 部署测试策略并创建违规资源 违规资源被拒绝,返回策略错误信息
日志无异常 kubectl logs -n kyverno deployment/kyverno-admission-controller 无 ERROR 级别日志,无频繁重启
生产建议: 将验证清单集成到 CI/CD 流水线中,每次升级 Kyverno 后自动执行验证,确保策略引擎持续可用。