Ubuntu上使用Overlay网络进行容器编排的流程
Overlay网络依赖Docker或Kubernetes等容器运行时,且需要Ubuntu系统满足内核模块要求:
sudo apt update && sudo apt install -y docker.io安装最新版Docker;overlay和br_netfilter模块,执行cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf\noverlay\nbr_netfilter\nEOF创建模块配置文件,再通过sudo modprobe overlay && sudo modprobe br_netfilter加载;cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf\nnet.bridge.bridge-nf-call-iptables = 1\nnet.bridge.bridge-nf-call-ip6tables = 1\nnet.ipv4.ip_forward = 1\nEOF,然后运行sudo sysctl --system /etc/sysctl.d/k8s.conf应用配置。Overlay网络需通过Docker命令创建,指定驱动为overlay,并可自定义子网、网关(避免与现有网络冲突):
docker network create --driver overlay --subnet 10.0.9.0/24 --gateway 10.0.9.1 my_overlay_network
此命令会创建名为my_overlay_network的Overlay网络,后续容器可通过该网络实现跨主机通信。
启动容器时,通过--network参数将其关联到目标Overlay网络:
docker run -d --name web1 --network my_overlay_network nginx
docker run -d --name web2 --network my_overlay_network nginx
上述命令会启动两个Nginx容器(web1、web2),均连接到my_overlay_network,可通过Overlay网络IP(如10.0.9.x)互相访问。
对于复杂的多容器应用(如Web+Redis),可通过docker-compose.yml文件定义服务,实现一键部署:
docker-compose.yml:version: '3.8'
services:
web:
image: nginx
ports:
- "5000:5000"
volumes:
- .:/code
networks:
- my_overlay_network
redis:
image: redis
networks:
- my_overlay_network
networks:
my_overlay_network:
external: true # 引用已创建的外部Overlay网络
docker-compose.yml所在目录执行docker-compose up -d,Compose会自动创建并启动web(Nginx)和redis容器,均连接到my_overlay_network。通过进入容器内部,使用ping或curl命令验证跨容器通信:
docker exec -it web1 ping 10.0.9.3 # 假设web2的IP为10.0.9.3
docker exec -it web1 curl http://10.0.9.3:6379 # 测试与redis的连接
若能收到回复,说明Overlay网络配置成功,容器间可正常通信。
若需更强大的编排能力(如自动扩缩容、负载均衡),可使用Kubernetes结合Overlay网络插件(如Flannel、Calico):
kubeadm init初始化主节点,kubeadm join加入工作节点;kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml;kubectl apply -f app-deployment.yaml部署包含多个容器的应用,Kubernetes会自动将Pod连接到Overlay网络。以上步骤覆盖了Ubuntu上使用Overlay网络进行容器编排的核心流程,从基础环境准备到多容器管理,满足不同场景的需求。