Docker swarm --集群和编排

docker swarm 创建overlay网络 其他节点没有 docker swarm 节点down_集群管理

docker swarm的几个关键概念

swarm

集群管理,子命令有init, join, leave, update

node

节点,一个节点就是docker集群中的一个实例,我们可以在单台服务器上运行一个或多个节点。

manager节点还执行维护所需群集状态所需的编排和集群管理功能,manager节点选择单个领导者来执行编排任务,worker节点接收并执行从管理器节点分派的任务。

docker node:节点管理,子命令有accept, promote, demote, inspect, update, tasks, ls, rm

service

一个服务是任务的定义,管理机或工作节点上执行。它是群体系统的中心结构,是用户与群体交互的主要根源。

创建服务时,你需要指定要使用的容器镜像。

docker service:服务创建,子命令有create, inspect, update, remove, tasks

task

任务是在docker容器中执行的命令,manager节点根据指定数量的任务副本分配任务给worker节点。

Swarm的调度策略

目前支持的策略有:random,spread,binpack

Random

顾名思义,就是随机选择一个Node来运行容器,一般用作调试用,spread和binpack策略会根据各个节点的可用的CPU, RAM以及正在运行的容器的数量来计算应该运行容器的节点。

Spread

在同等条件下,Spread策略会选择运行容器最少的那台节点来运行新的容器,binpack策略会选择运行容器最集中的那台机器来运行新的节点。

使用Spread策略会使得容器会均衡的分布在集群中的各个节点上运行,一旦一个节点挂掉了只会损失少部分的容器。

Binpack

Binpack策略最大化的避免容器碎片化,就是说binpack策略尽可能的把还未使用的节点留给需要更大空间的容器运行,尽可能的把容器运行在一个节点上面。

创建swarm

1、获取ip

ip addr

2、初始化swarm

docker swarm init --advertise-addr ip

3、 获取加入节点的命令

  • 加入manager
docker swarm join-token manager

生成如下命令

docker swarm join --token SWMTKN-1-4a7n09c71wl6rmz46h8f31ydz1vn1thwk2a068uxd39zv86xg0-2orp0xywg1vksi5bc3m9ekjg4 ip:2377

直接在对应的机器中执行生成的命令即可。

  • 加入worker
docker swarm join-token worker

查看节点

docker node ls

节点的availablity状态

swarm集群中node的availability状态可以为 active或者drain,其中:

active状态下,node可以接受来自manager节点的任务分派

drain状态下,node节点会结束task,且不再接受来自manager节点的任务分派(也就是下线节点

动态扩展服务

scale

docker service scale nginx=2

update

docker service update --replicas 3 nginx

使用 docker service update 对参数进行修改

扩容服务

docker service update --replicas 3 nginx

滚动升级

docker service update --image nginx:latest nginx

删除服务

docker service rm nginx