Docker Swarm集群搭建教程

1. Docker Swarm 简介

Docker Swarm 是 Docker 官方三剑客项目之一,提供 Docker 容器集群服务,是 Docker 官方对容器云生态进行支持的核心方案。

使用它,用户可以将多个 Docker 主机封装为单个大型的虚拟 Docker 主机,快速打造一套容器云平台。

注意:Docker 1.12.0+ Swarm mode 已经内嵌入 Docker 引擎,成为了 docker 子命令 docker swarm,绝大多数用户已经开始使用 Swarm mode,Docker 引擎 API 已经删除 Docker Swarm。为避免大家混淆旧的 Docker Swarm 与新的 Swarm mode,旧的 Docker Swarm 内容已经删除,请查看 Swarm mode 一节。

2. Docker Swarm mode

Docker 1.12 Swarm mode 已经内嵌入 Docker 引擎,成为了 docker 子命令 docker swarm。请注意与旧的 Docker Swarm 区分开来。

Swarm mode 内置 kv 存储功能,提供了众多的新特性,比如:具有容错能力的去中心化设计、内置服务发现、负载均衡、路由网格、动态伸缩、滚动更新、安全传输等。使得 Docker 原生的 Swarm 集群具备与 Mesos、Kubernetes 竞争的实力。

3. Swarm mode 基本概念

Swarm 是使用 SwarmKit 构建的 Docker 引擎内置(原生)的集群管理和编排工具。

使用 Swarm 集群之前需要了解以下几个概念。

3.1 节点

运行 Docker 的主机可以主动初始化一个 Swarm 集群或者加入一个已存在的 Swarm 集群,这样这个运行 Docker 的主机就成为一个 Swarm 集群的节点 (node) 。

节点分为管理节点 (manager) 和工作节点 (worker) 。

管理节点:用于 Swarm 集群的管理,docker swarm 命令基本只能在管理节点执行(节点退出集群命令 docker swarm leave 可以在工作节点执行)。一个 Swarm 集群可以有多个管理节点,但只有一个管理节点可以成为 leader,leader 通过 raft 协议实现。

工作节点:是任务执行节点,管理节点将服务 (service) 下发至工作节点执行。管理节点默认也作为工作节点。你也可以通过配置让服务只运行在管理节点。

来自 Docker 官网的这张图片形象的展示了集群中管理节点与工作节点的关系。

Manager_Worker

3.2.服务和任务

任务 (Task)是 Swarm 中的最小的调度单位,目前来说就是一个单一的容器。

服务 (Services) 是指一组任务的集合,服务定义了任务的属性。

服务有两种模式:

replicated services 按照一定规则在各个工作节点上运行指定个数的任务。
global services 每个工作节点上运行一个任务
两种模式通过 docker service create 的 --mode 参数指定。

来自 Docker 官网的这张图片形象的展示了容器、任务、服务的关系。

4.创建 Swarm 集群

阅读 基本概念 一节我们知道 Swarm 集群由 管理节点 和 工作节点 组成。本节我们来创建一个包含一个管理节点和两个工作节点的最小 Swarm 集群。

4.1 准备工作

准备三台虚拟机,并安装Docker:

192.168.199.241	localhost
192.168.199.243	H243
192.168.199.245	H245

4.2.初始化集群

在 Docker Machine 一节中我们了解到 Docker Machine 可以在数秒内创建一个虚拟的 Docker 主机,下面我们使用它来创建三个 Docker 主机,并加入到集群中。

使用docker swarm init在本机初始化一个Swarm集群。

docker swarm init --advertise-addr 192.168.199.241

如果你的Docker主机有多个网卡,拥有多个IP,必须使用--advertise-addr指定IP。

执行docker swarm init 命令的节点自动成为管理节点。

执行结果如下,则表明初始化成功:

Swarm initialized: current node (uw3q9lmtglwy3plvcjqv3gunm) is now a manager.
To add a worker to this swarm, run the following command:
    docker swarm join --token SWMTKN-1-1zcf4bhlhdarrkw1566xbbt8vrdd91llaj1zhu2nekz56491z2-db9ampabiyc9ynb5fmobr6bob 192.168.199.241:2377
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

4.3 增加工作节点

在另外两台服务器上执行上一步创建管理节点时候的输出的加入swarm集群的命令。

docker swarm join --token SWMTKN-1-1zcf4bhlhdarrkw1566xbbt8vrdd91llaj1zhu2nekz56491z2-db9ampabiyc9ynb5fmobr6bob 192.168.199.241:2377

结果:

This node joined a swarm as a worker.

如果加入失败,请检查管理节点的机器的防火墙是否管理,或者打开对应端口。

如果没有保存上面加入集群的命令,后面又有一台机器想加入集群,可通过一下命令获取加入集群的命令:

## 再次获取加入集群的命令
docker swarm join-token manager

4.4 查看集群

在管理节点使用docker node ls查看集群

docker node ls

这时候一个最小的集群就搭建好了。

4.5 将工作节点升级为管理节点

可以将工作节点升级为管理节点,保证管理节点的高可用。在管理节点上运行下面的命令:

## 命令格式
docker node promote 节点 [节点 ...]

## 示例
docker node promote H243 H245

5. 部署服务

我们使用 docker service 命令来管理 Swarm 集群中的服务,该命令只能在管理节点运行。

5.1 新建服务

在创建好的Swarm集群中运行一个名为nginx的服务。

docker service create --replicas 3 -p 80:80 --name nginx nginx:latest

现在我们使用浏览器,输入任意节点IP,即可看到nginx的默认页面。

如果想修改服务副本数量,可执行命令:

## 该命令的前提是nginx服务已存在
docker service scale nginx=2

5.2 查看服务

使用 docker service ls 来查看当前 Swarm 集群运行的服务。

docker service ls

使用 docker service ps 来查看某个服务的详情。

docker service ps nginx

使用 docker service logs 来查看某个服务的日志。

docker service logs nginx

5.3 删除服务

使用 docker service rm 来从 Swarm 集群移除某个服务。

docker service rm nginx

6. 图形化管理工具Portainer

利用Docker Swarm可以快速搭建一个最小集群,也可以在集群上部署服务,但是swarm中并没有提供统一入口查看节点的资源使用情况。

Portainer是Docker的图形化管理工具,提供状态显示面板、应用模板快速部署、容器镜像网络数据卷的基本操作(包括上传下载镜像,创建容器,动态扩容等操作)、事件日志显示、容器控制台操作、Swarm集群和服务等集中管理和操作、登录用户管理和控制等功能。功能十分全面,基本能满足中小型企业对于容器管理的全部需求。

6.1 下载Portainer镜像并运行容器

## 查找Portainer镜像
docker search portainer

## 拉取镜像
docker pull portainer/portainer

## 运行容器
docker run -d -p 9000:9000 \
--name portainer --restart=always \
-v /var/run/docker.sock:/var/run/docker.sock \
portainer/portainer

6.2 访问Portainer

在浏览器中输入http://192.168.199.241:9000/即可

原文地址:http://leisure.wang/?p=138

posted @ 2020-05-20 19:19  东方雨倾  阅读(1450)  评论(0编辑  收藏  举报