docker--搭建docker swarm集群
10 搭建docker swarm集群
10.1 swarm 介绍
Swarm这个项目名称特别贴切。在Wiki的解释中,Swarm behavior是指动物的群集行 为。比如我们常见的蜂群,鱼群,秋天往南飞的雁群都可以称作Swarm behavior。 Swarm项目正是这样,通过把多个Docker Engine聚集在一起,形成一个大的docker- engine,对外提供容器的集群服务。同时这个集群对外提供Swarm API(命令,docker engine的命令),用户可以像使用Docker Engine一样使用Docker集群。
Swarm 是Docker公司在2014年12月初发布的容器管理工具,和Swarm一起发布的 Docker管理工具还有Machine以及Compose。Swarm是一套较为简单的工具,用以管理 Docker集群,使得Docker集群暴露给用户时相当于一个虚拟的整体。Swarm将一群 Docker宿主机变成一个单一的,虚拟的主机。Swarm使用标准的Docker API接口作为其 前端访问入口,换言之,各种形式的Docker Client(docker client in Go, docker_py, docker等)均可以直接与Swarm通信。Swarm几乎全部用Go语言来完成开发,Swarm0.2 版本增加了一个新的策略来调度集群中的容器,使得在可用的节点上传播它们,以及支 持更多的 Docker命令以及集群驱动。Swarm deamon只是一个调度器(Scheduler)加 路由器(router),Swarm自己不运行容器,它只是接受docker客户端发送过来的请求, 调度适合的节点来运行容器,这意味着,即使Swarm由于某些原因挂掉了,集群中的节 点也会照常运行,当Swarm重新恢复运行之后,它会收集重建集群信息。

docker swarm特点: 1) 对外以Docker API接口呈现,这样带来的好处是,如果现有系统使用Docker Engine, 则可以平滑将Docker Engine切到Swarm上,无需改动现有系统。 2) Swarm对用户来说,之前使用Docker的经验可以继承过来。非常容易上手,学习成本 和二次开发成本都比较低。同时Swarm本身专注于Docker集群管理,非常轻量,占用资 源也非常少。简单说,就是插件化机制,Swarm中的各个模块都抽象出了API,可以根据 自己一些特点进行定制实现。 3) Swarm自身对Docker命令参数支持的比较完善,Swarm目前与Docker是同步发布 的。Docker的新功能,都会第一时间在Swarm中体现。
10.2 docker swarm 架构
Swarm作为一个管理Docker集群的工具,首先需要将其部署起来,可以单独将Swarm部 署于一个节点。另外,自然需要一个Docker集群,集群上每一个节点均安装有Docker。



相关术语:
Swarm Manager :集群的管理工具,通过swarm manager管理多个节点。
Node :是已加入到swarm的Docker引擎的实例 。
manager nodes :也就是管理节点 ,执行集群的管理功能,维护集群的状态, 选举一个leader节点去执 行调度任务
worker nodes ,也就是工作节点 ,接收和执行任务。参与容器集群负载调度, 仅用于承载task

一个服务是工作节点上执行任务的定义。创建一个服务,指定了容器所使用的镜像和 容器运行的命令。service是运行在worker nodes上的task的描述,service的描述包 括使用哪个docker 镜像,以及在使用该镜像的容器中执行什么命令。

task 任务:一个任务包含了一个容器及其运行的命令。task是service的执行实体, task启动docker容器并在容器中执行任务

4.3 docker swarm 使用
docker --version
docker version
vi /etc/hostname
init 6
hostname
systemctl start docker
systemctl stop firewalld
docker node ls
docker network ls
service iptables status
docker swarm join --token SWMTKN-1-1zquow7w819gh8a6kzg75tg0dyscc6yl2wjh2u9cteqsyo8urr-aql31luqa3gt9jldxurp8ljrd 192.168.9.25:2377
error:
Error response from daemon: rpc error: code = Unavailable desc = all SubConns are in TransientFailure, latest connection error: connection error: desc = "transport: Error while dialing dial tcp 192.168.9.25:2377: connect: no route to host"
如果要使用swarm功能,需要在所有manager node节点上开启2377端口。
搭建步骤:
1、环境准备:
1.1、准备三台已近安装docker engine的centos/Ubuntu系统主机(docker版本必须在
1.12以上的版本,老版本不支持swarm)
1.2、docker容器主机的ip地址固定,集群中所有工作节点必须能访问该管理节点
1.3、集群管理节点必须使用相应的协议并且保证端口可用
集群管理通信:TCP,端口2377
节点通信:TCP和UDP,端口7946
覆盖型网络(docker网络):UDP,端口4789 overlay驱动
说明:三台容器主机的ip地址分别为:
192.168.200.162(管理节点)
192.168.200.163(工作节点)
192.168.200.158(工作节点)
主机名称分别为:manager1、work1以及work2
vim /etc/hostname (修改完成后需要重启)
2、创建docker swarm
2.1、在manager1机器上创建docker swarm集群
docker swarm init ‐‐advertise‐addr 192.168.200.162
(‐‐advertise‐addr将该IP地址的机器设置为集群管理节点;如果是单节点,无需该参
数)
2.2、查看管理节点集群信息:
docker node ls
3、向docker swarm中添加工作节点:在两个工作节点中分别执行如下命令,ip地址是
manager节点的
3.1、添加两个work节点
docker swarm join ‐‐token xxx 192.168.200.138:2377 (worker1)
docker swarm join ‐‐token xxx 192.168.200.138:2377 (worker2)
(‐‐token xxx:向指定集群中加入工作节点的认证信息,xxx认证信息是在创建docker
swarm时产生的)
3.2、继续查看管理节点集群信息与之前的区别
docker node ls
4、在docker swarm中部署服务
在Docker Swarm集群中部署服务时,既可以使用Docker Hub上自带的镜像来启动服务,也
可以使用自己通Dockerfile构建的镜像来启动服务。如果使用自己通过Dockerfile构建的
镜像来启动服务那么必须先将镜像推送到Docker Hub中心仓库。为了方便读者的学习,这里
以使用Docker Hub上自带的alpine镜像为例来部署集群服务
4.1、部署服务
docker service create ‐‐replicas 1 ‐‐name helloworld alpine ping
docker.com
docker service create指令:用于在Swarm集群中创建一个基于alpine镜像的服务
‐‐replicas参数:指定了该服务只有一个副本实例
‐‐name参数:指定创建成功后的服务名称为helloworld
ping docker.com指令:表示服务启动后执行的命令
5.查看docker swarm集群中的服务
查看服务列表:docker service ls
查看部署具体服务的详细信息:docker service inspect 服务名称
查看服务在集群节点上的分配以及运行情况:docker service ps 服务名称
6、修改副本数量
在manager1上,更改服务副本的数量(创建的副本会随机分配到不同的节点)
docker service scale helloworld=5
7、删除服务(在管理节点)
docker service rm 服务名称
8、访问服务
8.1、查看集群环境下的网络列表:docker network ls
8.2、在manager1上创建一overlay为驱动的网络(默认使用的网络连接ingress)
docker network create ‐d=overlay my‐multi‐host‐network
8.3、在集群管理节点manager1上部署一个nginx服务
docker service create \
‐‐network my‐multi‐host‐network \
‐‐name my‐web \
‐p 8080:80 \
‐‐replicas 2 \
nginx
8.3、在管理节点查看服务的运行情况:
docker service ps my‐web
8.4、访问测试
docker--搭建docker swarm集群的更多相关文章
- 使用docker搭建hadoop分布式集群
使用docker搭建部署hadoop分布式集群 在网上找了非常长时间都没有找到使用docker搭建hadoop分布式集群的文档,没办法,仅仅能自己写一个了. 一:环境准备: 1:首先要有一个Cento ...
- Docker系列之swarm集群搭建
学习Docker很久了,今天分享一下Docker的swarm集群的搭建过程很简单 首先第一步是 每台机器上面都要安装docker 本人使用的是centos7操作系统,使用3太虚拟机,3太虚拟机必须网络 ...
- centos7下安装docker(21docker swarm集群创建)
创建swarm集群: 实验环境:盗图 swarm-manager是manager node,swarm-worker1和swarm-worker2是worker node. 所有节点的docker版本 ...
- docker搭建redis主从集群和sentinel哨兵集群,springboot客户端连接
花了两天搭建redis主从集群和sentinel哨兵集群,讲一下springboot客户端连接测试情况 redis主从集群 从网上查看说是有两种方式:一种是指定配置文件,一种是不指定配置文件 引用地址 ...
- Docker 搭建 Redis Cluster 集群环境
使用 Docker 搭建 Redis Cluster,最重要的环节就是容器通信的问题,这一块我们在之前的文章中已经给大家解决了<Docker 网络模式详解及容器间网络通信>,本篇文章主要练 ...
- Docker搭建Zookeeper&Kafka集群
最近在学习Kafka,准备测试集群状态的时候感觉无论是开三台虚拟机或者在一台虚拟机开辟三个不同的端口号都太麻烦了(嗯..主要是懒). 环境准备 一台可以上网且有CentOS7虚拟机的电脑 为什么使用虚 ...
- 单台服务器-利用docker搭建Redis哨兵集群模式
前言:只有一台华为云服务器,所以打算创建三个容器来模拟三个服务器了. 一:拉取redis镜像 二:拉取redis.conf文件 放在自定义的目录下:wget -c http://download.re ...
- 【记录】centOS 搭建logstash +docker搭建elasticsearch伪集群+kibana链接集群elasticsearch节点
[注意]本文主要用于自我记录,注释较少. 安装logstash 1.上传logstash-6.4.3.tar.gz到服务中 2.tar –zxvf logstash-6.4.3.tar.gz 3.cd ...
- Windows10+Docker搭建分布式Redis集群(SSH服务镜像)(二)
前言:上篇文章我们搭建好了Docker,下面我们开始使用Docker创建镜像,Docker命令就不介绍了.这里宿主是Windows10,cmd的管理和后期文件的复制不是很方便,将创建支持SSH的Cen ...
- Docker搭建MySQL主从集群,基于GTID
写在前边 搭建MySQL读写分离主从集群,这里未使用binlog方式,使用的是GTID方式 源码见我的Github https://github.com/hellxz/mysql-cluster-do ...
随机推荐
- 跨域 (3) window.name
window对象有一个name属性,该属性有一个特征:即在一个窗口的生命周期内,窗口载入的所有的页面都是共享一个window.name的,每一个页面对window.name都有读写的权限,window ...
- 关于 html button 点击刷新页面的问题
如果不想点击button 刷新页面的话,需要加个属性 type="button" 如下: <button class="layui-btn" type ...
- 通信接口是webservice快还是scoket快解决方案
通信接口是webservice快还是scoket快webservice和scoket都可以做为通信接口,一个走HTTP访问,一个走TCP协议访问 问1:通讯速度是webservice快还是scoket ...
- buuctf@test_your_nc
测试你的 nc 技巧 :)
- MTBF测试
本文转载自:https://blog.csdn.net/liuhaoemail/article/details/50531489 MTBF测试 目前,终端侧的可靠性测试基本上是采用称为”MTBF测试” ...
- 2019学军集训记&PKUWC2020游记
题解:https://www.cnblogs.com/gmh77/p/12051260.html 集训(×) 被虐(√) Day1 二段考 Day2 绝对不鸽 没那回事 还在路上 其实就是咕了两天 晚 ...
- Java设计模式:23种设计模式全面解析(超级详细)
设计模式(Design Pattern)是前辈们对代码开发经验的总结,是解决特定问题的一系列套路.它不是语法规定,而是一套用来提高代码可复用性.可维护性.可读性.稳健性以及安全性的解决方案. 1995 ...
- php如何实现大文件断点续传-php文件
总结一下大文件分片上传和断点续传的问题.因为文件过大(比如1G以上),必须要考虑上传过程网络中断的情况.http的网络请求中本身就已经具备了分片上传功能,当传输的文件比较大时,http协议自动会将文件 ...
- Qt类图
Qt对象命名与类图 QWidget=Windows get,即获得窗体,凡是我们能看到的界面都是从QWidget继承而来的. QDialog QAbstractButton 这是一个抽象类,不能直接使 ...
- 快速排序和二分查找(Go)
package main import ( "fmt" "sync") var waitGroup sync.WaitGroup func main() { d ...