首页 > 其他分享 >Docker Swarm介绍及搭建集群

Docker Swarm介绍及搭建集群

时间:2023-05-03 17:07:13浏览次数:44  
标签:swarm 节点 Swarm 集群 Docker docker


1、前言

       相信Docker技术大家都有所了解,单个Docker能发挥的作用毕竟有限,也不便于管理,所以Docker得组集群来使用才能发挥强大的技术优势。既然要组集群那就涉及诸如Docker的资源调度、管理等等一系列问题。目前涉及Docker集群的三个主要的技术无外乎Swarm、Kubernetes、Mesos三种。本文主要来看看Swarm。


2、什么是Swarm

      Swarm这个名称特别贴切。在Wiki中解释道:

Swarm behavior是指动物的群集行为。比如我们常见的蜂群,鱼群,秋天往南飞的雁群都可以称作Swarm behavior。

     

Docker Swarm介绍及搭建集群_docker

      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语言来完成开发。


3、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 容器并在容器中执行任务。


4、Swarm集群

4.1 环境准备

  • CentOS 7(3.10.0-327.10.1.el7.x86_64)
  • Docker 17.05.0-ce

4.2 环境搭建

节点规划如下:

 

Docker Swarm介绍及搭建集群_API_02

一共4个节点(1个master、3个slave(worker)),通过四台虚拟机搭建。

 

4.2.1 Docker环境安装

请参考之前写的文章CentOS7 下Docker安装、启动,这里不再做具体说明。

4.2.2 Docker Swarm集群

(1)在Master节点上安装Swarm

初始化swarm

执行命令 docker swarm init --advertise-addr 192.168.99.100

[docker@master ~]# docker swarm init --advertise-addr 192.168.99.100

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.99.100:2377

To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

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

上面命令执行后,该Master节点自动加入到swarm集群。这时会创建一个集群token,获取全球唯一的 token,作为集群唯一标识。后续将其他节点加入集群都会用到这个token值。

(2)添加集群节点

在其他三个slave节点上分别执行以下命令:

[docker@slave1 ~]# docker swarm join --token SWMTKN-1-5vqq9j2bwq5rllsubg49cs16440v2ixkngvf25e5688i86c8qf-eawa9w8wf2m5mu9e6ovmhjuyy 192.168.99.100:2377

This node joined a swarm as a worker.

以上就表明节点添加成功。

如果加入节点时,出现错误"Error response from daemon: rpc error: code = 14 desc = grpc: the connection is unavailable",则在Master节点上关闭防火墙后,重新再slave节点上添加即可。

(3)查看集群节点

docker node list

 

Docker Swarm介绍及搭建集群_docker_03

标签:swarm,节点,Swarm,集群,Docker,docker
From: https://blog.51cto.com/xcbeyond/6241387

相关文章

  • SpringCloud服务注册中心双节点集群(Eureka集群)
    0、前言    最近在进行重构一个新项目,为了后续更好的落地,适应于日新月异的技术更新,进行了各方的技术选型及技术预研,最终选型基于微服务架构体系进行开发重构。项目构建前最重要的一步就是要想清楚,整体的部署架构、高可用性(HA)等等,做好前期的部署架构技术调研,确定最终方案......
  • docker编排参数详解(docker-compose.yml配置文件编写)
    dockercompose在Docker容器运用中具有很大的学习意义,dockercompose一.前言关于dockercompose技术可以查看官方文档 DockerCompose以下的内容是确立在已经下载好Docker以及DockerCompose,可参看DockerCompose的官方安装教程 InstallDockerCompose二.DockerCom......
  • 分布式kv存储系统之etcd集群管理
    etcd简介etcd是CoreOS团队于2013年6月发起的开源项目,它的目标是构建一个高可用的分布式键值(key-value)数据库。etcd内部采用raft协议作为一致性算法,etcd基于Go语言实现。 官方网站:https://etcd.io/;github地址:https://github.com/etcd-io/etcd;官方硬件......
  • 基于 TiCDC 的 TiDB 复制集群的计划内和计划外切换验证步骤
    作者:pepezzzz环境准备集群名称和版本上游tidb集群:tidb-h下游tidb集群:tidb-cdc版本:v6.5.0CDC专用用户:cdcuser注:业务负载用户应独立于CDC专用用户。业务数据库:cdcdb模拟业务应用:Sysbench、BANK。上下游创建ticdc同步用户和数据库createusercdcuseridentified......
  • 使用docker部署nginx并配置https
     #安装dockerpullnginx​#安装后查看docker镜像dockerimages安装就只需要一个命令,连安装包都不用自己找,这就是我用docker的原因。建目录用于存放nginx配置文件、证书文件:mkdir/opt/docker/nginx/conf.d-pmkdir/opt/docker/nginx/cert-pnginx的ssl证书长这个样子,两......
  • dockerfile概念简介——镜像分层
    一、dockerfile概念dockerfile是自定义镜像的一套规则dockerfile由多条指令构成,Dockerfile中的每一条指令都会对应于Docker镜像中的每一层1.1docker镜像的分层dockerfile的原理就是镜像分层。Dockerfile中的每个指令都会创建一个新的镜像层(是一个临时的容器,执行完后......
  • docker搭建本地私有仓库详细步骤
    1、首先下载registry镜像dockerpullregistry12、在daemon.json文件中添加私有镜像仓库的地址并重启vim/etc/docker/daemon.json{ "insecure-registries":["192.168.59.111:5000"],#添加此段,“,”不可少,ip是本机IP地址 "registry-mirrors":["https://4abdkxlk.mi......
  • docker的资源控制管理——Cgroups
    前言docker使用cgrqup控制资源,K8S里面也有limit(使用上限)docker通过cgroup来控制容器使用的资源配额,包括CPU、内存、磁盘三大方面,基本覆盖了常见的资源配额和使用量控制。Cgroup是Controlgroup的简写,是Linux内核提供的一种限制所使用物理资源的机制,包括CPU、内存......
  • .NET Core部署到linux(CentOS)最全解决方案,入魔篇(使用Docker+Jenkins实现持续集成、
    通过前面三篇:.NETCore部署到linux(CentOS)最全解决方案,常规篇.NETCore部署到linux(CentOS)最全解决方案,进阶篇(Supervisor+Nginx).NETCore部署到linux(CentOS)最全解决方案,高阶篇(Docker+Nginx或Jexus)通过前面三篇文章的介绍,我们已经对.netcore多方案部署到linux下有......
  • .NET Core部署到linux(CentOS)最全解决方案,入魔篇(使用Docker+Jenkins实现持续集成、
    通过前面三篇:.NETCore部署到linux(CentOS)最全解决方案,常规篇.NETCore部署到linux(CentOS)最全解决方案,进阶篇(Supervisor+Nginx).NETCore部署到linux(CentOS)最全解决方案,高阶篇(Docker+Nginx或Jexus)通过前面三篇文章的介绍,我们已经对.netcore多方案部署到linux下有......