继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

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

慕哥9229398
关注TA
已关注
手记 1245
粉丝 199
获赞 913

webp

server01

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

docker version

webp

默认情况下network的结构

docker network ls

webp

查看ip地址

ifconfig

webp

设置manager,初始化manager节点,添加一个work在swarm上,运行下面的命令可以添加work,加入到这个manage中。

docker swarm init --advertise-addr 192.168.66.101

webp

server02

执行添加到manager的命令。

webp

server03

执行添加到manager的命令。

webp

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

之前是只有三个,一个bridge,一个host,一个none;多了个docker_gwbridge,一个ingress。

ingress的overlay网络,这个网络需要借助docker-gwbridge这个网桥进行连接。如果是

docker network ls

webp

docker swarm的如何高可用

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

docker node ls

webp

升级server02成为manager。变成了Reachable,这个跟zookeeper的原理是一样的,当一个leader挂了之后,通过选取可以产生一个新的leader。

docker node promote docker-swarm-02
docker node promote docker-swarm-03

webp

webp

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

测试集群环境

  • 小的镜像测试

创建一个小的镜像,完成ping www.baidu.com

docker service create --name test1 alpine ping www.baidu.com
docker service ls

webp

docker service logs test1

webp

  • nginx的环境测试

docker service create --name nginx nginx
docker service ls

webp

曾经有老铁问我,如果是容器创建了需要修改创建时候的配置怎么办,我告诉他想给当前容器做个tag打成一个镜像A,然后通过镜像A,生成新的一个新的容器在run里增加你的配置,记住前提是要把原来的容器删除。

对于docker swarm中的service 难道也需要删除?其实不需要直接通过docker service update来完成。

docker service ls
docker service update --publish-add 8080:80 nginx
docker service ls

webp

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

docker service scale nginx=3
docker service ls

webp

webp

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

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

  • 删除刚才创建nginx 和test1

docker service rm nginx test1

webp

  • 创建网络

docker network create -d overlay idig8-overlay

webp

  • 创建一个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

webp

  • 查看alpine所在的机器,进入容器,ping nginx

查看是在server02这台机器上。

docker service ps alpine

webp

进入server02机器,ping 容器名称是nginx的 发现可以ping通

docker ps
docker exec -it 387dd735de74 sh
ping nginx

webp

webp

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

  • dnsrr的方式

描述是参数不对,在dnsrr下不能开放端口的,他们之间是冲突的。dnsrr是给只通过名字访问。如果不加入overlay的网络它就是独立的。

docker service create --name nginx-b --endpoint-mode dnsrr -p  8090:80 nginx

webp

如果想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

webp

查看stack的命令,上边走的是vip负载均衡的方式而不是dnsrr的方式。

docker stack ls# -c 文件名 组名docker stack deploy -c service.yml  test

webp

webp



作者:IT人故事会
链接:https://www.jianshu.com/p/ba27537fb569


打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP