3. 环境准备:部署Kubernetes集群与Cilium安装
本章是实战课程的基石。在开始调度优化与网络拓扑排查之前,必须搭建一个可观测、可复现的实验环境。我们将采用kubeadm部署生产级集群,同时提供minikube作为轻量级备选方案,并完成Cilium CLI与Helm的安装配置。
3.1 环境概览与组件清单
下表列出了本次实验所需的核心组件及其版本要求(以Ubuntu 22.04 LTS为基础环境):
| 组件 | 版本/要求 | 用途 |
|---|---|---|
| 操作系统 | Ubuntu 22.04 LTS / Rocky Linux 9 | 节点基础环境 |
| 容器运行时 | containerd 1.7.x | 容器生命周期管理 |
| Kubernetes | v1.28.x / v1.29.x | 集群编排 |
| kubeadm | 对应K8s版本 | 集群初始化工具 |
| Cilium | v1.15.x / v1.16.x | CNI & 网络可观测 |
| Cilium CLI | v0.16.x | 命令行诊断工具 |
| Helm | v3.14.x | Chart包管理 |
版本选择建议: 推荐使用K8s v1.29 + Cilium v1.16组合,该组合对eBPF新特性(如BIG TCP、带宽管理器)支持最完整,且与后续章节的指标采集场景兼容性最佳。
3.2 部署Kubernetes集群(kubeadm方式)
kubeadm是生产环境最常用的集群部署工具。以下步骤在1个控制平面节点 + 2个工作节点上执行。
3.2.1 前置条件配置
所有节点执行:
# 关闭swap
sudo swapoff -a
sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
# 加载内核模块
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF
sudo modprobe overlay
sudo modprobe br_netfilter
# 设置sysctl参数
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
EOF
sudo sysctl --system
3.2.2 安装containerd与kubeadm
# 安装containerd
sudo apt-get update
sudo apt-get install -y containerd
# 配置containerd使用systemd cgroup驱动
sudo mkdir -p /etc/containerd
containerd config default | sudo tee /etc/containerd/config.toml
sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml
sudo systemctl restart containerd
# 安装kubeadm、kubelet、kubectl
sudo apt-get install -y apt-transport-https ca-certificates curl
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.29/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.29/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl
3.2.3 初始化控制平面
在控制平面节点执行:
# 初始化集群(跳过CNI安装,后续由Cilium接管)
sudo kubeadm init --pod-network-cidr=10.244.0.0/16 --skip-phases=addon/kube-proxy
# 配置kubectl
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
# 查看节点状态
kubectl get nodes
关键参数说明:
--skip-phases=addon/kube-proxy 是Cilium部署的最佳实践。Cilium内置kube-proxy替代功能(kubeProxyReplacement),跳过传统kube-proxy可减少iptables规则数量,提升网络性能。
3.2.4 工作节点加入
在控制平面节点获取加入令牌,然后在每个工作节点执行:
# 控制平面节点执行
kubeadm create --print-join-command
# 输出示例:
# kubeadm join 192.168.1.10:6443 -- xxxxx --discovery--ca-cert-hash sha256:xxxxx
# 工作节点执行上述命令
sudo kubeadm join 192.168.1.10:6443 -- xxxxx --discovery--ca-cert-hash sha256:xxxxx
3.3 备选方案:minikube部署
对于资源受限或单机开发场景,minikube是快速搭建测试环境的理想选择:
# 安装minikube
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube
# 启动集群(指定CNI为none,后续安装Cilium)
minikube start --cni=false --kubernetes-version=v1.29.0
# 验证集群
kubectl get nodes
minikube vs kubeadm: minikube适合单节点快速原型验证;kubeadm适合多节点、生产级场景。本课程后续的调度与网络拓扑排查实验,建议使用kubeadm部署的3节点集群以获得完整的网络拓扑视图。
3.4 安装Cilium CLI
Cilium CLI是诊断网络策略、Service映射、eBPF程序状态的核心工具:
# 下载并安装Cilium CLI
CILIUM_CLI_VERSION=$(curl -s https://raw.githubusercontent.com/cilium/cilium-cli/main/stable.txt)
CLI_ARCH=amd64
if [ "$(uname -m)" = "aarch64" ]; then CLI_ARCH=arm64; fi
curl -L --fail --remote-name-all https://github.com/cilium/cilium-cli/releases/download/${CILIUM_CLI_VERSION}/cilium-linux-${CLI_ARCH}.tar.gz{,.sha256sum}
sha256sum --check cilium-linux-${CLI_ARCH}.tar.gz.sha256sum
sudo tar xzvfC cilium-linux-${CLI_ARCH}.tar.gz /usr/local/bin
rm cilium-linux-${CLI_ARCH}.tar.gz{,.sha256sum}
# 验证安装
cilium version
3.5 Helm部署Cilium
使用Helm Chart部署Cilium,可以灵活配置网络、可观测性与安全策略:
# 添加Cilium Helm仓库
helm repo add cilium https://helm.cilium.io/
helm repo update
# 部署Cilium(启用Hubble与指标采集)
helm install cilium cilium/cilium --version 1.16.0 \
--namespace kube-system \
--set kubeProxyReplacement=true \
--set hubble.relay.enabled=true \
--set hubble.ui.enabled=true \
--set hubble.metrics.enabled="{dns,drop,tcp,flow,icmp,http}" \
--set hubble.metrics.destinationLabelMethod="cidr" \
--set ipam.mode=cluster-pool \
--set ipam.operator.clusterPoolIPv4PodCIDRList="10.244.0.0/16"
# 等待Cilium就绪
cilium status --wait
# 验证所有Pod运行正常
kubectl -n kube-system get pods -l k8s-app=cilium
关键配置解读:
kubeProxyReplacement=true:完全替代kube-proxy,减少网络跳数。hubble.metrics.enabled:开启DNS、丢弃、TCP、流、ICMP、HTTP指标,为后续告警分层提供数据源。ipam.mode=cluster-pool:使用ClusterPool IPAM模式,Pod CIDR自动分配。
3.6 部署架构总览
下图展示了完成环境准备后的整体部署架构:
3.7 验证部署
部署完成后,执行以下验证命令确保环境正常:
# 1. 检查Cilium Agent状态
kubectl -n kube-system exec -it ds/cilium -- cilium status
# 2. 检查Hubble Relay连接
cilium hubble port-forward &
hubble status
# 3. 测试Pod间网络连通性
kubectl run test-pod --image=busybox -- sleep 3600
kubectl exec -it test-pod -- ping -c 3 10.244.1.2
# 4. 查看Hubble UI
cilium hubble ui
# 5. 验证指标端点
kubectl -n kube-system get svc -l k8s-app=cilium
常见问题排查:
- 如果Cilium Agent处于CrashLoopBackOff状态,检查
cilium status --verbose查看eBPF相关错误。 - 如果Pod间网络不通,检查CiliumNetworkPolicy是否误拦截,使用
hubble observe查看流量丢弃原因。 - 如果Hubble UI无法访问,确认
hubble.relay.enabled=true已正确设置。
3.8 环境清理与重置
如需重置环境重新部署:
# 卸载Cilium
helm uninstall cilium -n kube-system
# 重置kubeadm集群(控制平面节点执行)
sudo kubeadm reset --force
sudo rm -rf /etc/cni/net.d /var/lib/cni /var/lib/kubelet /var/lib/etcd
# 清理iptables规则
sudo iptables -F && sudo iptables -t nat -F && sudo iptables -t mangle -F
# 工作节点只需执行kubeadm reset
sudo kubeadm reset --force