Docker 集群之 Swarm

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
简介: 了解什么是 Docker 集群以及为什么要使用 Docker 集群,并介绍 Docker 集群工具 Swarm 和 Docker 集群搭建。

什么是 Docker 集群?

image.png

Swarm 将一个或多个 Docker 【节点】组织起来,使得用户能够以集群方式管理它们;

  • 这些节点可以是物理服务器、虚拟机、树莓派(Raspberry Pi)或云实例;
  • 节点会被配置为管理节点(Manager)或工作节点(Worker)。

    1. 管理节点负责集群控制面(Control Plane),进行诸如监控集群状态、分发任务至工作节点等操作。
    2. 工作节点接收来自管理节点的任务并执行。

集群搭建的注意事项

  • 安全性:要求所有节点通过可靠的网络相连;

搭建 Swarm 集群时将不可避免地使用 TLS(安全传输层协议),因为它被 Swarm 紧密集成。在安全意识日盛的今天,这样的工具值得大力推广。Swarm 使用 TLS 进行通信加密、节点认证和角色授权。自动密钥轮换(Automatic Key Rotation)更是锦上添花!其在后台默默进行,用户甚至感知不到这一功能的存在。

为什么要使用 Docker 集群?

image.png

docker 在单机(单节点)环节下面,部署两个容器分别是 nginx 和 netcore ,假如 docker 主机宕机,意味着其上面的容器服务也随之不可用,再从客户端角度看,客户端的访问数量是不确定性的,随时都可能增多,而相对于单节点的 docker 主机,提供服务的负载能力也有上限,不能满足高并发场景,最终导致容器服务不可用,总结为以下两点:

  1. 服务器角度:单节点 docker 主机不能提供服务的高可用性;
  2. 客户端角度:单节点 docker 主机不能满足高并发服务访问;

Docker 集群解决什么问题?

针对以上面临的问题,因此需要对单节点 docker 主机进行集群,集群展示如下:

image.png

Docker 集群解决的问题(提供服务的高可用):

  1. 提高并发量;
  2. 解决单点故障问题;

Docker Swarm 集群工具简介

  • Swarm 是 Dcoker 官方提供的一款集群管理工具,其主要作用是把若干台 Docker 主机抽象为一个整体,并且通过一个入口统一管理这些 Docker 主机上的各种 Docker 资源;
  • Swarm 和 Kubernetes 比较类似,但是更加轻,具有的功能也较 kubernetes 更少一些;
  • Docker Swarm 包含两方面:1.企业级的 Docker 安全集群 & 2.微服务应用编排引擎;
  • Swarm 的配置和状态信息保存在一套位于所有管理节点上的分布式 etcd 数据库中。该数据库运行于内存中,并保持数据的最新状态。关于该数据库最棒的是,它几乎不需要任何配置,作为 Swarm 的一部分被安装,无须管理;
  • Swarm 默认内置有加密的分布式集群存储(encrypted distributed cluster store)、加密网络(Encrypted Network)、公用TLS(Mutual TLS)、安全集群接入令牌 Secure Cluster Join Token)以及一套简化数字证书管理的 PKI(Public Key Infrastructure)。我们可以自如地添加或删除节点;
  • Swarm 提供了一套丰富的 API 使得部署和管理复杂的微服务应用变得更加方便。通过将应用定义在声明式配置文件中,就可以使用原生的 Docker 命令完成部署。甚至还可以执行滚动升级、回滚以及扩缩容操作;

关于应用编排,Swarm 中的最小调度单元是服务;它是随 Swarm 引入的,在 API 中是一个新的对象元素,它基于容器封装了一些高级特性,是一个更高层次的概念。当容器被封装在一个服务中时,我们称之为一个任务或一个副本,服务中增加了诸如扩缩容、滚动升级以及简单回滚等特性。

Swarm 如何管理 Docker 集群?

image.png

以上环节中,docker swarm 通过角色(manager-worker)配置实现 docker 主机集群,同样管理节点(manager)也可以多个节点集群。

  • manager(管理节点)

    1. 集群配置;
    2. 容器服务管理;
    3. 负载均衡;
    4. 集群其他配置;
  • worker(工作节点)

    1. 提供容器服务
说明:类似 redis 中的主(mastere)从(slaver)配置;

如何搭建 Swarm 集群?

通过 service,task,stack 去配置容器;

  • service =》docker 不同主机(工作节点)容器的集合;
  • task =》供 service 启动集群环境容器;
  • stack =》多个 service 的集合;

image.png

Swarm 集群准备

  1. 两台云主机或 VM,分别安装 docker;
  2. docker-swarm;
备注:在哪里操作哪个就是管理节点,所有操作只需在管理节点处理,工作节点无需担心;

上面我们对 docker 集群的原理做了简单的介绍,接下来我们实践操作,【docker-swarm】集群的搭建过程;

Swarm 集群搭建过程

  • 首先初始化一个集群工作节点 =》docker swarm init --advertise-addr [localhost] 默认为管理节点,
  • 如果该节点已经存在,删除节点 =》docker swarm leave -f

image.png

  • 另外一台 docker 主机加入集群节点(work工作节点)

image.png

  • 查看节点详细列表信息 =》docker --info

image.png

集群环境中如何配置 services(容器)集合

  • 镜像仓库准备所需的部署的镜像,比如:nginx 和 netcore

image.png

  • 创建 service =》docker service create --replicas 1 --name netcoreservice 参数 --replicas 指定集群数量,--name 为service取名;

image.png

  • 查看【rmcoreservice】在哪个 docker 主机节点运行 =》docker service ps rmcoreservice

image.png

  • 查看容器列表信息 =》docker container ls -a

image.png

  • 删除 rmcoreservice 服务 =》docker service rm rmcoreservice

image.png

备注:所有 service 的操作,全在管理节点操作,管理节点删除service 集群的工作节点也随之删除,
证明:在 worker 工作节点查看 service 列表=》docker serice ls 工作节点无权操作,显示如下:

image.png

  • 从镜像 rmcore 创建服务,指定两个工作节点,并暴露服务端口(映射) =》docker service create --replicas 2 --name rmcoreservice --publish 6066:80 rmcore

image.png

集群中 stack 创建两个 service

image.png

deploy 可选参数配置详解

endpoint_mode:访问集群服务的方式。
    endpoint_mode: vip 
    # Docker 集群服务一个对外的虚拟 ip。所有的请求都会通过这个虚拟 ip 到达集群服务内部的机器。
    endpoint_mode: dnsrr
    # DNS 轮询(DNSRR)。所有的请求会自动轮询获取到集群 ip 列表中的一个 ip 地址。
labels:在服务上设置标签。可以用容器上的 labels(跟 deploy 同级的配置) 覆盖 deploy 下的 labels。
 
mode:指定服务提供的模式。
    replicated:复制服务,复制指定服务到集群的机器上。
    global:全局服务,服务将部署至集群的每个节点。    
replicas:mode 为 replicated 时,需要使用此参数配置具体运行的节点数量。
 
resources:配置服务器资源使用的限制,例如上例子,配置 redis 集群运行需要的 cpu 的百分比 和 内存的占用。避免占用资源过高出现异常。
 
restart_policy:配置如何在退出容器时重新启动容器。
 
condition:可选 none,on-failure 或者 any(默认值:any)。
    delay:设置多久之后重启(默认值:0)。
    max_attempts:尝试重新启动容器的次数,超出次数,则不再尝试(默认值:一直重试)。
    window:设置容器重启超时时间(默认值:0)。
    rollback_config:配置在更新失败的情况下应如何回滚服务。
 
parallelism:一次要回滚的容器数。如果设置为0,则所有容器将同时回滚。
    delay:每个容器组回滚之间等待的时间(默认为0s)。
    failure_action:如果回滚失败,该怎么办。其中一个 continue 或者 pause(默认pause)。
    monitor:每个容器更新后,持续观察是否失败了的时间 (ns|us|ms|s|m|h)(默认为0s)。
    max_failure_ratio:在回滚期间可以容忍的故障率(默认为0)。
    order:回滚期间的操作顺序。其中一个 stop-first(串行回滚),或者 start-first(并行回滚)(默认 stop-first )。
    update_config:配置应如何更新服务,对于配置滚动更新很有用。
 
parallelism:一次更新的容器数。
    delay:在更新一组容器之间等待的时间。
    failure_action:如果更新失败,该怎么办。其中一个 continue,rollback 或者pause (默认:pause)。
    monitor:每个容器更新后,持续观察是否失败了的时间 (ns|us|ms|s|m|h)(默认为0s)。
    max_failure_ratio:在更新过程中可以容忍的故障率。
    order:回滚期间的操作顺序。其中一个 stop-first(串行回滚),或者 start-first(并行回滚)(默认stop-first)
  • 管理节点创建 stack 目录 =》mkdir stack
  • 查看当前目录列表,切换到 compose

image.png

  • 如果管理节点不存在 docker-compose.yaml 文件就创建一个 =》 vi docker-compose.yml 创建文件并且进入编辑

image.png

  • 管理节点的 stack 目录中创建的 docker-compose.yaml 文件配置编辑信息如下:

image.png

  • Stack 命令 =》docker stack --help

image.png

  • 通过 docker-compose.yml 中的 deploy 配置信息,使用 stack 管理命令启动 =》docker stack deploy -c docker-compose.yml rmstack 创建的stack标识为rmstack
  • 查看 stack 创建的列表目录信息 =》docker stack ls

image.png

  • 查看 stack 中创建的 service =》docker service ls 创建的服务 rmstack_nginx, rmstack_rmcore

image.png

  • 再次查看容器列表目录 =》docker container ls

image.png

以上过程就完成 stack 的集群配置;

  • 删除 stack 配置 =》docker stack rm rmstack

image.png

注意:管理节点创建和删除集群操作,工作节点也随之删除。

docker-swarm 命令集合

  • 查看 swarm 工具管理命令 =》docker swarm --help
指令 说明
ca 显示CA证书
init 初始化swarm 集群,并创建管理节点
join 将其他docker节点加入集群,创建工作节点,被管理节点管理
join-token 将其他docker节点加入集群,创建工作节点,被管理节点管理[这个是管理节点令牌]
leave 离开集群
unlock 打开集群
unlock-key 管理解锁键key
update 更新群集群

Swarm 缺陷

  1. 无法监控某一个docker节点(主机)=》解决方案 k8s
  2. 安装docker主机耗时;每安一次OS环境都需要对应的配置一次docker主机,比如:10台linux系统,需要安装10个docker主机 =》docker-machine(关键),参考:https://www.cnblogs.com/sparkdev/p/7066789.html
  3. 集群容器如何做数据持久化? =》volums 数据卷(关键)
  4. 当 service 的 work 节点容器宕机,无法监控和感知;

针对以上【swarm缺陷】的解决方案 =》【k8s/Kubermetes

相关实践学习
巧用云服务器ECS制作节日贺卡
本场景带您体验如何在一台CentOS 7操作系统的ECS实例上,通过搭建web服务器,上传源码到web容器,制作节日贺卡网页。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
27天前
|
网络安全 Docker 容器
|
8天前
|
应用服务中间件 nginx Docker
Docker Swarm、Docker Stack和Portainer的使用
Docker Swarm、Docker Stack 和 Portainer 各有其独特的功能和优势。Docker Swarm 适用于分布式服务的管理和编排,Docker Stack 便于多容器应用的定义和部署,而 Portainer 提供了直观的 UI,简化了 Docker 环境的管理。结合使用这些工具,可以大大提高容器化应用的部署和管理效率。希望本文对您理解和应用这些工具有所帮助。
19 5
|
24天前
|
负载均衡 应用服务中间件 网络安全
docker swarm添加更多的服务
【10月更文挑战第16天】
19 6
|
24天前
|
Docker 容器
docker swarm启动服务并连接到网络
【10月更文挑战第16天】
21 5
|
24天前
|
调度 Docker 容器
docker swarm创建覆盖网络
【10月更文挑战第16天】
15 5
|
25天前
|
负载均衡 应用服务中间件 数据安全/隐私保护
docker swarm 创建 Swarm 模式下的网络
【10月更文挑战第14天】
23 6
|
25天前
|
负载均衡 网络协议 关系型数据库
docker swarm 使用网络启动服务
【10月更文挑战第15天】
20 4
|
25天前
|
Docker 容器
|
26天前
|
应用服务中间件 nginx Docker
docker swarm创建覆盖网络
【10月更文挑战第14天】
17 3
|
25天前
|
数据安全/隐私保护 Docker 容器
docker swarm创建网络
【10月更文挑战第15天】
10 1