docker集群管理之swarm

摘要:
1、 Docker集群管理器包括swarm、k8s、mesos等。我使用swarm和k8s。本文主要介绍了swarm;Swarm是一种用于码头工人集成的本地管理工具。只要安装docker,就可以直接使用dockerswam-h查看用法。2.构建集群刚刚说过Swarm是本地集成,因此构建起来也相对简单。我们可以通过运行dockerswaminit--在管理器节点上通告addrIP地址,以及一个节点节点来加入管理器节点命令(soeasy!!

一、简介

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

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

二、组建集群

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

       就可以生成一个token串,和一个node节点加入manager节点的命令(so easy!!),我的显示如下:

docker集群管理之swarm第1张

       你只要把这行命令在node节点执行就可以了,前提是执行成功哈,如果不成功,看是不是防火墙或者selinux的原因;node节点执行完之后,

       你就可以在manager节点执行docker node ls进行查看了,其中我的节点如下:

docker集群管理之swarm第2张

       状态值为Ready说明node节点时可用的,下面我们开始创建集群

三、初始网络

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

docker集群管理之swarm第3张

         如果你想查看某个网络的详细信息,使用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 就是网络的名称

四、管理集群

  1.        本实例使用的有三个node节点(主机名分别为:redis136、redis137、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

docker集群管理之swarm第4张

其中第二个就是我们创建的service,如果我们想看它部署到了那台node节点上了,我们可以通过docker service inspect byit-config来查看

当然,也可以通过这个命令来查看没部署成功的日志信息,大家可以看到我的是部署到了redis136这个节点上了:

承上启下

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

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

docker集群管理之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',就可以指定部署容器到指定节点

六、总结

如果我们想把这个service中的容器个数提升到2个,可以这样做:docker service byit-config scale=2就可以了;

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

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

免责声明:文章转载自《docker集群管理之swarm》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇图表自动轮播Bypass_disable_func下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Ubuntu18.04安装Docker

由于apt官方库里的docker版本可能比较旧,所以先卸载可能存在的旧版本: $ sudo apt-get remove docker docker-engine docker-ce docker.io 第一种方法从Ubuntu的仓库直接下载安装: 安装比较简单,这种安装的Docker不是最新版本,不过对于学习够用了,依次执行下面命令进行安装。 $ sud...

docker-java Docker的java API

docker-java docker-java 是 Docker的 Java 版本API Docker 当前的实现基于 Jersey 2.x 因此 classpath 不兼容老版本的 Jersey 1.x ! 开发者论坛 docker-java ChangelogWiki 版本支持 Supports a subset of the Docker Remot...

macOS 系统更新node老是不成功

 使用网上的方法,更新macOS系统上的node,总是不成功。   每次打开新的终端,node -v 都会显示之前的版本v8.11.4。。咋回事!!!     【方法】:    直接卸载 node(要卸载干净!)         但是通过 终端的命令行也难以卸载干净:MacOS X 10.10卸载Node      试了这个方法也不行:mac安装nod...

如何修改已有的ONNX模型

简单来说,我们只需要学习一下把大象如何放进冰箱的就行了: 1、把冰箱门打开 使用onnx的原生接口: onnx_model = onnx.load(onnx_path) graph = onnx_model.graph 这样我们就可以将模型load出来,并且到到graph信息。 2、把大象放进去 这一步相对来说选择就比较多了,比如你可以选择删除一些节点,...

node开发指南

Node.js 能做什么 正如 JavaScript 为客户端而生,Node.js 为网络而生。Node.js 能做的远不止开发一个网站那么简单,使用 Node.js,你可以轻松地开发: 具有复杂逻辑的网站; 基于社交网络的大规模 Web 应用; Web Socket 服务器; TCP/UDP 套接字应用程序; 命令行工具; 交互式终端程序; 带有图形用户...

idea连接docker实现一键部署

一、修改配置文件,打开2375端口 [root@microservice ~]# vim /usr/lib/systemd/system/docker.service 在ExecStart=/usr/bin/dockerd-current 后面多加上一个原来的不用动 -H tcp://0.0.0.0:2375 重新加载配置文件和启动: systemctl...