Linux Overlay主要分为文件系统(OverlayFS)和网络(Overlay Network)两类,以下是各自的部署步骤:
OverlayFS是一种联合文件系统,可将多个目录合并为统一视图,常用于容器镜像的分层存储。
环境准备
确保系统支持OverlayFS(Linux内核≥3.18),并安装必要工具:
sudo apt-get install overlayroot
sudo yum install overlay
sudo dnf install overlay
。创建目录结构
OverlayFS需要四个核心目录:
lowerdir
:底层只读目录(基础文件系统);upperdir
:上层可写目录(存储修改/新增文件);workdir
:工作目录(OverlayFS内部元数据处理);merged
:挂载点(最终的合并视图)。sudo mkdir -p /mnt/overlay/{lower,upper,work,merged}
```。
挂载底层文件系统(可选)
若lowerdir
需要基于现有文件系统(如ext4),需先格式化并挂载:
sudo mkfs.ext4 /dev/sdb1 # 假设/dev/sdb1是底层存储设备
sudo mount -t ext4 /dev/sdb1 /mnt/overlay/lower
```。
挂载OverlayFS
使用mount
命令合并目录,语法如下:
sudo mount -t overlay overlay \
-o lowerdir=/mnt/overlay/lower,upperdir=/mnt/overlay/upper,workdir=/mnt/overlay/work \
/mnt/overlay/merged
其中lowerdir
可指定多个目录(如lowerdir=/dir1:/dir2
),但upperdir
和workdir
必须唯一。
验证与持久化
df -h /mnt/overlay/merged
,确认文件系统类型为overlay
;/etc/fstab
,添加以下行(重启后自动挂载):overlay /mnt/overlay/merged overlay defaults,lowerdir=/mnt/overlay/lower,upperdir=/mnt/overlay/upper,workdir=/mnt/overlay/work 0 0
```。
Overlay Network用于跨主机的容器通信,常见于Docker/Kubernetes集群,依赖VXLAN等技术实现。
安装Docker:
更新软件源并安装Docker:
sudo apt-get update && sudo apt-get install -y docker.io # Debian/Ubuntu
sudo yum install -y yum-utils device-mapper-persistent-data lvm2 && \
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/ && \
sudo yum install -y docker-ce docker-ce-cli containerd.io # CentOS/RHEL
sudo systemctl start docker && sudo systemctl enable docker
```。
创建Overlay网络:
指定子网、网关和驱动(overlay
),示例:
docker network create --driver overlay --subnet 10.0.0.0/24 --gateway 10.0.0.1 my_overlay
若为多主机集群,需提前配置Docker Swarm(docker swarm init
)。
启动容器并连接网络:
将容器连接到Overlay网络,示例:
docker run -d --name container1 --network my_overlay nginx
docker run -d --name container2 --network my_overlay nginx
```。
验证网络连接:
进入容器并ping另一容器IP(通过docker inspect container1
获取IP):
docker exec -it container1 ping <container2_ip>
```。
安装Kubernetes集群:
使用kubeadm
初始化集群(单节点测试):
sudo kubeadm init --pod-network-cidr=10.244.0.0/16 # 指定Pod网络CIDR(与Flannel配置一致)
mkdir -p $HOME/.kube && sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
```。
部署Flannel CNI插件:
Flannel是Kubernetes常用的Overlay网络插件,支持VXLAN隧道:
kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml
部署后,Flannel会自动为每个节点分配Pod网络IP段。
验证网络连接:
创建两个测试Pod并检查连通性:
kubectl run nginx-pod1 --image=nginx --restart=Never --overrides='{"spec": {"nodeName": "node1"}}'
kubectl run nginx-pod2 --image=nginx --restart=Never --overrides='{"spec": {"nodeName": "node2"}}'
kubectl exec -it nginx-pod1 -- /bin/sh -c "apt-get update && apt-get install -y iputils-ping && ping $(kubectl get pod nginx-pod2 -o jsonpath='{.status.podIP}')"
```。
注意事项:
workdir
目录权限正确(属主为用户);