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 个工作节点的集群。
- 安装 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
- 创建集群配置文件
kind-config.yaml:
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
- role: worker
- role: worker
- 启动集群:
kind create cluster --name kyverno-demo --config kind-config.yaml
- 验证集群状态:
kubectl cluster-info --context kind-kyverno-demo
kubectl get nodes
预期输出:三个节点均为
Ready 状态,控制平面节点显示 control-plane 角色,工作节点显示 worker 角色。
3.3 使用 Helm 安装 Kyverno
Kyverno 官方推荐使用 Helm Chart 进行部署,便于版本管理和配置更新。请确保已安装 Helm v3 及以上版本。
- 添加 Kyverno Helm 仓库:
helm repo add kyverno https://kyverno.github.io/kyverno/
helm repo update
- 创建命名空间(建议使用独立命名空间):
kubectl create namespace kyverno
- 安装 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 副本。
- 等待 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 环境准备就绪。
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 策略的全部条件。下一阶段将正式进入策略编写与回滚护栏的实现。