博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
『高级篇』docker之DockerSwarm的集群环境搭建(28)
阅读量:6112 次
发布时间:2019-06-21

本文共 3399 字,大约阅读时间需要 11 分钟。

原创文章,欢迎转载。转载请注明:转载自,谢谢!

原文链接地址:

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

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

server01

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

docker version

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

默认情况下network的结构

docker network ls

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

查看ip地址

ifconfig

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

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

docker swarm init --advertise-addr 192.168.66.101

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

server02

执行添加到manager的命令。

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

server03

执行添加到manager的命令。

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

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

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

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

docker network ls

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

docker swarm的如何高可用

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

docker node ls

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

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

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

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

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

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

测试集群环境

  • 小的镜像测试

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

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

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

``` 查看日志

docker service logs test1

![](https://upload-images.jianshu.io/upload_images/11223715-f6ac8c36146450df.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)* nginx的环境测试``` bashdocker service create --name nginx nginxdocker service ls

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

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

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

docker service lsdocker service update --publish-add 8080:80 nginxdocker service ls

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

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

docker service scale nginx=3docker service ls

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

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

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

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

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

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

  • 创建网络

    docker network create -d overlay idig8-overlay

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

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

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

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

    查看是在server02这台机器上。

docker service ps alpine

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

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

docker psdocker exec -it 387dd735de74 shping nginx

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

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

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

  • dnsrr的方式

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

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

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

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

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

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

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

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

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

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

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

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

转载于:https://blog.51cto.com/12040702/2350041

你可能感兴趣的文章
【Git入门之四】操作项目
查看>>
老男孩教育每日一题-第107天-简述你对***的理解,常见的有哪几种?
查看>>
Python学习--time
查看>>
在OSCHINA上的第一篇博文,以后好好学习吧
查看>>
高利率时代的结局,任重道远,前途叵测
查看>>
Debian 6.05安装后乱码
查看>>
欢迎大家观看本人录制的51CTO精彩视频课程!
查看>>
IntelliJ IDEA中设置忽略@param注释中的参数与方法中的参数列表不一致的检查
查看>>
关于软件开发的一些感悟
查看>>
uva 10806
查看>>
纯CSS3绘制的黑色图标按钮组合
查看>>
Linux中环境变量文件及配置
查看>>
从0开始学Flutter
查看>>
mysql操作入门基础之对数据库和表的增删改查
查看>>
IIS负载均衡
查看>>
分布式事务,EventBus 解决方案:CAP【中文文档】
查看>>
Linux下的CPU性能瓶颈分析案例
查看>>
spring mvc入门
查看>>
2012在数据库技术会议上的讲话PPT打包
查看>>
【Android】 TextView设置个别字体样式
查看>>