4. Cilium Helm Chart 安装:添加仓库、配置参数、部署与验证
本章将完整演示如何通过 Helm 将 Cilium 部署到 Kubernetes 集群。整个过程分为四个阶段:添加官方 Helm 仓库、编写自定义 Values 参数、执行安装命令、以及验证组件运行状态。正确的安装是后续资源配额与性能调优的基础,每一步都需要严谨对待。
前置条件:确保已安装 Helm v3.8+ 和 kubectl,并拥有对目标集群的 admin 权限。集群节点需满足 Cilium 内核要求(Linux 4.19+ 或 5.x 系列)。
4.1 添加 Cilium Helm 仓库
首先添加官方 Helm 仓库并更新索引,确保获取最新的 Chart 版本。
# 添加 Cilium 官方 Helm 仓库
helm repo add cilium https://helm.cilium.io/
# 更新本地仓库缓存
helm repo update
# 验证仓库是否添加成功
helm search repo cilium/cilium --versions | head -5
输出示例:
NAME CHART VERSION APP VERSION DESCRIPTION
cilium/cilium 1.16.5 1.16.5 eBPF-based Networking...
cilium/cilium 1.16.4 1.16.4 eBPF-based Networking...
cilium/cilium 1.15.10 1.15.10 eBPF-based Networking...
版本选择建议:生产环境建议选择最新的稳定版本(如 1.16.x),避免使用 alpha 或 rc 版本。对于已有集群,需确认 Cilium 版本与 Kubernetes 版本的兼容性矩阵。
4.2 配置 Values 参数
Cilium 的 Helm Chart 提供了超过 300 个可配置参数。以下是一个面向生产环境的 values.yaml 核心配置示例,涵盖网络模式、IPAM、kube-proxy 替换和监控等关键维度。
# cilium-values-prod.yaml
# 全局设置
cluster:
name: production-cluster
id: 1
# 网络模式:Overlay (VXLAN)
tunnelProtocol: "vxlan"
routingMode: "tunnel"
# IPAM 模式:Kuberenetes CRD
ipam:
mode: "kubernetes"
# 替换 kube-proxy
kubeProxyReplacement: "strict"
k8sServiceHost: "10.0.0.100" # 替换为你的 API Server IP
k8sServicePort: 6443
# 节点间通信加密
encryption:
enabled: true
type: "wireguard"
# Hubble 可观测性
hubble:
enabled: true
relay:
enabled: true
ui:
enabled: true
# 资源限制(初始值,后续章节会调优)
resources:
cilium:
limits:
cpu: 2
memory: 4Gi
requests:
cpu: 500m
memory: 1Gi
operator:
limits:
cpu: 1
memory: 2Gi
requests:
cpu: 200m
memory: 512Mi
| 参数路径 | 推荐值 | 说明 |
|---|---|---|
routingMode |
tunnel |
Overlay 模式,兼容性最好;Native 模式需底层网络支持 |
kubeProxyReplacement |
strict |
完全替换 kube-proxy,提升性能;需确保 k8sServiceHost 正确 |
encryption.type |
wireguard |
节点间流量加密,性能优于 IPsec |
hubble.relay.enabled |
true |
启用 Hubble Relay 实现集群级流量聚合 |
ipam.mode |
kubernetes |
使用 Kubernetes CRD 管理 Pod CIDR,避免 IP 冲突 |
关键检查点:如果启用
kubeProxyReplacement: strict,必须正确设置 k8sServiceHost 和 k8sServicePort,否则 Cilium Agent 将无法连接 API Server,导致安装失败。建议在安装前通过 kubectl cluster-info 确认 API Server 地址。
4.3 安装 Cilium 到 Kubernetes 集群
使用 helm install 命令执行部署。建议先执行 Dry-Run 验证配置语法,再进行实际安装。
# 步骤 1:Dry-Run 验证(不实际安装)
helm install cilium cilium/cilium \
--namespace kube-system \
--values cilium-values-prod.yaml \
--dry-run --debug > cilium-dryrun.yaml
# 步骤 2:检查生成的 YAML 是否有明显错误
grep -i "error\|invalid\|failed" cilium-dryrun.yaml || echo "语法检查通过"
# 步骤 3:执行实际安装
helm install cilium cilium/cilium \
--namespace kube-system \
--values cilium-values-prod.yaml \
--wait \
--timeout 10m0s
安装命令参数说明:
--namespace kube-system:Cilium 组件部署在系统命名空间。--wait:等待所有 Pod 进入 Ready 状态后再返回。--timeout 10m0s:超时时间,大型集群可能需要更长。
安装成功后,Helm 会输出类似以下信息:
NAME: cilium
LAST DEPLOYED: Tue Jan 14 10:30:00 2025
NAMESPACE: kube-system
STATUS: deployed
REVISION: 1
TEST SUITE: None
4.4 验证安装状态
安装完成后,需要通过多个维度验证 Cilium 是否正常运行。以下是一套完整的验证流程。
4.4.1 检查 Pod 状态
# 查看 Cilium 相关 Pod
kubectl -n kube-system get pods -l k8s-app=cilium
# 预期输出:所有 Pod 均为 Running 状态
NAME READY STATUS RESTARTS AGE
cilium-abc12 1/1 Running 0 5m
cilium-def34 1/1 Running 0 5m
cilium-operator-0 1/1 Running 0 5m
cilium-operator-1 1/1 Running 0 5m
4.4.2 验证 Cilium Agent 状态
# 在任意节点上执行 cilium status
kubectl -n kube-system exec ds/cilium -- cilium status
# 关键输出指标
KVStore: Ok Disabled
Kubernetes: Ok 1.29 (v1.29.0) [linux/amd64]
Kubernetes APIs: ["cilium/v2::CiliumEndpoint", "cilium/v2::CiliumNetworkPolicy", ...]
KubeProxyReplacement: Strict [eth0 10.0.0.100]
Host Routing: Legacy
Cilium: Ok 1.16.5
NodeMonitor: Disabled
CiliumHealth: Ok
4.4.3 验证 Hubble 可观测性
# 检查 Hubble Relay 状态
kubectl -n kube-system get pods -l k8s-app=hubble-relay
# 启动 Hubble UI 端口转发(可选)
kubectl -n kube-system port-forward svc/hubble-ui 12000:80
# 使用 hubble CLI 检查流量
kubectl -n kube-system exec ds/cilium -- hubble observe --since 1m
4.4.4 端到端连通性测试
# 运行 Cilium 内置连通性测试
kubectl -n kube-system exec ds/cilium -- cilium connectivity test
# 测试内容包括:
# - Pod-to-Pod 通信
# - Pod-to-Service 通信
# - 跨节点通信
# - DNS 解析
# - 网络策略执行
验证清单:安装完成后,建议按以下顺序逐项确认:① 所有 Cilium DaemonSet Pod 处于 Running 状态;②
cilium status 显示 Kubernetes 连接为 Ok;③ kubeProxyReplacement 状态为 Strict;④ Hubble Relay 和 UI 正常响应;⑤ 连通性测试全部通过。任何一项失败都应回退检查 Values 配置。
4.5 安装流程总览
下图总结了从仓库配置到验证完成的完整安装流程,以及各阶段的关键检查点。
4.6 常见安装问题与处理
| 问题现象 | 可能原因 | 解决方案 |
|---|---|---|
Cilium Agent Pod 一直处于 Init:CrashLoopBackOff |
内核版本过低或缺少 eBPF 支持 | 升级内核至 5.10+,或启用 cgroup2 挂载 |
cilium status 显示 Kubernetes 连接失败 |
k8sServiceHost 配置错误 |
使用 kubectl cluster-info 获取正确 API Server 地址 |
| Hubble Relay Pod 无法启动 | Hubble 证书未自动生成 | 设置 hubble.tls.auto.enabled: true |
| 连通性测试中 Pod-to-Pod 失败 | 节点间 VXLAN 端口(8472)被防火墙阻止 | 开放节点间 UDP 8472 端口 |
生产环境提醒:安装完成后,建议立即执行
helm list -n kube-system 确认 release 记录,并使用 helm get values cilium -n kube-system 导出当前生效的配置,作为后续变更的基线。切勿直接修改 DaemonSet 或 Deployment 的 YAML,所有变更必须通过 Helm 进行。