zoukankan      html  css  js  c++  java
  • Docker Swarm(一)集群部署

    一、机器环境

    • 机器规划
    172.16.0.89      swarm的manager节点      manager-node   
    172.16.0.90 swarm的node节点      node1

    机器版本(均是:CentOS Linux release 7.7.1908)

    • 设置主机名
    在manager节点上
    [root@manager-node ~]# hostnamectl --static set-hostname manager-node

    在node1节点上

    [root@node1 ~]# hostnamectl --static set-hostname node1

    在2台机器上都要设置hosts,均执行如下命令:

    vim /etc/hosts

    ......
    172.16.0.89 manager-node
    172.16.0.90 node1
    • 设置防火墙
    关闭2台机器上的防火墙。如果开启防火墙,则需要在所有节点的防火墙上依次放行2377/tcp(管理端口)、7946/udp(节点间通信端口)、4789/udp(overlay 网络端口)端口。
    [root@manager-node ~]# systemctl disable firewalld.service     --禁止firewall开机启动
    [root@manager-node ~]# systemctl stop firewalld.service        --停止firewall
    • 安装docker

    在2台机器上分别安装docker,这里使用的是【18.09.9】版本

    二、创建集群

    • 创建Swarm

    在 manager-node 节点上执行以下命令进行创建:

    docker swarm init --advertise-addr 172.16.0.89

    上面命令执行后,该机器自动加入到swarm集群。这个会创建一个集群token,获取全球唯一的 token,作为集群唯一标识。后续将其他节点加入集群都会用到这个token值(要保存好)。

    其中,--advertise-addr参数表示其它swarm中的worker节点使用此ip地址与manager联系。命令的输出包含了其它节点如何加入集群的命令:

    docker swarm join --token SWMTKN-1-2202mw1jwjmqq075ego96j8pomplqawtjrbpobmxlld0gjcau6-4bniw4tiqwa5j1iz02p65iqwj 172.16.0.89:2377
    • 查看集群信息

    执行 docker node ls 命令查看节点信息:

    docker node ls

    执行 docker info 命令查看详细信息:

    docker info

    •  添加节点到swarm集群中

    登录到node1节点上,执行前面创建swarm集群时输出的命令:

    docker swarm join --token SWMTKN-1-2202mw1jwjmqq075ego96j8pomplqawtjrbpobmxlld0gjcau6-4bniw4tiqwa5j1iz02p65iqwj 172.16.0.89:2377

    如果想要将其他更多的节点添加到这个swarm集群中,添加方法如上一致!

    然后在manager-node管理节点上看一下集群节点的状态:

    •  Node Availablity
    swarm集群中node的availability状态可以为:
    1. active:执行现有的task,且可以接受来自manager节点新的task分派;
    2. pause:现有的task继续执行,但不能指派新的task至该node,故障排除时会用到
    3. drain:把现有的task分派给其它node,且不再接受来自manager节点的任务分派,维护时会用到

    有些文章會建議維護時可以把manager node設為drain,但實際上你會需要在manager node做管理的事情,例如有monitoring tools要跑(e.g. Portainer, swarm web GUI),或是需要與swarm溝通的logging engine,這些容器可不能被停掉(drain/pause),尤其這兩個狀態如果容器出了任何問題,沒辦法重新建立,建議不要用在manager node,而是用label的方式來限制(控制)manager tasks

    示例1、下线节点:
    docker node update --availability drain node1

    如上,当node1的状态改为drain后,那么该节点就不会接受task任务分发,就算之前已经接受的任务也会转移到别的节点上。

    示例2、上线节点:

    docker node update --availability active node1

    再次修改为active状态(即将下线的节点再次上线)

    示例3、manager只作为管理节点????

    在正式的生产环境中我们都建议这么做,因为在容器编排当中,区分Worker 和Master节点的主要原因是因为Worker 只负责完成任务,启动服务,而Master则负责任务的调配,一旦Master节点也运行服务,导致Master节点负载过重,则会使集群发生崩溃,所以工作节点排除manager是很有必要的。

    docker node update --availability drain manager
    • 删除节点
    docker node rm --force node1

    • 离开集群

    在node1节点执行以下命令离开集群:

    docker swarm leave

    三、部署服务

    • 设置网络

    在启动容器之前,先来创建一个覆盖网络,用来保证在不同主机上的容器网络互通的网络模式

    docker network create -d overlay mrp_net

    查看网络是否创建成功:

    docker network ls

    • 创建服务

    在manager-node节点上使用上面这个覆盖网络创建相应的服务,我这里用的是自己的应用masl:

    docker service create --name masl -e TZ="Asia/Shanghai" --network mrp_net --replicas 2 -p 8081:8080 172.16.99.2:40305/masl:dev-yc-34

    其中,--replicas 参数指定服务由几个实例组成。

    使用 docker service ls 查看正在运行服务的列表:

    docker service ls

    使用 docker service inspect --pretty masl 查看服务信息:

    docker service inspect --pretty masl

    --pretty 使命令输出格式化为可读的格式,不加 --pretty 可以输出更详细的信息

    使用docker service ps masl 查询到哪个节点正在运行该服务。
    如下该容器被调度到manager-node节点上启动了,然后访问http://182.48.115.237即可访问这个容器应用(如果调度到其他节点,访问也是如此)
    docker service ps masl

    有上面命令可知,该服务分别在manager-node和node1节点上运行。分别登陆这2个节点,可以查看到masl容器在运行中

    登陆manager-node节点查看:

    登陆node1节点查看: 

     

    四、总结

    1、Swarm上手很简单,Docker swarm可以非常方便的创建类似kubernetes那样带有副本的服务,确保一定数量的容器运行,保证服务的高可用,但功能比较简单;

    2、Swarm、Kubernetes、Messos比较:

    • Swarm的优点和缺点都是使用标准的Docker接口,使用简单,容易集成到现有系统,但是更困难支持更复杂的调度,比如以定制接口方式定义的调度。
    • Kubernetes 是自成体系的管理工具,有自己的服务发现和复制,需要对现有应用的重新设计,但是能支持失败冗余和扩展系统。
    • Mesos是低级别 battle-hardened调度器,支持几种容器管理框架如Marathon, Kubernetes, and Swarm,现在Kubernetes和Mesos稳定性超过Swarm,在扩展性方面,Mesos已经被证明支持超大规模的系统,比如数百数千台主机,但是,如果你需要小的集群,比如少于一打数量的节点服务器数量,Mesos也许过于复杂了
     
     
     
    参考资料:
  • 相关阅读:
    stm32之PWM博客好文收藏
    CSDN怎么转载别人的博客
    STM32F103单片机学习—— 通用定时器
    STM32 通用定时器好文章收藏
    stm32基本定时器timer6的原理与使用
    freertos优秀博客收藏
    StretchBlt函数和BitBlt函数的用法
    对话框添加背景图片
    vc 使窗口置顶 在最前面
    CWnd::MoveWindow 详解
  • 原文地址:https://www.cnblogs.com/caoweixiong/p/12362880.html
Copyright © 2011-2022 走看看