标签:efault clust gre 要求 === gen creat 类型 conf
介绍了 docker 三剑客中的 docker-machine 和 docker-compose 之后,就剩下一个 docker swarm 了。那本篇的主角就是它了。
注:环境为 CentOS7,docker 19.03。
docker-compose 为用户提供单节点中多容器的创建,docker-machine 让用户管理不同的 docker 环境。而 docker swarm 则帮助用户实现 docker 的集群管理。从单机走向集群。
Swarm 的前身是Beam项目和libswarm项目,2014年12月推出 Swarm。之后又在2016年2月整合到 docker engine 1.12 中。使用命令 docker swarm 可以直接使用 swarm(之前是单独的命令 swarm),并支持超过 1K 个的节点。
Swarm 采用“主从”结构,通过Raft协议来在多个管理节点(Manager)中实现共识。?作节点(Worker) 上运?agent接受管理节点的统?管理和任务分配。 ?户提交服务请求只需要发给管理节点即可, 管理节点会按照调度策略在集群中分配节点来运?服务相关的任务。
在Swarm V2中, 集群中会?动通过Raft协议分布式选举出Manager节点, ?须额外的发现服务?持, 避免了单点瓶颈。 同时, V2中内置了基于DNS的负载均衡和对外部负载均衡机制的集成?持。
Swarm集群(Cluster) 为?组被统?管理起来的Docker主机。 集群是Swarm所管理的对象。 这些主机通过Docker引擎的Swarm模式相互沟通,其中部分主机可能作为管理节点(manager) 响应外部的管理请求, 其他主机作为?作节点(worker) 来实际运?Docker容器。 当然, 同?个主机也可以即作为管理节点, 同时作为?作节点。
当?户使?Swarm集群时, ?先定义?个服务(指定状态、 复制个数、 ?络、 存储、 暴露端口等) , 然后通过管理节点发出启动服务的指令, 管理节点随后会按照指定的服务规则进?调度, 在集群中启动起来整个服务, 并确保它正常运?。
节点(Node) 是Swarm集群的最?资源单位。 每个节点实际上都是?台Docker主机。通过命令 docker node [COMMAND]
可以管理节点。
Swarm集群中节点分为两种:
docker node promote
命令来提升?个?作节点为管理节点; 或者通过docker node demote
命令来将?个管理节点降级为?作节点。服务(Service) 是Docker?持复杂多容器协作场景的利器。docker service [COMMAND]
,该命令可以用来操作服务。
?个服务可以由若?个任务组成, 每个任务为某个具体的应?。 服务还包括对应的存储、 ?络、 端口映射、 副本个数、 访问配置、 升级配置等附加参数。
?般来说, 服务需要?向特定的场景, 例如?个典型的Web服务可能包括前端应?、 后端应?, 以及数据库等。 这些应?都属于该服务的管理范畴。
Swarm集群中服务类型也分为两种(可以通过-mode指定) :
任务是Swarm集群中最?的调度单位, 即?个指定的应?容器。 例如仅仅运?前端业务的前端容器。 任务从?命周期上将可能处于创建(NEW) 、 等待(PENDING) 、 分配(ASSIGNED) 、 接受(ACCEPTED) 、 准备(PREPARING) 、 开始(STARTING) 、 运?(RUNNING) 、 完成(COMPLETE) 、 失败(FAILED) 、 关闭(SHUTDOWN) 、 拒绝(REJECTED) 、 孤?(ORPHANED) 等不同状态。
Swarm集群中的管理节点会按照调度要求将任务分配到?作节点上。例如指定副本为2时, 可能会被分配到两个不同的?作节点上。 ?旦当某个任务被分配到?个?作节点, 将?法被转移到另外的?作节点, 即Swarm中的任务不?持迁移。
Swarm集群中的服务要被集群外部访问, 必须要能允许任务的响应端?映射出来。 Swarm中?持??负载均衡(ingress load balancing) 的映射模式。 该模式下, 每个服务都会被分配?个公开端?(PublishedPort) ,该端?在集群中任意节点上都可以访问到, 并被保留给该服务。
当有请求发送到任意节点的公开端口时, 该节点若并没有实际执?服务相关的容器, 则会通过路由机制将请求转发给实际执?了服务容器的?作节点。
环境上使用的 docker 版本为 19.03,已经集成了 swarm,所以直接使用 docker swarm
准备三台机器,配置如下:
docker 集群的操作命令如下:
1.创建 swarm 集群
# docker swarm init
Swarm initialized: current node (64ziftvcc42jes9rjjln3gj3o) is now a manager.
To add a worker to this swarm, run the following command:
docker swarm join --token SWMTKN-1-05ti4zj7p0jnhxl26m3tlk48aazl3ts3jkhari0c4oyaoxk1rb-bb3dkm45d9m0ikaoxuhgwtgve 192.168.10.10:2377
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
2.在两台 work 节点上执行如下命令
# docker swarm join --token SWMTKN-1-05ti4zj7p0jnhxl26m3tlk48aazl3ts3jkhari0c4oyaoxk1rb-bb3dkm45d9m0ikaoxuhgwtgve 192.168.10.10:2377
这样,就完成了 docker swarm 集群的创建了,还是很简单的
# docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
64ziftvcc42jes9rjjln3gj3o * centos1 Ready Active Leader 19.03.1
60xwt9dr0znx5qnjhvjqj9c7w centos2 Ready Active 19.03.1
h7zaxx1bxzw33mp8ze6lumj4f centos3 Ready Active 19.03.1
注意:如果 CentOS7 上防火墙没有配置的话,集群中的节点状态可以会为 down,请先关闭或开放端口2377
创建集群使用命令 docker swarm [COMMAND]
,管理集群使用docker node [COMMAND]
,利用集群管理服务则是命令 docker service [COMMAND]
。
# docker service create --replicas 2 --name ping debian:jessie ping docker.com
skyaj8ukmi8t42c05qba3k6rm
overall progress: 2 out of 2 tasks
1/2: running [==================================================>]
2/2: running [==================================================>]
verify: Service converged
# docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
skyaj8ukmi8t ping replicated 2/2 debian:jessie
# docker service ps ping
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
x02dsx5to2xq ping.1 debian:jessie centos1 Running Running about a minute ago
3od5f9rzjjzt ping.2 debian:jessie centos2 Running Running about a minute ago
# docker service inspect --pretty ping
ID: skyaj8ukmi8t42c05qba3k6rm
Name: ping
Service Mode: Replicated
Replicas: 2
Placement:
UpdateConfig:
Parallelism: 1
On failure: pause
Monitoring Period: 5s
Max failure ratio: 0
Update order: stop-first
RollbackConfig:
Parallelism: 1
On failure: pause
Monitoring Period: 5s
Max failure ratio: 0
Rollback order: stop-first
ContainerSpec:
Image: debian:jessie@sha256:c72197393c39c05e19c8ef3388af53a6daa2baa0bed6111b09e40a298d9f7eca
Args: ping docker.com
Init: false
Resources:
Endpoint Mode: vi
# docker service scale ping=1
ping scaled to 1
overall progress: 1 out of 1 tasks
1/1: running [==================================================>]
verify: Service converged
# docker service scale ping=3
ping scaled to 3
overall progress: 3 out of 3 tasks
1/3: running [==================================================>]
2/3: running [==================================================>]
3/3: running [==================================================>]
verify: Service converged
# docker service create --replicas 2 --name nginx -p 8080:80 nginx
或者
# docker service create --replicas 2 --name nginx --publish published=8080,target=80 nginx
注:docker swarm 内部已经实现负载均衡,访问 swarm 集群任意节点的地址都有效,即使该节点没有运行该服务。
管理 swarm 集群节点的命令是 docker node
,支持以下选项
之前我们已经使用过 docker-compose,它能在一次部署多个容器,现在 docker engine 中集成了同样的能,而且能在 swarm 集群环境下部署多个任务。
命令docker stack [command]
命令支持以下选项:
docker stack 直接支持 docker-compose 格式的配置文件
version: "3"
services:
nginx:
image: nginx:latest
ports:
- 8088:80
deploy:
mode: replicated
replicas: 4
# docker stack deploy -c docker-compose.yml web
Creating service web_nginx
# docker stack ls
NAME SERVICES ORCHESTRATOR
web 1 Swarm
# docker stack ps web
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
q34tk96cssvp web_nginx.1 nginx:latest centos1 Running Running 6 seconds ago
k6p4iol3vs0v web_nginx.2 nginx:latest centos2 Running Running 7 seconds ago
hen5phupzow4 web_nginx.3 nginx:latest centos2 Running Running 7 seconds ago
ugr8sgg6lpv9 web_nginx.4 nginx:latest centos3 Running Running 6 seconds ago
# docker stack services web
ID NAME MODE REPLICAS IMAGE PORTS
hf5dbvn0a8ww web_nginx replicated 4/4 nginx:latest *:8088->80/tcp
# docker stack rm web
Removing service web_nginx
Removing network web_default
标签:efault clust gre 要求 === gen creat 类型 conf
原文地址:https://www.cnblogs.com/xingyys/p/11443629.html