Docker Swarm NFS 数据持久化存储

Docker Swarm NFS 数据持久化存储_第1张图片


目录

    • 一、Swarm 集群部署
    • 二、NFS 服务部署
    • 三、Swarm 使用 NFS
      • 3.1 通过 Volume
        • 3.1.1 创建 Volume
        • 3.1.2 使用 Volume
        • 3.1.3 验证数据共享特性
      • 3.2 通过 Docker Stack
        • 3.2.1 创建 YAML 文件
        • 3.2.2 使用 YAML 文件
        • 3.2.3 验证数据共享特性


一、Swarm 集群部署

可参考我前面的博客《基于 Linux 的 Docker Swarm 集群部署及应用》

本次实验:

  • master:192.168.56.142
  • work1:192.168.56.132
  • work2:192.168.56.180

二、NFS 服务部署

可参考我前面的博客《构建NFS-FTP文件共享存储》

本次实验:

  • NFS IP:192.168.56.141
  • Shared Dir:/data/sharedir

三、Swarm 使用 NFS

3.1 通过 Volume

3.1.1 创建 Volume

1、创建 Docker Volume

每个 swarm 节点均创建相同名称的 Docker Volume(名称为 nfsdata)

docker volume create --driver local \
  --opt type=nfs \
  --opt o=addr=192.168.56.141,rw \
  --opt device=:/data/sharedir \
  nfsdata

2、查看 Volume 是否创建成功

docker volume ls

# swarm集群节点依次进行验证

Docker Swarm NFS 数据持久化存储_第2张图片

3、查看 Volume 详情

docker volume inspect nfsdata

Docker Swarm NFS 数据持久化存储_第3张图片

其中:Mountpoint 为 Host 挂载点,Options 为 NFS 服务共享目录信息。

3.1.2 使用 Volume

1、在 docker swarm 的 master 节点执行创建服务操作

docker service create \
  --name nginx-nfs-test \
  --publish 1180:80 \
  --mount type=volume,source=nfsdata,destination=/data/web \
  --replicas 3 \
  nginx:1.20.2

2、查看 Service 部署情况

Docker Swarm NFS 数据持久化存储_第4张图片

3.1.3 验证数据共享特性

1、NFS 服务创建测试数据

Docker Swarm NFS 数据持久化存储_第5张图片

2、Service 验证是否共享 NFS 数据

image-20230111150309868

可见,数据被共享了,当然,你在容器中 /data/web 目录下产生的数据也会被持久化到 NFS 服务上。

当然,Nginx 也是正常运行的

Docker Swarm NFS 数据持久化存储_第6张图片

3.2 通过 Docker Stack

Docker Stack CLI

通过 Volume 方式,你会发现每台 swarm 集群 work 节点都需要创建 Volume(如果 master 节点也为 work 节点,也要创建 Volume )。稍显麻烦,我们可通过 Docker Stack 方式来弥补这点不足,也就是使用 Docker Stack 方式时,就不需要手动创建 Docker Volume 了。

3.2.1 创建 YAML 文件

参考:docker compose CLI

vim nginx-compose.yml

# 以下配置文件会创建一个名为myweb_nginx-nfs-test-1的service
# service命名规则:stack名_service名
version: "3"

services:
  nginx-nfs-test-1:
    image: nginx:1.20.2
    deploy:
      mode: replicated
      replicas: 3
      restart_policy:
        condition: on-failure
    ports:
      - "1181:80"
    networks:
      my-overlay-network:
        aliases:
          - nginx-test-net
    volumes:
      - "mountdata:/data/web"

volumes:
  mountdata:
    driver: local
    driver_opts:
      type: "nfs"
      o: "addr=192.168.56.141,rw"
      device: ":/data/sharedir"

networks:
  my-overlay-network:
    driver: overlay

如果你需要在指定的 Node 节点上运行 Service,可在配置文件中进行指定 Node 节点名(新增 placement 字段)。

version: "3"

services:
  nginx-nfs-test-1:
    image: nginx:1.20.2
    deploy:
      placement:
        constraints:
          - "node.hostname==harbor-nexus"
      mode: replicated
      replicas: 3
      restart_policy:
        condition: on-failure
    ...
    ...

除了可指定节点名外,还可以指定节点 ID、标签等。

3.2.2 使用 YAML 文件

docker stack deploy -c nginx-compose.yml myweb

# 创建一个名为myweb的stack

Docker Swarm NFS 数据持久化存储_第7张图片

查看 Service 所在集群节点

Docker Swarm NFS 数据持久化存储_第8张图片

3.2.3 验证数据共享特性

我在 3.1 小节中已经向 NFS 添加过测试数据了,现在来验证容器内部有没有测试数据。

docker exec -it myweb_nginx-nfs-test-1.2.dahr1c6am279qgnhf2910449c bash

image-20230111155733010

可见,数据已经同步到 swarm service 容器内部。

至此,Docker Swarm 的数据持久化问题已经解决。当然,除了 NFS 共享存储外,还有 Ceph、ClusterFS 等存储也能实现。实际生产中大家自行修改使用即可。


你可能感兴趣的:(Docker,docker,linux,运维)