• 同一个Docker swarm集群中部署多版本的测试环境


    先介绍下用到的技术

    Docker swarm: Docker官方的集群管理工具,相比kubernetes更加简单,容易入门。https://docs.docker.com/engine/swarm/

    Traefik: 一个现代化的反向代理工具,原生支持Docker swarm模式,可以实现swarm的动态代理。https://docs.traefik.io/user-guide/swarm-mode/

     
    下图展示主要的思路:
    在Docker swarm中创建某个测试版本service时,通过设置service的Label来指定该版本监听的域名如master分支下设置Host:master.quanqiuzhu.com vNext分支下设置Host:vnext.quanqiuzhu.com
    Traefik通过监听swarm中docker container(service)的创建、关闭事件,并根据container(service)中label的设定来动态实现代理。
     
    实战:
    1. 准备docker swarm测试环境
         docker swarm init     初始化一个swarm集群, 并把当前主机设置为swarm manager。如果想让其它机器加入该集群,可以执行以下命令
         docker swarm join-toker worker     可以输出加入该集群并作为worker角色的命令,如下:
         
         可以在另外一个安装了docker的物理机(或虚拟机)上执行以上命令,就会加入该集群。
         在该示例中,不要求必须是两台或以上的机器组成的集群,只有一台manager机器也可以。
    2. 创建一个docker swarm network, traefik反向代理和我们web服务都要用这个network
        docker network create --driver=overlay test-traefik     network的名字是test-traefik
    3. 创建trafik反向代理service
        在swarm的manager机器上执行以下命令
         docker service create
        --name traefik
        --constraint=node.role==manager
        --publish 80:80 --publish 8080:8080
        --mount type=bind,source=/var/run/docker.sock,target=/var/run/docker.sock
        --network test-traefik
        traefik
        --docker
        --docker.swarmmode
        --docker.domain=traefik
        --docker.watch
        --web
         启动后,可以通过http://{manager-ip}:8080/来访问trafik的web监控界面,可以动态看到反向代理的配置
    4. 在swarm中创建我们自己的应用程序service, 运行不同分支(master/vnext)打包镜像的应用程序,实现在同一套swarm集群中部署不同分支的测试环境。
         下面演示运行master和vnext分支的应用程序。
         我这里有一个web和grpcservice程序, web 程序需要调用grpcservice。所以有两个image web和grpcservice
         下面基于docker-compose文件来部署我们的web和service的image,如下分别是master分支和vnext分支对应的部署compose文件,通过label指定监听的域名。
         下图示例用了相同的image,实际上应该是master使用master分支对应的image, vnext使用vnext分支的image
            
    1. 修改本机host文件,把www.vnext.quanqiuzhu.com和www.master.quanqiuzhu.com的域名指向manager对应的机器ip
             如果上一步使用的image不同的话,就可以看到不同分支对应的效果了
        
  • 相关阅读:
    我对IOC控制反转,依赖注入原理的理解
    .net带事件的对象BinaryFormatter 序列化失败
    (维权成功,链接已经被删除了)如何防止自己的原创文章被垃圾站IT165采集和盗用
    浅谈.net多线程机制
    给现下流行的打车软件的一点小建议
    C#应用MemoryStream提高File读取速度
    微软真的要抛弃Silverlight了吗?
    C# File.Copy 实现磁盘间文件备份
    遮罩層 日曆效果
    GridView導出Excel
  • 原文地址:https://www.cnblogs.com/xiao123/p/7074819.html
Copyright © 2020-2023  润新知