美文网首页
docker(五)docker编排

docker(五)docker编排

作者: 7ColorLotus | 来源:发表于2020-06-06 16:36 被阅读0次
    • compose大杀器编排服务
      1. linux下安装:
          a,在 Linux 64 位系统上直接下载对应的二进制包
           sudo curl -L https://github.com/docker/compose/releases/download/1.17.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
           sudo chmod +x /usr/local/bin/docker-compose
          b,pip安装
           sudo pip install -U docker-compose
           //bash 补全命令
           curl -L https://raw.githubusercontent.com/docker/compose/1.8.0/contrib/completion/bash/docker-compose > /etc/bash_completion.d/docker-compose
      
      1. linux下卸载
            a,二进制卸载
                sudo rm /usr/local/bin/docker-compose
            b,pip卸载
                sudo pip uninstall docker-compose
      
    • dock-swarm
      1. Swarm是Docker官方提供的一款集群管理工具,其主要作用是把若干台Docker主机抽象为一个整体,并且通过一个入口统一管理这些Docker主机上的各种Docker资源。Swarm和Kubernetes比较类似,但是更加轻,具有的功能也较kubernetes更少一些。

      2. swarm的特性
        a, 与docker集成的集群管理工具
        b, 去中心化设计,只使用docker引擎即可创建各类节点
        c, 声明式服务模型。可以声明的方式来定义应用。
        d, 动态伸缩。管理节点自动调整服务数量。
        e, 高可用,对于服务期望状态做到动态调整,swarm的管理节点会持续监控集群状态,集群中有没有达到期望状态的服务,管理节点会自动调度来达到期望状态。
        f, 自定义网络。可以为你的服务指定一个网络,容器创建的时候分配一个IP
        g, 服务发现。管理节点给集群中每个服务一个特定的DNS名字,并给运行的容器提供负载均衡。
        h, 负载均衡。你可以暴露服务端口给外部的负载均衡。内部swarm提供可配置的容器分配到节点的策略。
        i, 默认的安全机制。swarm集群中各个节点强制TLS协议验证。连接加密,你可以自定义根证书。
        j, 滚动更新。增量跟新,可以自定义更新下个节点的时间间隔,如果有问题,可以会滚到上个版本。

      3. swarm集群节点必须开放的端口
        a, TCP port 2377为集群管理通信
        b, TCP and UDP port 7946 为节点间通信
        c, UDP port 4789 为网络间流量

      4. 创建swarm集群操作,高版本默认自带swarm
        1)在manager节点运行以下命令来创建一个新的swarm集群

           docker swarm init --advertise-addr 192.168.19.22
           a,--advertise-addr选项表示管理节点公布它的IP是多少。其它节点必须能通过这个IP找到管理节点。
           b,命令输出了加入swarm集群的命令。通过--token选项来判断是加入为管理节点还是工作节点
        

        2)运行docker node ls来查看节点信息

           a, nodeId旁边的*号表示你当前连接到的节点。
           b, docker引擎的swarm模式自动使用宿主机的主机名作为节点名。
        

        3)将节点加入到swarm集群中

           a, 在manager节点查看加入swarm集群的命令:docker swarm join-token worker
           b, 在work节点执行命令加入:docker swarm join --token SWMTKN-1-2bgkinnbc0rmlj6kpotyrlj0uz51l2ikinttsk960dxro558x4-6zajfnahtv9ye39momd
        

        4)到manage节点查询节点信息

           a, 执行命令:docker node ls
           b, MANAGER列表明了集群中的管理节点。worker节点的空意味着它们是工作节点
        

        5)使用命令的方式部署服务

           a,在manager节点执行:docker service create --replicas 1 --name helloworld alpine
               (1)docker service create用来创建服务
               (2)--name表明服务名字是helloworld
               (3)--replicas 表示期望1个服务实例
               (4)alpine ping docker.com 表示运行镜像是alpine,命令是ping
           b,查看运行的服务:docker service ls
           c,查看优化显示的服务详情:docker service inspect --pretty <serviceID>
           d,在swarm集群中动态伸缩服务实例数:docker service scale 060zo3u0g3mj=3
           e,从swarm集群上删除应用:docker service rm helloworld。尽管服务不存在了,任务容器还需要几秒钟来清理,可以在节点上docker ps查看任务什么时候被移除
        

        6)使用yml文件里创建服务,以在3个节点运行guns项目为例,创建yml文件,内容如下:

           version: "3"
        
           services:
             guns-admin:                                    
               image: guns-admin:latest                        
               ports:
                 - 8080:8080
               networks:
                 - myoverlay
               volumes:
                 - /opt/logs/guns-admin:/opt/logs/guns-admin
               environment:
                 - spring_datasource_url=jdbc:mysql://192.168.19.22:3306/guns?autoReconnect=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false
                 - spring_datasource_username=root
                 - spring_datasource_password=root
                 - logging_path=/opt/logs/guns-admin/
                 - JAVA_OPTS= -Duser.timezone=GMT+08 -Xms128m -Xmx1024m
               deploy:
                 mode: replicated
                 replicas: 3
                 labels: [APP=guns-admin]
                 restart_policy: 
                   condition: any
           networks:
             myoverlay:
               external:
                 name: myoverlay
        

        7)以上一个例子为例创建overlay网络,方便容器之间通信

           a,执行命令:docker network create --driver overlay myoverlay
           b,查看网络:docker network ls
           c,将现有服务连接到overlay网络: docker service update --network-add my-network hello
           d,删除正在运行的网络连接:docker service update --network-rm my-network hello
           e,如果使用overlay和swarm运行的容器无法ping通外网或局域网内的其他机器,可以使用systemctl docker restart 重启docker后重试
        

        8)滚动更新

           a,配置更新间隔:docker service create --replicas 2 --name ghost --update-delay 10s ghost:0.11.12
               (1)在服务部署阶段就指定滚动升级策略
               (2)--update-delay配置了更新服务的时间间隔,你可以指定时间T为秒是Ts,分是Tm,或时是Th,所以10m30s就是10分30秒的延迟
               (3)默认的调度器scheduler一次更新一个任务.你可以传入参数--update-parallelism来配置调度器同时更新的最大任务数量 
               (4)默认的当一个更新任务返回RUNNING状态后,调度器才调度另一个更新任务,直到所有任务都更新了。如果更新过程中任何任务返回了FAILED,调度器就会停止更新。你可以给命令docker service create or docker service update配置配置--update-failure-action,来配置这个行为。
           b,更新redis的容器镜像: docker service update --image ghost:1.21.3 ghost
               (1)停止第一个任务
               (2)对停止的任务进行更新
               (3)对更新的任务进行启动
               (4)如果更新的任务返回RUNNING,等待特定间隔后启动下一个任务
               (5)如果在任何更新的时间,任务返回了FAILED,则停止更新。
           c,docker service ps 来查看本次滚动更新的过程:docker service ps ghost
           d,注意升级后老的容器只是停止了,并没有删除
        

        9)运行docker node update --availability drain 来下线一个节点:docker node update --availability drain default
        10)运行docker node update --availability active 来重新active该节点:docker node update --availability active default
        11)当节点重新active的时候,在以下情况下它会重新接受任务:

           a,当一个服务缩容扩容时
           b,在滚动更新的时候
           c,当另一个节点Drain下线的时候
           d,当一个任务在另一个active节点上运行失败的时候
        

        12)为服务曝露端口:docker service update --publish-add published=8080,target=2368 ghost

    相关文章

      网友评论

          本文标题:docker(五)docker编排

          本文链接:https://www.haomeiwen.com/subject/rltftktx.html