docker集群管理之swarm
一、简介
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 就是网络的名称
四、管理集群
- 本实例使用的有三个node节点(主机名分别为:redis136、redis137、redis138),manager节点的主机名为jenkins
- 我直接上我写的例子,然后再描述里面的参数含义:
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的更多相关文章
- Docker集群管理(一)—— 基础docker+swarm+shipyard
目的 学习docker的集群管理,摸索出高可用的docker微服务架构方案.本篇文章只初步的了解下swarm(docker新版已集成了swarm)的使用,了解docker的发现服务的基础方法(dock ...
- docker集群管理
docker集群管理 ps:docker machine docker swarm docker compose 在Docker Machine发布之前,你可能会遇到以下问题: ...
- docker集群管理之kubernetes
一.简介 kubernetes又叫做k8s,是Google开发的一款开源的docker集群管理工具,在这里对它的“发家史”,我不做过多的阐述,有时间大家可以自己去百度一下: 下面我要讲的就是容易混淆的 ...
- 基于zookeeper+mesos+marathon的docker集群管理平台
参考文档: mesos:http://mesos.apache.org/ mesosphere社区版:https://github.com/mesosphere/open-docs mesospher ...
- Docker容器集群管理之Swarm
Docker容器集群管理主流方案 Swarm Docker公司自研发的集群管理系统. Kubernetes Google开源的一个容器集群管理系统,用于自动化部署.扩展和管理容器应用.也称为K8S ...
- Docker集群管理(三)—— docker swarm mode基础教程
docker从1.12版(及后续版本)集成了swarmkit.可以方便的实现docker集群.它有哪些特点呢: 集成了集群功能 分散设计:manager和worker两种节点. 声明式服务模式 可伸缩 ...
- Docker集群管理(二)—— docker+swarm+etcd+shipyard
引言 前一篇介绍如何简单的搭建一个可视化管理的docker集群,本篇将在此基础之上引入etcd发现服务. 目的 使用etcd发现服务解决swarm内置发现服务的不稳定问题.etcd采用raft算法,这 ...
- Centos下安装Docker集群管理工具Shipyard
一. Docker Shipyard是什么 ? shipyard是一个开源的docker管理平台,其特性主要包括: 支持镜像管理.容器管理. 支持控制台命令 容器资源消耗监控 支持集群swarm,可以 ...
- Docker集群管理工具 - Kubernetes 部署记录 (运维小结)
一. Kubernetes 介绍 Kubernetes是一个全新的基于容器技术的分布式架构领先方案, 它是Google在2014年6月开源的一个容器集群管理系统,使用Go语言开发,Kubernete ...
随机推荐
- fatal error C1047: 对象或库文件“.\x64\Release\Des.obj”是使用比创建其他对象所用编译器旧的编译器创建的;请重新生成旧的对象和库
问题描述: 在把一个32位的dll编译成64位的时候提示上面的错误 解决办法: >属性->常规->项目默认值->全程序优化 将这里的默认项 "使用链接时间代码生成& ...
- 工具类--Excel 导出poi
实现功能 --批量导出excel 文件,配置一个sheet多少条数据,根据查询数据量的多少确定生成几个sheet页. pom 文件导入ExcelUtils工具包,依赖于poi包. <!-- ht ...
- 命令行启动tomcat
windows下进入CMD启动.window+r打开命令窗口具体步骤:1:在命令行中输入Tomcat安装的磁盘:E:2:进入Tomcat的主安装目录:cd Tomcat3:进入bin文件夹:cd bi ...
- vim + ctag + Taglist (转)
一.ctag 当然,第一步就是要下载它!一条命令搞定: $sudo apt-get install ctags 如果不幸提示找不到软件包ctags,首先你也许应该update一下你的软件源,还不行的话 ...
- response和ServletContext和乱码问题
服务器端以/开始就代表当前项目名客户端必须以 /项目名/资源 才能定位到资源 软件与软件之间,以字符为标准传递,传递字节,接收端自己按原来的编码集编码之后再按照自己的编码集解码编码(如果没有对应字符, ...
- org.apache.hadoop.hbase.master.HMasterCommandLine: Master exiting java.lang.RuntimeException: HMaster Aborted
前一篇的问题解决了,是 hbase 下面lib 包的jar问题,之前写MR的时候加错了包,替换掉了原来的包后出现另一问题:@ubuntu:/home/hadoop/hbase-0.94.6-cdh4. ...
- leetcode.字符串.242有效的字母异位词-Java
1. 具体题目 给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词. 注:判断两个字符串包含的字母是否完全一样. 示例 1: 输入: s = "anagram&q ...
- mongo之$rename更新一个字段的名称(可批量)
$rename操作逻辑执行$unset 老名称和新的名称,然后执行 $set新名称运行.因此,操作可能不保留文档中字段的顺序; 即重命名的字段可以在文档内移动. 1.重命名字段:一级字段 格式: db ...
- 初识webSocket及其使用
阅读目录 1.什么是webSocket? 2.webSocket实现原理 3.webSocket优点 4.webSocket和socket的区别 5.webSocket API 6.webSocket ...
- vue中axios的封装以及简单使用
一.axios的封装 在vue中为了使用axios使用方便,不需要每一个模块进行导入,就需要对其进行封装: 1.新建http.js模块 import axios from 'axios' // 设置基 ...