2. 环境准备:Kubernetes集群搭建、Helm安装、Cilium与Envoy初始部署
本章是实战课程的基石。我们将完成从裸金属或云虚拟机到具备Cilium与Envoy基础运行环境的完整搭建流程。所有后续的链路追踪验证、升级演练都将依赖本章所构建的集群环境。请严格按照以下步骤操作,确保环境一致性。
2.1 环境概览与版本选型
本课程采用经过充分验证的软件版本组合,以平衡功能完整性与稳定性。建议使用下表所列版本,避免因版本差异导致兼容性问题。
| 组件 | 推荐版本 | 说明 |
|---|---|---|
| Kubernetes | v1.28.7 | API成熟,兼容Cilium 1.15+ |
| Helm | v3.14.3 | 用于Cilium与Envoy的声明式部署 |
| Cilium | v1.15.5 | 支持Envoy CRD与链路追踪 |
| Envoy (Cilium内置) | v1.28.0 (cilium-envoy) | Cilium发行版内置的Envoy |
| 操作系统 | Ubuntu 22.04 LTS | 内核5.15+,支持eBPF |
版本锁定建议: 生产环境升级前,务必在隔离的测试环境中使用与生产一致的版本组合进行验证。本课程所选版本已通过内部链路追踪场景的端到端测试。
2.2 Kubernetes集群搭建(kubeadm方式)
我们使用 kubeadm 搭建一个三节点集群(1控制面 + 2工作节点)。确保所有节点已安装容器运行时(如containerd)并关闭交换分区。
2.2.1 初始化控制面节点
# 在控制面节点执行
sudo kubeadm init \
--pod-network-cidr=10.244.0.0/16 \
--apiserver-advertise-address=192.168.1.10 \
--kubernetes-version=v1.28.7
# 配置kubectl
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
2.2.2 加入工作节点
# 在工作节点执行(使用控制面输出的)
sudo kubeadm join 192.168.1.10:6443 -- <> \
--discovery--ca-cert-hash sha256:<hash>
2.2.3 验证集群状态
kubectl get nodes
# 预期输出:所有节点状态为 Ready(此时尚未安装CNI,节点可能为NotReady)
2.3 Helm安装与配置
Helm是Kubernetes的包管理工具,我们将使用它来部署Cilium及其内置Envoy。
2.3.1 安装Helm客户端
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
helm version
# 预期输出:version.BuildInfo{Version:"v3.14.3", ...}
2.3.2 添加Cilium Helm仓库
helm repo add cilium https://helm.cilium.io/
helm repo update
2.4 Cilium与Envoy初始部署
这是环境准备的核心步骤。我们将通过Helm一次性部署Cilium,并启用内置Envoy代理。Cilium从1.14版本开始,将Envoy作为独立DaemonSet(cilium-envoy)运行,用于处理L7策略与链路追踪。
2.4.1 部署Cilium(含Envoy)
helm install cilium cilium/cilium \
--namespace kube-system \
--set eni.enabled=false \
--set ipam.mode=kubernetes \
--set kubeProxyReplacement=strict \
--set l7Proxy=true \
--set envoy.enabled=true \
--set hubble.enabled=true \
--set hubble.relay.enabled=true \
--set hubble.ui.enabled=true
关键参数解析:
l7Proxy=true:启用L7代理功能,Envoy将处理HTTP/gRPC流量。envoy.enabled=true:显式部署Cilium内置的Envoy DaemonSet。hubble.enabled=true:启用Hubble观测层,为链路追踪提供数据源。
2.4.2 验证部署状态
kubectl -n kube-system get pods -l k8s-app=cilium
kubectl -n kube-system get pods -l k8s-app=cilium-envoy
kubectl -n kube-system get pods -l k8s-app=hubble-relay
预期所有Pod处于 Running 状态,且READY列显示为 1/1 或 1/1(cilium-envoy)。
2.4.3 验证Cilium与Envoy集成
# 检查Cilium代理是否识别到Envoy
kubectl -n kube-system exec ds/cilium -- cilium status | grep Envoy
# 预期输出:Envoy: Running
2.5 环境验证清单
完成部署后,请逐项检查以下清单,确保环境就绪。任何一项失败都需回溯排查。
| 检查项 | 验证命令 | 预期结果 |
|---|---|---|
| 节点状态 | kubectl get nodes |
所有节点 Ready |
| Cilium Pod | kubectl -n kube-system get pods -l k8s-app=cilium |
每个节点一个 Running |
| Envoy Pod | kubectl -n kube-system get pods -l k8s-app=cilium-envoy |
每个节点一个 Running |
| Hubble Relay | kubectl -n kube-system get pods -l k8s-app=hubble-relay |
Running |
| Envoy状态 | kubectl -n kube-system exec ds/cilium -- cilium status | grep Envoy |
Envoy: Running |
| Hubble UI | kubectl -n kube-system get svc hubble-ui |
ClusterIP 或 NodePort 已分配 |
常见问题排查:
- 节点NotReady: 检查容器运行时(containerd)是否正常,kubelet日志是否有CNI插件错误。
- cilium-envoy未启动: 确认Helm安装时
envoy.enabled=true已设置,检查镜像拉取策略。 - Hubble Relay CrashLoopBackOff: 检查Cilium代理与Relay之间的gRPC连接,确保
hubble-relay服务已创建。
2.6 环境拓扑总览
下图展示了本章搭建完成后的完整环境拓扑,包括控制面、工作节点、Cilium组件以及Envoy代理的分布关系。后续章节的链路追踪数据流将在此拓扑上运行。
2.7 下一步准备
环境搭建完成后,建议保存当前集群的快照或状态记录。在进入第3章之前,请确认:
- 所有节点上的
cilium-agent与cilium-envoy日志无ERROR级别输出。 - Hubble UI 可通过
kubectl port-forward访问,验证服务正常。 - 部署一个简单的
echoserverPod 测试集群网络连通性。
至此,环境准备阶段完成。我们已拥有一个具备Cilium网络策略与Envoy L7代理能力的Kubernetes集群,为后续的链路追踪验证奠定了坚实基础。