Docker(六)----Swarm搭建Docker集群

2023-11-19

一、什么是Swarm

Swarm这个项目名称特别贴切。在Wiki的解释中,Swarm behavior是指动物的群集行为。比如我们常见的蜂群,鱼群,秋天往南飞的雁群都可以称作Swarm behavior。


Swarm项目正是这样,通过把多个Docker Engine聚集在一起,形成一个大的docker-engine,对外提供容器的集群服务。同时这个集群对外提供Swarm API,用户可以像使用Docker Engine一样使用Docker集群。

Swarm 特点

 ▲对外以Docker API接口呈现,这样带来的好处是,如果现有系统使用Docker Engine,则可以平滑将Docker Engine切到Swarm上,无需改动现有系统。
 ▲Swarm对用户来说,之前使用Docker的经验可以继承过来。非常容易上手,学习成本和二次开发成本都比较低。同时Swarm本身专注于Docker集群管理,非常轻量,占用资源也非常少。 *“Batteries included but swappable”,简单说,就是插件化机制,Swarm中的各个模块都抽象出了API,可以根据自己一些特点进行定制实现。
 ▲Swarm自身对Docker命令参数支持的比较完善,Swarm目前与Docker是同步发布的。Docker的新功能,都会第一时间在Swarm中体现。

Docker自诞生以来,其容器特性以及镜像特性给DevOps爱好者带来了诸多方便。然而在很长的一段时间内,Docker只能在单host上运行,其跨host的部署、运行与管理能力颇受外界诟病。跨host能力的薄弱,直接导致Docker容器与host的紧耦合,这种情况下,Docker容器的灵活性很难令人满意,容器的迁移、分组等都成为很难实现的功能点。


Swarm是Docker公司在2014年12月初新发布的容器管理工具。和Swarm一起发布的Docker管理工具还有Machine以及Compose。

Swarm是一套较为简单的工具,用以管理Docker集群,使得Docker集群暴露给用户时相当于一个虚拟的整体。Swarm使用标准的Docker API接口作为其前端访问入口,换言之,各种形式的Docker Client(dockerclient in go, docker_py, docker等)均可以直接与Swarm通信,Swarm几乎全部用Go语言来完成开发。

二、Swarm 关键概念

1)Swarm

集群的管理和编排是使用嵌入到 docker 引擎的 SwarmKit,可以在 docker 初始化时启动 swarm 模式或者加入已存在的 swarm

2)Node

一个节点(node)是已加入到 swarm 的 Docker 引擎的实例 当部署应用到集群,你将会提交服务定义到管理节点,接着 Manager

管理节点调度任务到 worker 节点,manager 节点还执行维护集群的状态的编排和群集管理功能,worker 节点接收并执行来自

manager 节点的任务。通常,manager 节点也可以是 worker 节点,worker 节点会报告当前状态给 manager 节点

3)服务(Service)

服务是要在 worker 节点上要执行任务的定义,它在工作者节点上执行,当你创建服务的时,你需要指定容器镜像

4)任务(Task)

任务是在 docekr 容器中执行的命令,Manager 节点根据指定数量的任务副本分配任务给 worker 节点

——————————————————————————————————–

docker swarm:集群管理,子命令有 init, join, leave, update。(docker swarm –help 查看帮助)

docker service:服务创建,子命令有 create, inspect, update, remove, tasks。(docker service–help 查看帮助)

docker node:节点管理,子命令有 accept, promote, demote, inspect, update, tasks, ls, rm。(docker node –help 查看帮助)

node 是加入到 swarm 集群中的一个 docker 引擎实体,可以在一台物理机上运行多个 node,node 分为:

manager nodes,也就是管理节点

worker nodes,也就是工作节点

1)manager node 管理节点:执行集群的管理功能,维护集群的状态,选举一个 leader 节点去执行调度任务。

2)worker node 工作节点:接收和执行任务。参与容器集群负载调度,仅用于承载 task。

3)service 服务:一个服务是工作节点上执行任务的定义。创建一个服务,指定了容器所使用的镜像和容器运行的命令。

service 是运行在 worker nodes 上的 task 的描述,service 的描述包括使用哪个 docker 镜像,以及在使用该镜像的容器中执行什么命令。

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


三、环境准备

2.1、所用版本如下

centos 7

docker  Docker version 18.03.1-ce, build 9ee9f40

swaram 18.03.1-ce

这里用两台机器来搭建,分别如下:

swarm01  192.168.182.110

swarm02  192.168.182.111

2.2、安装docker

每台机器上都需要安装Docker

yum search docker
yum install -y docker
systemctl start docker
systemctl status docker

2.3、加入开机自启

systemctl enable docker

2.4、更改docker的镜像源

安装好之后,更改docker的镜像源,修改或新增 /etc/docker/daemon.json

vi /etc/docker/daemon.json
修改成如下:
{
"registry-mirrors": ["http://hub-mirror.c.163.com"]
}
或
{ 
"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"] 
}

然后重启

systemctl restart docker.service

2.5、修改主机名

然后分别修改两台机器的主机名,更改成swarm01,swarm02

hostnamectl set-hostname swarm01

2.6、关闭SELinux

[root@swaram01 ~]# getenforce
Disabled
[root@swaram01 ~]# /usr/sbin/sestatus -v
SELinux status:                 disabled

修改

vi /etc/selinux/config

将SELINUX=enforcing改为SELINUX=disabled 

注意: 设置后需要重启才能生效

2.7、编辑hosts文件

vi /etc/hosts

设置两台主机的对应关系

192.168.182.110 swarm01
192.168.182.111 swarm02

2.8、关闭防火墙

systemctl stop firewalld.service #停止firewall
systemctl disable firewalld.service #禁止firewall开机启动

2.9、修改docker监听端口

Swarm是通过监听2375端口进行通信的,所以在使用Swarm进行集群管理之前,需要设置一下2375端口的监听。所有主机节点docker开启2375监听,docker版本不同,配置方式不一样

vim  /lib/systemd/system/docker.service

在ExecStart加入:

-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock

3.0、重启docker服务

systemctl daemon-reload    ##使配置文件生效
systemctl restart docker

四、Swarm安装和集群创建

3.1、Swarm镜像下载

在两台机器上分别安装Swarm

[root@swarm01 fendo]# docker pull swarm
Using default tag: latest
latest: Pulling from library/swarm
dd72058debf0: Pull complete 
cb543654edaf: Pull complete 
44212202dc6d: Pull complete 
Digest: sha256:c97a27b020ae4439432c842769d8e731661d5987962e33004114e4aba9d03b4c
Status: Downloaded newer image for swarm:latest
[root@swarm01 fendo]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
swarm               latest              59c0df55980b        6 months ago        15.8MB

3.2、初始化Swarm

[root@swarm01 fendo]# docker swarm init --advertise-addr  192.168.182.110
Swarm initialized: current node (zeisswb5lm92gj8rsng9pxzxd) is now a manager.

To add a worker to this swarm, run the following command:

    docker swarm join --token SWMTKN-1-043bhcd0voztnsui79l1rg0pyu4xq1q5x188jeyvppplt2rvnk-6diwivwlc14aipcji90tms4ua 192.168.182.110:2377

To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
上面命令执行后,该机器自动加入到swarm集群。这个会创建一个集群token,获取全球唯一的 token,作为集群唯一标识。后续将其他节点加入集群都会用到这个token值。

其中,--advertise-addr参数表示其它swarm中的worker节点使用此ip地址与manager联系。命令的输出包含了其它节点如何加入集群的命令。

3.3、添加集群节点

然后在swaram02机器上执行以下命令

[root@swaram02 fendo]# docker swarm join --token SWMTKN-1-5vqq9j2bwq5rllsubg49cs16440v2ixkngvf25e5688i86c8qf-eawa9w8wf2m5mu9e6ovmhjuyy 192.168.182.110:2377

加入到集群中去:

3.4、查看集群节点

[root@swarm01 fendo]# docker node list
ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
j4o241rnbz6rq2k6204s635lb     swaram02            Ready               Active                                  18.03.1-ce
k1itretyzjwzskezlkhdc7wkj *   swarm01             Ready               Active              Leader              18.03.1-ce

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Docker(六)----Swarm搭建Docker集群 的相关文章

随机推荐

  • Kubernetes笔记(3) - 资源管理基础

    Kubernetes系统将一切事物都抽象为API资源 其遵循REST架构风格组织并管理这些资源及其对象 同时还支持通过标准的HTTP方法 POST PUT PATCH DELETE和GET 对资源进行增 删 改 查等管理操作 Kuberne
  • tcp三次握手和四次挥手的过程

    TCP是面向连接的 无论哪一方向另一方发送数据之前 都必须先在双方之间建立一条连接 在TCP IP协议中 TCP 协议提供可靠的连接服务 连接是通过三次握手进行初始化的 三次握手的目的是同步连接双方的序列号和确认号 并交换 TCP窗口大小信
  • 简述JAVA集合框架

    简述JAVA集合框架 对常用的数据结构和算法做了一些接口和具体实现接口的类 所有抽象出来的数据结构统称为Java集合框架 在具体应用时 不必考虑数据结构和算法实现细节 只需要用这些类创建出来一些对象 然后直接应用就可以了 这样就大大提高了编
  • Nginx中代理的上下文路径设置

    Nginx中代理的上下文路径设置 实际配置nginx的时候 在Location段中配置的路径 request uri 以及代理指令 proxy pass 中设置的上下文路径的组合不同 最后实现的结果就不一样 例子 加入请求nginx服务的U
  • php修改学生信息代码_简单学习PHP中的层次性能分析器

    在 PHP 中 我们需要进行调试的时候 一般都会使用 memory get usage 看下内存的使用情况 但如果想看当前的脚本 CPU 的占用情况就没有什么现成的函数了 不过 PHP 也为我们提供了一个扩展 XHProf 这是由 Face
  • 24.qint64转QString 以及获取文件属性

    qint64转QString 1 qint64 size info size 2 qint64 转QString 3 QString size2 tr 1 arg size 获取文件属性 1 include mainwindow h 2 i
  • 大数据与人工智能的关系

    大数据与人工智能有密切的关系 大数据可以为人工智能提供大量的训练数据 从而提高人工智能的准确性和效率 人工智能又可以帮助我们对大数据进行分析和挖掘 提取有用的信息
  • 计算机二级python经典真题

    计算机二级python经典考题 1 键盘输入正整数n 按要求把n输出到屏幕 格式要求 宽度为20个字符 减号字符 右填充 右对齐 带千位分隔符 如果输入正整数超过20位 则按照真实长度输出 例如 键盘输入正整数n为1234 屏幕输出 1 2
  • Android监听屏幕录制的过程

    Android监听屏幕录制的过程如下 在AndroidManifest xml文件中声明屏幕录制权限
  • Bert和T5的区别

    Bert 和 T5 之间的主要区别在于预测中使用的标记 单词 的大小 Bert 预测一个由单个词组成的目标 single token masking 另一方面 T5 可以预测多个词 如上图所示 它在学习模型结构方面为模型提供了灵活性 Tra
  • Vue中如何进行数据可视化大屏展示

    Vue中如何进行数据可视化大屏展示 在现代数据驱动的应用程序中 数据可视化大屏已经成为了非常重要的一环 通过对海量数据进行可视化展示 可以帮助用户更好地理解和分析数据 从而做出更加明智的决策 在Vue中进行数据可视化大屏展示也变得越来越流行
  • JVM 运行时数据区(栈和堆)

    文章目录 JVM 是一种规范 什么是 JVM 为什么 JVM 是一种规范 Java 程序的执行过程 JVM 与字节码文件 栈指令集架构和寄存器指令集架构 Hotspot 虚拟机及 Dalvik ART 虚拟机 JVM 的组成部分及架构 运行
  • Postman Windows7可用最大版本

    https dl pstmn io download version 7 2 2 win64
  • 搭建DAO层和Service层代码

    第一部分建立实体和映射文件 1 通过数据库生成的实体 此步骤跳过 关于如何查看生成反向工程实体类查看SSH框架搭建教程 反向工程章节 Tmenu和AbstractorTmenu是按照数据库表反向工程形成的JAVA实体 在形成实体的时候注意
  • python:编写程序,输入一批学生的成绩,求平均成绩和最高分。

    n 1 max score 0 score sum 0 while n lt 6 n 1 student Id input 请输入编号 编号输入 score eval input 请输入成绩 成绩输入 score sum score 输入成
  • 新机部署docker报错docker.service: Start request repeated too quickly.

    报错内容 主要报错内容 docker service Start request repeated too quickly Failed with result exit code Failed to start Docker Applic
  • 中国XXXXXXXXXXXXX管理软件销售实施三部曲

    中国XXXXXXXXXXXXX牛B 管理软件销售实施服务一条龙分三部分走 第一步 卖软件 客户的艳阳天 卖软件前 销售的嘴巴像屁股绽放般 见过狗没 没见过的话 只能在签约前才能见到的 客户你说想实现啥 这个牛B的中国XXXXXXXXXXXX
  • VSCode安装教程

    VSCode软件下载 官网下载地址 Visual Studio Code Code Editing Redefined 1 点击Download for Windows的下拉按钮 点击Other downloads 2 在这里可以选择自己想
  • 小孩机器人编程真的有用吗

    小孩机器人编程真的有用吗 很多的家长在培养孩子的学习的时候 是十分的认真耐心的 他们会给孩子选择一些能够有利于孩子成长的课程 就拿现在很多的家长想要孩子去学习机器人编程的课程来说 有的家长对于小孩机器人编程真的有用吗并不是很清楚 今天我们就
  • Docker(六)----Swarm搭建Docker集群

    一 什么是Swarm Swarm这个项目名称特别贴切 在Wiki的解释中 Swarm behavior是指动物的群集行为 比如我们常见的蜂群 鱼群 秋天往南飞的雁群都可以称作Swarm behavior Swarm项目正是这样 通过把多个D