[容器化技术之十一] 资源管理

一、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。


二、基本概念

  Swarm 是使用 SwarmKit 构建的 Docker 引擎内置(原生)的集群管理和编排工具,使用 Swarm 集群之前需要了解以下几个概念。

1、节点

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

  节点分为管理(manager)节点工作(worker)节点。管理节点用于Swarm集群的管理,docker swarn命令基本只能在管理节点执行;工作节点是任务执行节点,管理节点将服务(service)下发至工作节点执行。

  集群中管理节点与工作节点的关系如下图所示:


  一个Manager可以管理对接多个Worker,同时为了防止Manager的单点故障,部署多个Manager搭建集群,这样就可以构建高可用的docker swarm集群。

2、服务和任务

任务(Task):Swarm中的最小调度单位,目前来说就是一个单一的容器。
服务(Services):一组任务的集合,服务定义了任务的属性。

服务有两种模式:

  • replicated services:按照一定规则在各个工作节点上运行指定个数的任务。
  • global services:每个工作节点上运行一个任务

两种模式通过docker service create--mode参数指定。

  容器、任务、服务的关系如下图所示:


  以nginx服务为例,管理节点定义了该服务由三个节点组成,管理节点将任务下发到三个可用的工作节点,工作节点上的任务又创建了nginx容器来处理实际的请求,总结地说,就是任务创建容器,服务管理任务。


三、初始化集群

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

docker swarm init --advertise-addr 服务器IP

  如果Docker主机有多个网卡,拥有多个IP,必须使用--advertise-addr指定IP,执行docker swarm init命令的节点自动成为管理节点。

  下面演示创建一个包含一个Manager、两个Worker的最小Swarm集群(这里我用的是三台VM Ware虚拟机,centos [192.168.27.135]作为Manager,两台ubuntu [192.168.27.133/134]作为worker)。

1、创建管理节点

  centos的IP固定为192.168.27.135,故使用以下命令创建管理节点:

docker swarm init --advertise-addr 192.168.27.135

  创建成功出现如下信息,此时已经创建好了swarm集群的管理节点,如果想让另外两台机器假如该集群,需要执行黑色背景的命令。


  使用docker node ls可以看到集群中的节点数和节点管理状态,可以看到刚才加入的本地节点,并且节点状态为Leader,表明这是个管理节点


2、创建工作节点

  使用以下命令创建工作节点,加入(1)中创建的集群中:

docker swarm join --token SWMTKN-1-5vkw4fbx383l9h9nvjjk2nkmtmir4soizwwq3ozsb4xxy0djmc-dpmdmtgtaky4cocas4ld8eb9v 192.168.27.135:2377

  但是发生报错



  有可能是被管理节点服务器的防火墙挡住了,先关闭centos的防火墙

systemctl status firewalld.service     # 查看防火墙状态
systemctl stop firewalld.service        # 停止防火墙

  重新在ubuntu尝试加入swarm集群,成功加入集群



  有的时候,我们想再次给集群加入工作节点,但是已经忘了token,可以在管理节点服务器上执行以下命令再次获取:

docker swarm join-token manager

  token具有时效性,所以过了一定时间重新生成时,token会变化



3、查看集群

docker node ls

  在管理节点所在服务器再次查询节点列表


  在另外一台ubuntu也执行加入集群命令,最终在centos查询节点列表可以看到有三个节点,这样就构成了由一个管理节点、两个工作节点构成的最简单的swarm集群。



节点MANAGER STATUS列说明:

显示节点是属于manager或者worker,没有值 表示不参与群管理的工作节点。

  • Leader 意味着该节点是使得群的所有群管理和编排决策的主要管理器节点。
  • Reachable 意味着节点是管理者节点正在参与Raft共识。如果领导节点不可用,则该节点有资格被选为新领导者。
  • Unavailable 意味着节点是不能与其他管理器通信的管理器。如果管理器节点不可用,您应该将新的管理器节点加入群集,或者将工作器节点升级为管理器。



节点AVAILABILITY列说明:

显示调度程序是否可以将任务分配给节点

  • Active 意味着调度程序可以将任务分配给节点。
  • Pause 意味着调度程序不会将新任务分配给节点,但现有任务仍在运行。
  • Drain 意味着调度程序不会向节点分配新任务。调度程序关闭所有现有任务并在可用节点上调度它们。


4、增加集群管理节点

  为了避免单点故障,通常也需要有多个管理者节点构成集群提高可用性,可以通过以下命令将工作节点升级为管理节点:

docker node prompte [工作节点hostname]

  可以看到,执行了升级操作的节点ubuntu2,管理者状态变成了Reachable(可达的),意思是假如集群中的管理节点宕机时,ubuntu2有能力被选举为管理节点,但是在正式被选举之前它依然是个工作节点,所以这个升级更多地是个授权预备役的作用。


  为了保障集群的高可用,将ubuntu也升级为Reachable,最终集群状态


5、删除节点

docker node rm [hostname/ID]

  直接删除报错,要求在移除节点前要先降级



  节点降级命令为:

docker node demote [hostname/ID]

  再次删除报错,因为节点状态还是活跃的


  必须停止该节点上的docker服务,或者被删除节点主动离开集群,才允许删除


  如果管理节点主动离开,则整个集群会直接解散,从上图中可以看出,管理节点并不是固定的,可能过一段时间其他可达节点可能会被选举为管理节点,在ubuntu2上执行离开集群命令,由于是管理节点,所以必须加上--force参数强制离开


6、节点离群

# 工作节点离群
docker swarm leave
# 管理节点离群
docker swarm leave --force



四、部署服务

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

1、新建服务

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

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

  命令很简单,创建3个副本,端口映射为容器80端口对应节点的80端口,容器命名为nginx,使用官方的nginx:latest镜像。

2、查看服务

  使用以下命令查看当前Swarm集群运行的服务

docker service ls

  使用以下命令来查看某个服务的详情

docker service nginx

  查看具体服务的每个副本

docker service ps nginx

  使用以下命令来查看某个服务的日志

docker service logs nginx


3、删除服务

  使用以下命令从Swarm集群移除某个服务

docker service rm nginx


4、操作演示

  新建服务



  查看服务



  查看具体服务的每个副本

  查看服务日志,由于还没访问nginx,所以没有产生日志



  访问所有节点上的服务,服务均正常


  再次查看日志

  停止服务

  再次浏览器访问,所有节点都无响应



五、资源管理

  上面演示了利用Docker Swarm快速搭建一个最小集群,也可以在集群上部署服务,但发现swarm并没有提供同意入口查看节点的资源使用情况,这时我们非常希望有一个图形化管理工具来帮我们管理swarm集群,portainer就是这样的一个工具。

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

1、portainer集群运行

(1)下载portainer镜像

# 查询当前有那些Portainer镜像
docker search portainer
# 拉取Portainer镜像
docker pull portainer/portainer



(2)安装portainer

docker run -d -p 9000:9000 \
--name portainer --restart=always \
-v /var/run/docker.sock:/var/run/docker.sock \
portainer/portainer



(3)portainer配置
  通过http://IP:9000访问portainer,进入首页,设置管理员账号密码


  配置完后进入下面界面,因为将portainer部署在管理节点所在服务器上,选择Local,连接

  可以看到有两个服务栈(通过compose创建),7个容器2个启动5个停止,7个数据卷,24个镜像



(4)portainer面板信息

  点击local,可以在左侧看到非常多的容器相关信息,包括镜像、服务栈、集群、容器、节点等。

  Swarm集群



  容器



  镜像

  数据卷


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,406评论 6 503
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,732评论 3 393
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,711评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,380评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,432评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,301评论 1 301
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,145评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,008评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,443评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,649评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,795评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,501评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,119评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,731评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,865评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,899评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,724评论 2 354