dockerswarm-docker-compose-nfs-server

私有云请创建私有 docker registry 仓库

docker run -it -d --name private_registry -p 5000:5000 --restart=always -v /data/registry/:/tmp/registry registry

echo '{ "insecure-registries":["xxx.xxx.xxx.xxx:5000"] }' > /etc/docker/daemon.json

systemctl restart docker

### 设置镜像标签,让其支持本地镜像上传
docker tag docker.io/centos 192.168.88.101:5000/centos


节点

外网内网角色
10.139.154.193leader
10.139.140.32node
10.139.135.226node

master执行, 初始化集群

sudo docker swarm init --listen-addr 10.139.154.193:2377

node分别执行, 加入集群

sudo docker swarm join --token SWMTKN-1-46icwlabnwedm8mr3svmo22ipnodq61z0cu2qzjr4uhw4rrfvh-55z0xfqi24bg2lk6l45nu5oe3 10.139.154.193:2377

master查看集群状态

ubuntu@VM-154-193-ubuntu:~$ docker node ls
ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
f26r416u78addyty13uxbfqkm     VM-135-226-ubuntu   Ready               Active                                  19.03.8
typlvz2dq2iusda9d48a1l3z4     VM-140-32-ubuntu    Ready               Active                                  19.03.8
wwrd6oryiwz1myl4ztm7impz3 *   VM-154-193-ubuntu   Ready               Active              Leader              19.03.8

创建yml文件 (这里只写了redis)

version: '3'
services:
  cfg_redis:
    image: redis:5.0.3
    ports:
      - 16666:6379
    restart: always
    environment:
      - TZ=Asia/Shanghai
      - LANG=en_US.UTF-8
    command: redis-server --requirepass 123456
    deploy:
      replicas: 3
      restart_policy:
        condition: on-failure

开始构建

docker stack deploy -c compose_wordpress.yml wordpress

构建的时候会创建一个 overlay 网络 wordpress

docker network ls

查看 stack 状态

ubuntu@VM-154-193-ubuntu:~/docker-test/swarm$ docker stack services wordpress
ID                  NAME                  MODE                REPLICAS            IMAGE               PORTS
vxhwemgqzb0w        wordpress_cfg_redis   replicated          3/3                 redis:5.0.3         *:16666->6379/tcp

可以看到worepress 这个调度的stack已经起起来了,因为是与Docker swarm结合,所以我们也可以用Docker swarm 形式来查看和管理:

ubuntu@VM-154-193-ubuntu:~/docker-test/swarm$ docker service ls
ID                  NAME                  MODE                REPLICAS            IMAGE               PORTS
vxhwemgqzb0w        wordpress_cfg_redis   replicated          3/3                 redis:5.0.3         *:16666->6379/tcp
ubuntu@VM-154-193-ubuntu:~/docker-test/swarm$ docker service ps wordpress_cfg_redis 
ID                  NAME                    IMAGE               NODE                DESIRED STATE       CURRENT STATE            ERROR               PORTS
n30isxtd0802        wordpress_cfg_redis.1   redis:5.0.3         VM-140-32-ubuntu    Running             Running 13 minutes ago                       
rj5zfz0hunll        wordpress_cfg_redis.2   redis:5.0.3         VM-135-226-ubuntu   Running             Running 13 minutes ago                       
5un527vwh55y        wordpress_cfg_redis.3   redis:5.0.3         VM-154-193-ubuntu   Running             Running 13 minutes ago 

执行没有参数更改的滚动重启

docker service update --force --update-parallelism 1 --update-delay 30s service_name

Swarm共享存储 NFS

centos

yum -y install nfs-utils rpcbind

ubuntu

$ sudo apt-get update
$ sudo apt-get install -y nfs-kernel-server

配置文件

nfs 的配置文件 /etc/expots
共享目录赋予权限:chmod 755 /root/share

vim /etc/exports
/root/share 172.16.10.0/24(rw,async,insecure,anonuid=1000,anongid=1000,no_root_squash)

配置生效

exportfs -rv

配置文件说明:

/root/share 为共享目录

* 192.168.1.0/24 可以为一个网段,一个IP,也可以是域名,域名支持通配符 如: *.com
* rw:read-write,可读写;
* ro:read-only,只读;
* sync:文件同时写入硬盘和内存;
* async:文件暂存于内存,而不是直接写入内存;
* no_root_squash:NFS客户端连接服务端时如果使用的是root的话,那么对服务端分享的目录来说,也拥有root权限。显然开启这项是不安全的。
* root_squash:NFS客户端连接服务端时如果使用的是root的话,那么对服务端分享的目录来说,拥有匿名用户权限,通常他将使用nobody或nfsnobody身份;
* all_squash:不论NFS客户端连接服务端时使用什么用户,对服务端分享的目录来说都是拥有匿名用户权限;
* anonuid:匿名用户的UID值
* anongid:匿名用户的GID值。备注:其中anonuid=1000,anongid=1000,为此目录用户web的ID号,达到连接NFS用户权限一致。
* defaults 使用默认的选项。默认选项为rw、suid、dev、exec、auto nouser与async。
* atime 每次存取都更新inode的存取时间,默认设置,取消选项为noatime。
* noatime 每次存取时不更新inode的存取时间。
* dev 可读文件系统上的字符或块设备,取消选项为nodev。
* nodev 不读文件系统上的字符或块设备。
* exec 可执行二进制文件,取消选项为noexec。
* noexec 无法执行二进制文件。
* auto 必须在/etc/fstab文件中指定此选项。执行-a参数时,会加载设置为auto的设备,取消选取为noauto。
* noauto 无法使用auto加载。
* suid 启动set-user-identifier设置用户ID与set-group-identifer设置组ID设置位,取消选项为nosuid。
* nosuid 关闭set-user-identifier设置用户ID与set-group-identifer设置组ID设置位。
* user 普通用户可以执行加载操作。
* nouser 普通用户无法执行加载操作,默认设置。
* remount 重新加载设备。通常用于改变设备的设置状态。
* rsize 读取数据缓冲大小,默认设置1024。–影响性能
* wsize 写入数据缓冲大小,默认设置1024。
* fg 以前台形式执行挂载操作,默认设置。在挂载失败时会影响正常操作响应。
* bg 以后台形式执行挂载操作。
* hard 硬式挂载,默认设置。如果与服务器通讯失败,让试图访问它的操作被阻塞,直到服务器恢复为止。
* soft 软式挂载。服务器通讯失败,让试图访问它的操作失败,返回一条出错消息。这项功能对于避免进程挂在无关紧要的安装操作上来说非常有用。
* retrans=n 指定在以软方式安装的文件系统上,在返回一条出错消息之前重复发出请求的次数。
* nointr 不允许用户中断,默认设置。
* intr 允许用户中断被阻塞的操作并且让它们返回一条出错消息。
* timeo=n 设置请求的超时时间以十分之一秒为单位。
* tcp 传输默认使用udp,可能出现不稳定,使用proto=tcp更改传输协议。客户端参考mountproto=netid

启动nfs服务

systemctl enable rpcbind
systemctl start rpcbind
systemctl enable nfs-server
systemctl start nfs-server

确认NFS服务器启动成功

[root@master opt]# rpcinfo -p
   program vers proto   port  service
    100024    1   udp  50813  status
    100024    1   tcp   6021  status
    100005    1   udp  20048  mountd
    100005    1   tcp  20048  mountd
    100005    2   udp  20048  mountd
    100005    2   tcp  20048  mountd
    100005    3   udp  20048  mountd
    100005    3   tcp  20048  mountd
    100003    3   tcp   2049  nfs
    100003    4   tcp   2049  nfs
    100227    3   tcp   2049  nfs_acl
    100003    3   udp   2049  nfs
    100003    4   udp   2049  nfs
    100227    3   udp   2049  nfs_acl
    100021    1   udp  35715  nlockmgr
    100021    3   udp  35715  nlockmgr
    100021    4   udp  35715  nlockmgr
    100021    1   tcp   5350  nlockmgr
    100021    3   tcp   5350  nlockmgr
    100021    4   tcp   5350  nlockmgr
[root@master opt]# cat /var/lib/nfs/etab
/root/share 172.16.10.0/24(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,all_squash,no_subtree_check,secure_locks,acl,no_pnfs,anonuid=1000,anongid=1000,sec=sys,rw,secure,root_squash,all_squash)

nfs服务端放通端口 111 2049 4046 20048 五个端口

客户端查看showmount

$ showmount -e 31.16.17.65
Export list for 31.16.17.65:
/code/share *
$ sudo apt-get install -y nfs-common
$ showmount -e 172.16.36.25
$ sudo mount -t nfs 172.16.36.25:/home/erick/nfs /mnt
$ sudo umount /mnt

将nfs应用到docker swarm中

手动创建volume

docker volume create --driver local \
    --opt type=nfs \
    --opt o=addr=172.16.10.172,rw \
    --opt device=:/root/share \
    foo33

使用docker-compose

version: '3.3'

services:

  nginx-test5:
    image: nginx:latest
    deploy:
      mode: replicated
      replicas: 1
      restart_policy:
        condition: on-failure
    ports:
      - "88:80"
    networks:
      my-overlay-network:
        aliases:
          - nginx-test5
    volumes:
      - "foo_new:/app/share"


volumes:
  foo_new:
    driver: local
    driver_opts:
      type: "nfs"
      o: "addr=172.16.10.172,rw"
      device: ":/root/share"

networks:
  my-overlay-network:
    driver: overlay
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值