3. 环境准备:安装 Minikube 或 Kind 集群、使用 Helm 安装 Kyverno、验证安装状态

在开始实施策略即代码与回滚护栏之前,需要搭建一个完整的实验环境。本章将指导你完成本地 Kubernetes 集群的创建、Kyverno 的 Helm 部署以及安装后的健康检查。环境准备是后续所有策略实验的基础,请按步骤逐一完成。

3.1 集群选择:Minikube vs Kind

本地开发环境通常选择 Minikube 或 Kind 作为 Kubernetes 集群。两者各有适用场景,下表从关键维度进行对比:

特性 Minikube Kind (Kubernetes in Docker)
底层技术 虚拟机(支持 Hyper-V、VirtualBox、KVM) Docker 容器作为节点
启动速度 较慢(需启动 VM) 较快(秒级启动容器)
资源占用 较高(VM 开销) 较低(共享 Docker 守护进程)
多节点支持 支持(需配置) 原生支持(配置文件定义)
持久化存储 内置 CSI 驱动 需额外配置
适用场景 完整功能测试、存储验证 CI/CD 流水线、快速原型
推荐选择:本课程后续实验涉及策略变更与回滚测试,建议使用 Kind 以获取更快的集群重建速度。若你已有 Minikube 环境,同样可以完成所有实验。

3.2 安装 Kind 集群

以下步骤以 Kind 为例,创建包含 1 个控制平面节点和 2 个工作节点的集群。

  1. 安装 Kind CLI(若未安装):
# macOS (Homebrew)
brew install kind

# Linux (curl 下载)
curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.20.0/kind-linux-amd64
chmod +x ./kind
sudo mv ./kind /usr/local/bin/kind

# 验证安装
kind version
  1. 创建集群配置文件 kind-config.yaml:
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
  - role: control-plane
  - role: worker
  - role: worker
  1. 启动集群:
kind create cluster --name kyverno-demo --config kind-config.yaml
  1. 验证集群状态:
kubectl cluster-info --context kind-kyverno-demo
kubectl get nodes
预期输出:三个节点均为 Ready 状态,控制平面节点显示 control-plane 角色,工作节点显示 worker 角色。

3.3 使用 Helm 安装 Kyverno

Kyverno 官方推荐使用 Helm Chart 进行部署,便于版本管理和配置更新。请确保已安装 Helm v3 及以上版本。

  1. 添加 Kyverno Helm 仓库:
helm repo add kyverno https://kyverno.github.io/kyverno/
helm repo update
  1. 创建命名空间(建议使用独立命名空间):
kubectl create namespace kyverno
  1. 安装 Kyverno(使用最新稳定版本):
helm install kyverno kyverno/kyverno \
  --namespace kyverno \
  --create-namespace \
  --version v3.0.1 \
  --set replicaCount=2 \
  --set webhookCleanup.enabled=true
注意:--set replicaCount=2 用于生产级高可用部署,单节点实验环境可省略此参数。若集群资源有限,建议保持默认 1 副本。
  1. 等待 Pod 就绪:
kubectl wait --for=condition=Ready pods --all -n kyverno --timeout=120s

3.4 验证安装状态

安装完成后,需从多个维度验证 Kyverno 是否正常运行。以下验证步骤可作为后续故障排查的基准。

3.4.1 检查 Pod 与 Service

kubectl get pods -n kyverno
kubectl get svc -n kyverno

预期输出应包含以下组件:

组件名称 类型 预期状态
kyverno-admission-controller Deployment Running / Ready 1/1
kyverno-background-controller Deployment Running / Ready 1/1
kyverno-cleanup-controller Deployment Running / Ready 1/1
kyverno-reports-controller Deployment Running / Ready 1/1
kyverno-svc Service ClusterIP 分配

3.4.2 检查 Webhook 配置

Kyverno 通过 Admission Webhook 拦截资源请求,验证 Webhook 是否注册成功:

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

预期应看到至少一个 ValidatingWebhookConfiguration 和一个 MutatingWebhookConfiguration,且状态为 Active。

3.4.3 验证 Kyverno API 资源

检查自定义资源定义(CRD)是否已注册:

kubectl api-resources | grep kyverno

应包含以下核心资源:

  • clusterpolicies.kyverno.io — 集群策略
  • policies.kyverno.io — 命名空间级策略
  • policyreports.kyverno.io — 策略报告
  • clusterpolicyreports.kyverno.io — 集群策略报告
  • backgroundscanreports.kyverno.io — 后台扫描报告

3.4.4 端到端测试:应用一条简单策略

创建一条测试策略,验证 Kyverno 能否正常拦截和修改资源:

cat <<EOF | kubectl apply -f -
apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
  name: require-labels
spec:
  validationFailureAction: Audit
  rules:
  - name: check-required-labels
    match:
      any:
      - resources:
          kinds:
          - Pod
    validate:
      message: "Pod 必须包含 'app.kubernetes.io/name' 标签"
      pattern:
        metadata:
          labels:
            app.kubernetes.io/name: "?*"
EOF

查看策略状态:

kubectl get clusterpolicy require-labels -o wide

若 READY 列为 true,说明 Kyverno 已成功加载并激活策略。

验证完成标志:所有 Pod 处于 Running 状态、Webhook 配置 Active、CRD 资源可查询、测试策略 Ready。满足以上四点,即表示 Kyverno 环境准备就绪。
Kyverno 安装架构与验证流程 Kind 集群 (kyverno-demo) 控制平面节点 工作节点 1 工作节点 2 命名空间: kyverno (Admission Controller / Background Controller / Reports Controller) 验证步骤 Pod & Service 检查 Webhook 配置检查 CRD 资源检查 策略测试 ✅ 环境就绪:可开始策略实验 说明:所有验证步骤通过后,Kyverno 即可正常执行策略的 mutate、validate、generate 操作

3.5 常见问题与排查

安装过程中可能遇到以下典型问题,提前了解可快速定位:

现象 可能原因 解决方案
Pod 一直处于 Pending 状态 集群资源不足(CPU/内存) 增加 Kind 节点资源或减少 Kyverno 副本数
Webhook 配置未创建 Helm 安装参数遗漏或版本不兼容 检查 Helm values,重新执行 helm upgrade
策略应用后无响应 Admission Controller 未就绪 检查 kyverno-admission-controller 日志
CRD 资源查询为空 Kyverno 安装未完成 等待 30 秒后重试,或查看 Helm 安装日志
重要提示:若使用 Minikube,请确保已启用 ingress 插件并分配足够内存(建议 4GB 以上)。Kyverno 的 Admission Controller 需要至少 256MB 内存和 0.5 核 CPU。

完成以上所有步骤后,你的本地环境已具备运行 Kyverno 策略的全部条件。下一阶段将正式进入策略编写与回滚护栏的实现。