CentOS 上的 Overlay 容器编排实践
在 CentOS 环境中,Overlay 通常指跨主机的虚拟网络,用于让分布在不同节点上的容器像在同一局域网内通信。编排上常用两条路线:基于 Docker Swarm 的原生 Overlay 网络,或基于 Kubernetes 的 CNI 插件(如 Calico/Flannel)提供的 Overlay 网络能力。
方案一 Docker Swarm 编排 Overlay 网络
- 准备与初始化
- 在所有节点安装 Docker,并启动服务:
- 安装:sudo yum install -y docker
- 启动与开机自启:sudo systemctl start docker && sudo systemctl enable docker
- 在主节点初始化 Swarm,工作节点加入:
- 初始化:docker swarm init
- 加入:在其他节点执行 docker swarm join --token <MANAGER_IP>:<MANAGER_PORT>
- 创建可用的 Overlay 网络
- 创建跨主机网络(建议加上 –attachable,便于非 Swarm 服务/容器接入):
- docker network create --driver overlay --attachable --subnet 10.0.0.0/24 --gateway 10.0.0.1 my_overlay_network
- 编排与验证
- 部署服务(示例):docker service create --name web --network my_overlay_network -p 80:80 nginx
- 跨主机验证:进入某容器 ping 另一个容器名或 IP,确认 跨主机连通性 正常。
方案二 Kubernetes 编排 Overlay 网络
- 集群与网络插件
- 安装 kubelet/kubeadm/kubectl,初始化集群(示例):sudo kubeadm init
- 部署 CNI 插件 提供 Overlay(二选一或按场景选择):
- Calico:kubectl apply -f https://docs.projectcalico.org/v3.25/manifests/calico.yaml
- Flannel:kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
- 等待 CNI Pod 就绪:kubectl get pods -n kube-system
- 编排与验证
- 部署示例应用(Deployment + Service):
- 验证:查看 Pod 就绪与 Service 分配;进入 Pod 内部访问 ClusterIP 或测试 Pod 间 PodIP 连通性。
关键注意事项与优化
- 明确网络目标:需要跨主机互联与多租隔离时选 Overlay;极致网络性能与低开销时可考虑 HostPort/HostNetwork 或 Underlay 方案(权衡运维复杂度与安全性)。
- 规划网段与网关:示例子网 10.0.0.0/24、网关 10.0.0.1,请与现有网络无冲突;Kubernetes 中由 CNI IPAM 分配,避免与宿主机/物理网络重叠。
- 性能与稳定性
- 存储层建议启用 overlay2(如 Docker 使用 OverlayFS 作为存储驱动),减少层数、合理挂载选项有助于性能。
- 集群规模扩大时,按插件文档调整 MTU、节点间加密、健康检查与节点亲和/污点 等参数,保障扩展性与稳定性。