一、简介

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!!),我的显示如下:

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

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

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

三、初始网络

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 就是网络的名称

四、管理集群

  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

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

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

承上启下

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

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

五、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的更多相关文章

  1. Docker集群管理(一)—— 基础docker+swarm+shipyard

    目的 学习docker的集群管理,摸索出高可用的docker微服务架构方案.本篇文章只初步的了解下swarm(docker新版已集成了swarm)的使用,了解docker的发现服务的基础方法(dock ...

  2. docker集群管理

    docker集群管理 ps:docker machine     docker swarm       docker compose  在Docker Machine发布之前,你可能会遇到以下问题: ...

  3. docker集群管理之kubernetes

    一.简介 kubernetes又叫做k8s,是Google开发的一款开源的docker集群管理工具,在这里对它的“发家史”,我不做过多的阐述,有时间大家可以自己去百度一下: 下面我要讲的就是容易混淆的 ...

  4. 基于zookeeper+mesos+marathon的docker集群管理平台

    参考文档: mesos:http://mesos.apache.org/ mesosphere社区版:https://github.com/mesosphere/open-docs mesospher ...

  5. Docker容器集群管理之Swarm

    Docker容器集群管理主流方案 Swarm Docker公司自研发的集群管理系统. Kubernetes Google开源的一个容器集群管理系统,用于自动化部署.扩展和管理容器应用.也称为K8S ...

  6. Docker集群管理(三)—— docker swarm mode基础教程

    docker从1.12版(及后续版本)集成了swarmkit.可以方便的实现docker集群.它有哪些特点呢: 集成了集群功能 分散设计:manager和worker两种节点. 声明式服务模式 可伸缩 ...

  7. Docker集群管理(二)—— docker+swarm+etcd+shipyard

    引言 前一篇介绍如何简单的搭建一个可视化管理的docker集群,本篇将在此基础之上引入etcd发现服务. 目的 使用etcd发现服务解决swarm内置发现服务的不稳定问题.etcd采用raft算法,这 ...

  8. Centos下安装Docker集群管理工具Shipyard

    一. Docker Shipyard是什么 ? shipyard是一个开源的docker管理平台,其特性主要包括: 支持镜像管理.容器管理. 支持控制台命令 容器资源消耗监控 支持集群swarm,可以 ...

  9. Docker集群管理工具 - Kubernetes 部署记录 (运维小结)

    一.  Kubernetes 介绍 Kubernetes是一个全新的基于容器技术的分布式架构领先方案, 它是Google在2014年6月开源的一个容器集群管理系统,使用Go语言开发,Kubernete ...

随机推荐

  1. Jmeter断言-所有断言讲解

    Jmeter断言-所有断言讲解 jmeter中有个元件叫做断言(Assertion),它的作用和loadrunner中的检查点类似: 用于检查测试中得到的响应数据等是否符合预期,用以保证性能测试过程中 ...

  2. delphi基础篇之数据类型之三:3.结构类型(Struct)

    3.结构类型(Struct) 结构类型在内存中存储一组相关的数据项,而不是像简单数据类型那样单一的数值.结构数据类型包括:集合类型.数组类型.记录类型.文件类型.类类型.类引用类型和接口类型等.

  3. 1060 Are They Equal (25 分)

    1060 Are They Equal (25 分)   If a machine can save only 3 significant digits, the float numbers 1230 ...

  4. spring boot下WebSocket消息推送

    WebSocket协议 WebSocket是一种在单个TCP连接上进行全双工通讯的协议.WebSocket通信协议于2011年被IETF定为标准RFC 6455,并由RFC7936补充规范.WebSo ...

  5. springbot项目中使用继承

    package com.example.demo.controller; import com.sun.org.apache.bcel.internal.generic.NEW; import org ...

  6. openssl编译方法

    受不了了,终于编译成功了openssl,写一下编译方法吧 准备: 0:要编译openssl,必不可少的是代码,去下载 https://www.openssl.org/source/ 1:要有一个VS系 ...

  7. 微信小程序开发显示城市天气

    本案例实现动态显示城市天气的功能,案例效果如下: 首先分析制作的思路: 1.在app.json文件的pages数组里加上main文件夹和template(模板)文件夹的路径. 2.在main.js文件 ...

  8. leetcood学习笔记-404-左叶子之和

    题目描述: 方法一:递归 class Solution: def sumOfLeftLeaves(self, root: TreeNode) -> int: if not root: retur ...

  9. Python 爬取拉钩网工作岗位

    如果拉钩网html页面做了调整,需要重新调整代码 代码如下 #/usr/bin/env python3 #coding:utf-8 import sys import json import requ ...

  10. mysql在win系统dos 安装版配置步骤详解

    1.准备工作 下载mysql的最新免安装版本mysql-noinstall-5.1.53-win32.zip,解压缩到相关目录,如:d:\ mysql-noinstall-5.1.53-win32.这 ...