docker swarm 怎么定义nfs共享卷?

来源:6-2 集群环境搭建(上)

zac707

2025-03-31

docker swarm  怎么定义nfs共享卷?
写回答

1回答

刘果国

2025-04-21

在 Docker Swarm 中定义 NFS 共享卷可以通过以下步骤实现:


1. 确保 NFS 服务器已配置

首先确保你有一个可用的 NFS 服务器,并已导出共享目录。例如:


bash

# 在 NFS 服务器上编辑 /etc/exports

/path/to/share  *(rw,sync,no_subtree_check,no_root_squash)

然后重启 NFS 服务:


bash

sudo systemctl restart nfs-server

2. 在 Docker Swarm 节点上安装 NFS 客户端

所有 Swarm 节点(包括管理节点和工作节点)需要安装 NFS 客户端工具:


bash

# Ubuntu/Debian

sudo apt-get install nfs-common -y


# CentOS/RHEL

sudo yum install nfs-utils -y

3. 创建 Docker Volume 驱动为 NFS

在 Swarm 中创建一个全局可用的 NFS 卷:


bash

docker volume create \

  --driver local \

  --opt type=nfs \

  --opt o=addr=<NFS_SERVER_IP>,rw \

  --opt device=:<NFS_EXPORTED_PATH> \

  nfs_volume

<NFS_SERVER_IP>:NFS 服务器的 IP 地址。

<NFS_EXPORTED_PATH>:NFS 服务器导出的路径(如 /path/to/share)。

4. 在 Stack 或 Service 中使用 NFS 卷

在 docker-compose.yml 或 Stack 文件中定义服务时挂载 NFS 卷:


示例 docker-compose.yml:

yaml

version: '3.8'


services:

  web:

    image: nginx:latest

    volumes:

      - nfs_volume:/usr/share/nginx/html

    deploy:

      replicas: 2


volumes:

  nfs_volume:

    driver: local

    driver_opts:

      type: nfs

      o: addr=<NFS_SERVER_IP>,rw

      device::<NFS_EXPORTED_PATH>

部署 Stack:

bash

docker stack deploy -c docker-compose.yml my_stack

5. 验证卷挂载

进入容器检查挂载点:


bash

docker exec -it <CONTAINER_ID> ls /usr/share/nginx/html

或在宿主机上检查卷信息:


bash

docker volume inspect nfs_volume

关键注意事项

NFS 服务器高可用:确保 NFS 服务器高可用,避免单点故障。

权限问题:NFS 导出的目录权限需允许容器用户(如 nginx 用户)读写。

性能调优:根据需求调整 NFS 挂载选项(如 async、noatime)。

跨节点一致性:所有 Swarm 节点必须能访问 NFS 服务器。


0
0

Docker+Kubernetes(k8s)微服务容器化实践

从开发到编排,快速,完整,深入的掌握微服务

2617 学习 · 609 问题

查看课程