docker集群管理之swarm

1、简介node

       docker集群管理工具备swarm、k8s、mesos等,我所用到的是swarm和k8s,这篇文章主要介绍swarm;swarm是docker集成的原生linux

       管理工具,只要你安装上docker以后,就能够直接使用docker swarm -h 来查看用法web

2、组建集群redis

       刚刚已经说过swarm是原生集成的,因此搭建起来也是比较简单的,咱们在manager节点只须要运行docker swarm init --advertise-addr  IP地址docker

       就能够生成一个token串,和一个node节点加入manager节点的命令(so easy!!),个人显示以下:网络

       你只要把这行命令在node节点执行就能够了,前提是执行成功哈,若是不成功,看是否是防火墙或者selinux的缘由;node节点执行完以后,工具

       你就能够在manager节点执行docker node ls进行查看了,其中个人节点以下:spa

       状态值为Ready说明node节点时可用的,下面咱们开始建立集群3d

3、初始网络日志

         docker network ls就能够查看网络信息,以下图所示(红色框内表示创建swarm以前的网络):

         若是你想查看某个网络的详细信息,使用docker network inspsct 网络名 , 就能够了;那个ngx_net是本身建立的网络,下面咱们看下

    怎么建立一个自定义的网络:

         docker network create --driver overlay  --subnet 10.10.19.0/24 ngx_net

         诠释:

         --driver  指定网络存储驱动是overlay的形式,存储驱动有aufs、overlay、zfs等,后面会介绍

指定overlay驱动以后你会发现scope是swarm,这是swarm集群所独特的,不能改变,只能如此!!!!

 --subnet 指定网络的IP地址段

 ngx_net 就是网络的名称

4、管理集群

  1.        本实例使用的有三个node节点(主机名分别为:redis13六、redis13七、redis138),manager节点的主机名为jenkins
  2.        我直接上我写的例子,而后再描述里面的参数含义:

manager节点执行:docker service create --name byit-config  --network ngx_net -p 3001:3001  --replicas 1 10.0.10.133:5000/byit-config

                             诠释

 docker service create 意思是建立一个service,而后在node节点上建立容器

                                        --name 是指定service的名称

                                        --network 是指定本身建立的网络,若是不指定就会默认使用ingress网络,

 -p  指定宿主机端口:容器端口,这一步就至关于咱们以前使用iptables作的端口映射

 --replicas 1  意思就是在这三个node节点上只建立一个容器,具体建立到那一台,目前还不知道

 10.0.10.133:5000/byit-config   这个就是我要从私有仓库中下载的镜像

如今咱们在master节点上就能够查看到service了,docker service ls

其中第二个就是咱们建立的service,若是咱们想看它部署到了那台node节点上了,咱们能够经过docker service inspect byit-config来查看

固然,也能够经过这个命令来查看没部署成功的日志信息,你们能够看到个人是部署到了redis136这个节点上了:

承上启下

那个--replicas指定为1,就是说部署一个容器,当redis136上这个容器挂掉以后,会尝试重启或者在其它node节点再建立一个容器,

总而言之就是,在这个集群环境中要维持一个byit-config容器的启动,swarm才会罢休

5、swarm调度策略

部署容器到指定的node上:

方法一

docker node update --label-add env=test  (redis136 |redis137)       #能够把label加到一台或者多台node上

而后在你docker service create 的时候,加上--constraint node.labels.env==test选项就能够了

docker service update --constraint-rm node.labels.env==test my_web      

docker service update --constraint-add node.labels.env==prod  my_web   #两个步骤实现了pod的迁移工做

方法二

在docker service create 的时候加上--constraint 'node.hostname==redis136',就能够指定部署容器到指定节点

6、总结

若是咱们想把这个service中的容器个数提高到2个,能够这样作:docker service byit-config scale=2就能够了;

swarm最简单的集群搭建以及管理就是这样的,咱们还可使用compose的yaml,而后docker stack *.yaml去建立,

后面我会单独再写一篇文章,介绍docker的三剑客:swarm、compose、machine(这个我没用,只作简单的介绍)

相关文章
相关标签/搜索