温馨提示×

CentOS Overlay如何实现容器编排

小樊
44
2025-11-29 23:15:35
栏目: 智能运维

CentOS 上 Overlay 与容器编排的实现路径

CentOS 环境中,容器跨主机互联通常通过 Overlay 网络 实现;编排层面可基于 Docker SwarmKubernetes 完成。前者由 Docker 内置控制面管理 Overlay,后者依赖 CNI 插件(如 Calico、Flannel)在集群内自动建立数据面。下面给出两条常用落地路径与关键注意事项。

方案一 Docker Swarm 编排 Overlay 网络

  • 前置准备
    • 在所有节点安装并启动 Docker,建议统一版本与内核参数;如使用 containerd,需加载内核模块 overlay、br_netfilter 并开启转发与桥接相关 sysctl 项(如 net.bridge.bridge-nf-call-iptables=1、net.ipv4.ip_forward=1),以确保容器网络与 iptables/网桥协同工作。
  • 建立集群
    • 在管理节点执行:docker swarm init,获取加入令牌;在工作节点执行:docker swarm join --token <TOKEN> <MANAGER_IP>:<PORT>,完成多节点编排域建立。
  • 创建 Overlay 网络
    • 在管理节点创建可跨主机通信的 Overlay:docker network create --driver overlay --subnet 10.0.0.0/24 --gateway 10.0.0.1 my_overlay_network(可按需调整子网/网关)。
  • 部署与互联
    • 在各节点启动容器并加入同一 Overlay:docker run -d --name c1 --network my_overlay_network nginx;进入容器验证互联:docker exec -it c1 ping c2
  • 可选编排
    • 使用 Docker Compose v3.8+ 定义服务与 Overlay 网络,通过 docker-compose up -d 一键拉起跨主机应用栈。

方案二 Kubernetes 编排与 CNI Overlay

  • 集群初始化
    • 安装 kubeadm/kubelet/kubectl,完成初始化(如 kubeadm init)与节点加入;确保内核与网络前置(如加载 overlay、br_netfilter,开启 net.bridge.bridge-nf-call-iptables=1net.ipv4.ip_forward=1)。
  • 部署 CNI 插件
    • 选择 Overlay/CNI 插件(如 Calico、Flannel)一键部署,例如:kubectl apply -f https://docs.projectcalico.org/v3.25/manifests/calico.yaml;等待 kube-system 命名空间下相关 Pod 就绪:kubectl get pods -n kube-system | grep calico
  • 应用部署与验证
    • 使用 Deployment/Service 部署业务(如 nginx),Service 提供稳定虚拟 IP 与端口转发;进入 Pod 验证跨节点通信与应用可达性:kubectl exec -it <pod-name> -- curl http://<service-name>.<namespace>.svc.cluster.local

关键注意事项与排错要点

  • 内核与 sysctl
    • 容器运行时(Docker/containerd)依赖内核模块 overlay、br_netfilter;网络转发与桥接过滤需开启(net.bridge.bridge-nf-call-iptables=1net.ipv4.ip_forward=1),否则跨主机与 Service 流量可能异常。
  • 控制面与数据面职责
    • Swarm 自带 Overlay 控制面与数据面;Kubernetes 控制面由 APIServer/Controller/Scheduler 承担,数据面由 CNI 插件(如 Calico/Flannel)负责构建隧道/叠加网络,二者职责边界清晰。
  • 网络规划
    • 规划不重叠的 Pod/Service CIDROverlay 子网,避免与宿主机网段冲突;在 Swarm 中创建 Overlay 时显式指定 --subnet/--gateway 更易排障。
  • 连通性验证
    • Swarm:在容器内 ping 对端容器 IP 或 DNS 名称;Kubernetes:在 Pod 内 curl Service 域名或 ClusterIP,结合 kubectl get endpoints 检查后端映射。

0