容器化技术-Swarm资源管理

Swarm资源管理


Swarm是Docker官方提供的一款集群管理工具,其主要作用是把若干台Docker主机抽象为一个整体,并且通过一个入口统一管理这些Docker主机上的各种Docker资源。Swarm和Kubernetes比较类似,但是更加轻,具有的功能也较kubernetes更少一些。

Swarm的基本架构如下图所示
在这里插入图片描述

这个图作为一个整体实际上都处于一个所谓的集群中,它可能对应了一到多台的实际服务器。每台服务器上都装有Docker并且开启了基于HTTP的DockerAPI。这个集群中有一个SwarmManager的管理者,用来管理集群中的容器资源。管理者的管理对象不是服务器层面而是集群层面的,也就是说通过Manager,我们只能笼统地向集群发出指令而不能具体到某台具体的服务器上要干什么(这也是Swarm的根本所在)。至于具体的管理实现方式,Manager向外暴露了一个HTTP接口,外部用户通过这个HTTP接口来实现对集群的管理。对于稍微大一点的集群,最好是拿出一台实际的服务器作为专门的管理者,作为学习而言,也可以把管理者和被管理者放在一台服务器上。

构建swarm集群和节点

启动一个swarm集群

docker swarm init --listen-addr 172.16.218.146:8888 --advertise-addr 172.16.218.146
  • –listen-addr指出的是这个集群暴露给外界调用的HTTPAPI的socket地址。
  • –advertise-addr如果你的Docker主机有多个网上,拥有多个IP,必须使用—advertise-addr指定IP。

命令执行成功会提示一串类似于这样的信息

docker swarm join --token SWMTKN-1-4exqiy0mat3d1sy7yff3cdqr1h8huz88tng253bj7id3tttlfk-e5dns1ykhe74pllubpvy4vrv6 172.16.218.146:8888

为方便下面称管理者角色的机器为Master,另两台为Node1、Node2。

在Node1,Node2执行了上面这个命令后,在Master上执行命令docker node ls

列出Docker节点信息

[root@k8s-master ~]# docker node ls
ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
qs3re8fwfadofgamifcm1w1dt *   k8s-master          Ready               Active              Leader              18.06.3-ce
tsrjx3bxnykmi41vddwkcl4vf     k8s-node1           Ready               Active                                  18.06.3-ce
gzfsco0lufbf7bvpiikfu8wvd     k8s-node2           Ready               Active                                  18.06.3-ce

构建服务

docker service create --replicas 1 --name swarmTomcat consol/tomcat-7.0:latest
  • docker service create创建服务
  • –replicas参数指出希望保持这个服务始终有多少容器在运行
  • –name参数指定的是服务的名字而非容器的名字

查看swarmTomcat这个service的各个容器到底在哪个节点运行且运行状态如何。

[root@k8s-master ~]# docker service ps swarmTomcat 
ID                  NAME                IMAGE                      NODE                DESIRED STATE       CURRENT STATE            ERROR               PORTS
vlwlvfp35lny        swarmTomcat.1       consol/tomcat-7.0:latest   k8s-master          Running             Running 25 seconds ago        

容器扩展

[root@k8s-master ~]# docker service scale swarmTomcat=3
swarmTomcat scaled to 3
1/3: running   [==================================================>] 
2/3: running   [==================================================>] 
3/3: running   [==================================================>] 
verify: Service converged 

docker service scale swarmTomcat=3,可以将服务现有的replica为1的状态扩展到3,期间已经启动的容器不受影响。

此时再查看swarmTomcat这个服务的节点信息及状态

[root@k8s-master ~]# docker service ps swarmTomcat 
ID                  NAME                IMAGE                      NODE                DESIRED STATE       CURRENT STATE            ERROR               PORTS
vlwlvfp35lny        swarmTomcat.1       consol/tomcat-7.0:latest   k8s-master          Running             Running 38 minutes ago                       
kpf4vo0h7ff0        swarmTomcat.2       consol/tomcat-7.0:latest   k8s-node2           Running             Running 2 minutes ago                        
i4nwm9bvpnjt        swarmTomcat.3       consol/tomcat-7.0:latest   k8s-node1           Running             Running 25 minutes ago                       

节点管理

之前的演示中,三个节点始终都保持着Active的可用性。Swarm管理器会自动根据算法将任务(启停容器等)分配给Active的节点。

除了Active,其它常见的可用性状态还有Drain,处于Drain的节点不会被分配新任务,而且当前运行的容器也会被停止,swarm管理器则会在其它节点上创建这些任务。

运行命令

docker node update --availability drain k8s-node2

演示

[root@k8s-master ~]# docker node update --availability drain k8s-node2
k8s-node2
[root@k8s-master ~]# docker node ls
ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
qs3re8fwfadofgamifcm1w1dt *   k8s-master          Ready               Active              Leader              18.06.3-ce
tsrjx3bxnykmi41vddwkcl4vf     k8s-node1           Ready               Active                                  18.06.3-ce
gzfsco0lufbf7bvpiikfu8wvd     k8s-node2           Ready               Drain                                   18.06.3-ce
[root@k8s-master ~]# docker service ps swarmTomcat 
ID                  NAME                IMAGE                      NODE                DESIRED STATE       CURRENT STATE               ERROR               PORTS
vlwlvfp35lny        swarmTomcat.1       consol/tomcat-7.0:latest   k8s-master          Running             Running about an hour ago                       
rv2y10e9x8xy        swarmTomcat.2       consol/tomcat-7.0:latest   k8s-master          Running             Running 3 seconds ago                           
kpf4vo0h7ff0         \_ swarmTomcat.2   consol/tomcat-7.0:latest   k8s-node2           Shutdown            Shutdown 19 seconds ago                         
i4nwm9bvpnjt        swarmTomcat.3       consol/tomcat-7.0:latest   k8s-node1           Running             Running 39 minutes ago     

由于k8s-node2不再接受 任务并关停了现有任务,所以swarmTomcat.2这个容器被转移到k8s-master节点上。

如果再次将k8s-node2的可用性更改为active,那么k8s-node2节点就可以再次获取任务了,PS:刚才被转移到k8s-master上的任务是不传再转回来的,所以k8s-node2的任务只有在接下来的分配中获得。

最后,一个处于Active状态的节点可能收到新的任务,当服务规模扩大时,滚动更新时,其它节点被设置为Darin而本节点需要担当时,其它节点上的任务启动失败时。

docker node update --availability active k8s-node2
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值