docker swarm
docker swarm 是 docker亲生的管理docker集群的工具。kubernetes是google私生的,不过现在已经转正。
swarm
swarm是一个运行docker engine节点(node)的集合,每台跑着docker的机器都可以被视为一个节点。这个节点集合可以用来发布和编排服务。
节点可以主动初始化一个swarm或者加入一个已经存在的swarm。这样该节点就成为了swarm中的一个节点。
角色
swarm中的节点分为2种角色
manager
manager节点用于cluster的管理,swarm命令基本只能在manager节点执行。一个cluster可以有多个manager节点,但只有一个节点可以成为leader manager node,leader选主通过raft协议实现,参数可配置。
worker
worker节点是任务执行节点,manager将service下发至worker节点执行。
STATUS为空的是worker节点,Reachable的是非leader manager node。Manager节点默认也作为worker节点。
检查一个节点是否处于swarm
1 | # 处于 |
创建集群
1 | docker swarm init --listen-addr ip:port --advertise-addr ip |
创建集群的节点,自己就是manager了。会返回加入worker所需的token
获取加入角色 token
1 | docker swarm join-token manager |
加入集群
在其他节点上执行上面获取的命令即可
退出集群
1 | docker swarm leave --force |
已经跑起服务的需要强制退出
Service与Task
Task是swarm中的最小原子调度单位,就是一个单一的容器
Service 是一组Task的集合,Service 定义 Task的属性
Service 有两种模式:
replicated service: 按一定规则在各节点上运行指定个数的Task
global service:每个节点上只运行一个task
因为有docker stack 绝大部分指令了解即可
创建服务
1 | docker service create --replicas 2 --name helloworld --network=swarm_test nginx:alpine |
查看服务列表
1 | docker service ls |
查看运行中服务
1 | docker service ps helloworld |
服务扩容
1 | docker service scale helloworld=3 |
可扩大,也可缩小
有点像一种神秘的柱状物(金箍棒)可大可小
回滚服务配置
1 | docker service rollback $service_id |
更新服务配置
1 | docker service update $service_id |
检查服务配置
1 | docker service inspect $service_id |
查看服务日志
使用方法
1 | docker service logs $service_id |
等价于
1 | docker logs $container_id |
节点查询
1 | docker node ls |
网络
网络查询
1 | docker network ls |
docker swarm得网络配置是十分丰富的,而且自带服务发现功能
基于swarm搭配负载均衡工具这些实践还没有做
To Be Continue