赞
踩
Docker Swarm是一个Dockerized化的分布式应用程序的本地集群,它是在Machine所提供的功能的基础上优化主机资源的利用率和容错服务。Docker Swarm支持用户创建可运行Docker Daemon的主机资源池,然后在资源池中运行Docker容器。Docker Swarm可以管理工作负载并维护集群状态。
除了资源优化,Docker Swarm可以保证应用的高可用性和容错性。Docker Swarm会不断的检查Docker Daemon所在主机的健康状态。当某个主机不可用时,Swarm就会将容器迁移到新的主机上。
Docker Swarm的亮点之一是它可以在应用的生命周期内扩展,也就是说当应用从一个主机扩展到多个的时候,用户可以保证接口的一致性。
1)节点分为管理 (manager) 节点和工作 (worker) 节点。管理节点负责集群控制面(Control Plane),进行诸如监控集群状态、分发任务至工作节点等操作。工作节点接收来自管理节点的任务并执行。
2)任务 (Task)是 Swarm 中的最小的调度单位,目前来说就是一个单一的容器。任务是在docekr容器中执行的命令,Manager节点根据指定数量的任务副本分配任务给worker节点
3)服务 (Services) 是指一组任务的集合,服务定义了任务的属性,在管理机或工作节点上执行,是群体系统的中心结构、用户与群体交互的主要根源。创建服务时,需要指定要使用的容器镜像
4)Worker节点也是Docker Engine的实例,目的是用来运行容器。Worker节点不会像Manager节点那样提供集群的管理、任务调度和API。可以创建仅有一个manager节点的Swarm,但是不能在没有manager节点的前提下,创建Worker节点。在默认情况下,manager节点同时也是一个worker节点。
1)批量创建服务:建立容器之前先创建一个overlay的网络,用来保证在不同主机上的容器网络互通的网络模式
2)强大的集群的容错性:当容器副本中的其中某一个或某几个节点宕机后,cluster会根据自己的服务注册发现机制,在集群中剩余的空闲节点上,重新拉起容器副本。docker service不仅仅是批量启动服务,而且在集群中定义了一种状态。Cluster会持续检测服务的健康状态,并维护集群的高可用性。
3)服务节点的可扩展性:Swarm Cluster提供了节点弹性扩展或缩减的功能。当容器组想动态扩展时,只需通过scale参数即可复制出新的副本出来。
4)调度机制:其主要功能是cluster的server端去选择在哪个服务器节点上创建并启动一个容器实例的动作。它是由一个装箱算法和过滤器组合而成。每次通过过滤器(constraint)启动容器的时候,swarm cluster 都会调用调度机制筛选出匹配约束条件的服务器,并在这上面运行容器。
实验环境:
server1、server2、server3、server4部署docker
docker swarm init
docker node ls
docker swarm join --token SWMTKN-1-0tidfvhq3hi7u0mauqzt0atprzltsiv9v1eex2kc3gokee9xc6-97g5qfhya86favzdz0zkuvzbo 172.25.12.1:2377
docker node ls
,server2和server3成功加入集群mapp:v1
镜像:(各个节点) docker pull ikubernetes/myapp:v1
docker tag ikubernetes/myapp:v1 myapp:v1
docker service create --name my_cluster --replicas 4 -p 80:80 myapp:v1
## --name 服务名称命名为 my_cluster
## --replicas 设置启动的示例数为4
## myapp:v1镜像
docker service ps my_cluster
docker pull dockersamples/visualizer
,各个节点docker service create --name=viz --publish=8080:8080/tcp --constraint=node.role==manager --mount=type=bind,src=/var/run/docker.sock,dst=/var/run/docker.sock dockersamples/visualizer
172.25.12.2:8080
docker service scale my_cluster=10
如果一个节点宕机了(即该节点就会从swarm集群中被踢出),则Docker应该会将在该节点运行的容器,调度到其他节点,以满足指定数量的副本保持运行状态。当宕机的节点恢复后,它转移出去的task实例不会主动转移回来,只能等别的节点出现故障后或使用 scale 进行横向拓展后,转移、新增task实例到它的上面。
systemctl stop docker.service
,原本运行在server3的task会调度到其他节点
systemctl start docker.service
docker service scale my_cluster=15
将server2节点加入到群集管理器中:docker node promote server2
列出群集(swarm)中的节点:docker node ls
docker node demote server1
docker node ls
docker node rm server1
(1)部署hardor仓库,启动仓库,将镜像上传至hardor仓库
cd harbor/
./install.sh --with-chartmuseum
docker tag myapp:v1 red.westos.org/library/myapp:v1
docker push red.westos.org/library/myapp:v1
docker tag dockersamples/visualizer:latest red.westos.org/library/visualizer:latest
docker push red.westos.org/library/visualizer:latest
vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://red.westos.org"]
}
systemctl reload docker.service
(2)创建swarm集群服务:
docker service create --name my_cluster --replicas 4 -p 80:80 myapp:v1
(3) 部署swarm监控
docker service create --name=viz --publish=8080:8080/tcp --constraint=node.role==manager --mount=type=bind,src=/var/run/docker.sock,dst=/var/run/docker.sock visualizer
172.25.12.2:8080
docker service scale my_cluster=9
docker service scale my_cluster=3
docker pull ikubernetes/myapp:v2
docker tag ikubernetes/myapp:v2 red.westos.org/library/myapp:v2
docker push red.westos.org/library/myapp:v2
docker service update --image myapp:v2 --update-parallelism 3 --update-delay 5s my_cluster
--image 指定要更新的镜像
--update-parallelism 指定最大同步更新的任务数
--update-delay 指定更新间隔
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。