nginx本身集群_『高级篇』docker之DockerSwarm的集群环境搭建(28)

本文详述了如何搭建Docker Swarm集群,包括设置高可用的manager节点,以及测试不同网络环境下的服务发现和负载均衡。通过创建自定义overlay网络,实现了容器间的通信,并利用Docker Stack进行多服务编排。此外,还介绍了如何通过`docker service update`命令动态调整服务配置和规模。
摘要由CSDN通过智能技术生成

b3c42a81ea76584cb4ec2ea81b00a9a4.png
上次了解了docker Swarm,这次一起动手操作,搭建swarm的集群环境,一起测试下三种环境下的服务发现和负载均衡,一个自定义下的overlay下的网络发现,一个Ingress下的服务发现,一个是Ingress+link下的,跟上次Mesos一样我们先建立三台服务虚拟机。 源码: https:// github.com/limingios/ms A-docker swarm分支

1fca3e4883d5b8ae5c7ccc5be144ff6f.png

server01

docker运行状态,切换到root用户
docker version

2cea2f0cd1b197aea98c70e09fea9b57.png
默认情况下network的结构
docker network ls

fe36517071542b751b824084b62de1fb.png
查看ip地址
ifconfig

59044140e0102de88990337eacc7d57e.png
设置manager,初始化manager节点,添加一个work在swarm上,运行下面的命令可以添加work,加入到这个manage中。
docker swarm init --advertise-addr 192.168.66.101

829830db9d8f29f5f0deff45f24f52e0.png

server02

执行添加到manager的命令。

8bb2f99c60bd73b1ef2e776380b8b337.png

server03

执行添加到manager的命令。

9b6856599b67c81682d35c5915fe05fa.png

在server01中添加了server02 和server03的work后,查看网络

之前是只有三个,一个bridge,一个host,一个none;多了个docker_gwbridge,一个ingress。
ingress的overlay网络,这个网络需要借助docker-gwbridge这个网桥进行连接。如果是
docker network ls

c98db27c74e58d181ef6520c272806fe.png

docker swarm的如何高可用

目前的manager只有一个,如果manager节点挂了,这个集群也就挂了。docker swarm 有高可用的状态,就是将server02 和server03 ,manager节点本身也可以提供服务运行的状态,即便我们三个节点都是manager也是可以运行服务的。现在把三个节点都变成manager节点试一下。
docker node ls

9e7255c8d143cbe1a29b243b82c11aa0.png
升级server02成为manager。变成了Reachable,这个跟zookeeper的原理是一样的,当一个leader挂了之后,通过选取可以产生一个新的leader。
docker node promote docker-swarm-02
docker node promote docker-swarm-03

47fb7ef2ce4dee0f09cc9e0bfb8a7345.png

8c2d5a9ac5ce13f7d0f4482d1fb6ffb7.png

PS:以上就完成高可用的docker swarm的集群环境,其实真心比其他的简单。

测试集群环境

  • 小的镜像测试
创建一个小的镜像,完成ping www.baidu.com
docker service create --name test1 alpine ping www.baidu.com
docker service ls

15d2b0f9ba4ce5001ec9714924c6759e.png
docker service logs test1

05b4a0d67b4b910fd43348f892a9758e.png
  • nginx的环境测试
docker service create --name nginx nginx
docker service ls

b253a3db6e1b37612b08823acee21e33.png
曾经有老铁问我,如果是容器创建了需要修改创建时候的配置怎么办,我告诉他想给当前容器做个tag打成一个镜像A,然后通过镜像A,生成新的一个新的容器在run里增加你的配置,记住前提是要把原来的容器删除。
对于docker swarm中的service 难道也需要删除?其实不需要直接通过docker service update来完成。
docker service ls
docker service update --publish-add 8080:80 nginx
docker service ls

31ccc415fab76124fd7f9ab6e1fb0c45.png
现在的nginx 太少了只有1个,如果挂了,还要打电话让人解决。其实还是有办法的。多起几个。可以多等一会,时间就不紧急了,吃了饭再过去。
docker service scale nginx=3
docker service ls

d873fb18d15a3b324af69c60d7c59141.png

f017a69ab2a79766d09aa1725049c7fc.png
  • 默认使用的Ingress下的overlay网络,两个service之前是无法通过service的名称进行访问的。可以试试。

自定义网络添加到docker swarm中。

  • 删除刚才创建nginx 和test1
docker service rm nginx test1

97897349ac1fb97e121150440b056d74.png
  • 创建网络
docker network create -d overlay idig8-overlay

04025e76ad4bd4e95d5b9569bf03273c.png
  • 创建一个service指定网络
nginx
docker service create --network idig8-overlay --name nginx -p 8080:80 nginx
alpine
docker service create --network idig8-overlay --name alpine alpine ping www.baidu.com

4feb4f814332a3bdd1ef968dbbbc16da.png
  • 查看alpine所在的机器,进入容器,ping nginx
查看是在server02这台机器上。
docker service ps alpine

d6952cd11d1d2a466033693cf897fa98.png
进入server02机器,ping 容器名称是nginx的 发现可以ping通
docker ps
docker exec -it 387dd735de74 sh
ping nginx

d5fe179affa44398520e801bc4c48de0.png

405f56268fa562ad0705a5c2bd28d58e.png

PS:当前的网络Ingress,容器之间的访问方式可以通过名字访问。在自定义的网络下swarm每个service,都创建一个dnsadress,一定要是自定义的overlay的。

  • dnsrr的方式
描述是参数不对,在dnsrr下不能开放端口的,他们之间是冲突的。dnsrr是给只通过名字访问。如果不加入overlay的网络它就是独立的。
docker service create --name nginx-b --endpoint-mode dnsrr -p  8090:80 nginx

20d1373d36f9fc30896407149fe4f3e1.png
如果想dnsrr网络可以被访问,可以针对这个service增加overlay的网络
docker service updata --network-add idig8-overlay nginx-b
  • docker stack
单机模式下,我们可以使用 Docker Compose 来编排多个服务,而在Docker Swarm 通过 Docker Stack 我们只需对已有的 docker-compose.yml 配置文件稍加改造就可以完成 Docker 集群环境下的多服务编排。
version: "3.4"
services:
  alpine:
    image: alpine
    command:
      - "ping"
      - "www.baidu.com"
    networks:
      - "idig8-overlay"
    deploy:
      replicas: 2
      restart_policy:
        condition: on-failure
      resources:
        limits:
          cpus: "0.1"
          memory: 50M
    depends_on:
      - nginx
  nginx:
    image: nginx
    networks:
      - "idig8-overlay"
    ports:
      - "8080:80"
networks:
  idig8-overlay:
    external: true

566cc411e50d739c81d391b81571d046.png
查看stack的命令,上边走的是vip负载均衡的方式而不是dnsrr的方式。
docker stack ls
# -c 文件名 组名
docker stack deploy -c service.yml  test

83edbc2b28a53a7cbe3a912fd120cb1b.png

02786c812f18b980c96340a791ecbdfb.png

789bd6a82b8d5d67d184b33ab1089713.png

PS:dockerSwarm的服务发现,负载均衡。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值