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 各控制器之间的协作关系以及策略执行的数据流。
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 后自动执行验证,确保策略引擎持续可用。