manager node 192.168.0.11
worker node 192.168.0.12
安装上docker环境
yum install wget -y
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
yum -y install docker-ce-18.06.1.ce-3.el7
systemctl enable docker && systemctl start docker
docker --version
swarn下的命令集,可以使用--help 逐层查看
docker swarm --help
Commands:
ca Display and rotate the root CA
init Initialize a swarm
join Join a swarm as a node and/or manager
join-token Manage join tokens
leave Leave the swarm
unlock Unlock swarm
unlock-key Manage the unlock key
update Update the swarm
部署swarm manager
docker swarm init --advertise-addr 192.168.0.11
执行后给出worker节点加入当前manager下的命令,也可以通过docker swarm join-token worker 查看下面信息。
docker swarm join --token SWMTKN-1-3vgownewoyrqequep2a3y6cawjurd27kix8***************-b5iregazi33c107qeivgkdwc0 192.168.0.11:2377
docker info #可以查看当前docker的swarm 节下面的信息
Swarm: active
NodeID: hjy4pruqeygmtrhktr4t8rmph
Is Manager: true
ClusterID: 6tfy8npit0ekv55scx0rwaq40
Managers: 1
Nodes: 1
Default Address Pool: 10.0.0.0/8
SubnetSize: 24
Data Path Port: 4789
Orchestration:
Task History Retention Limit: 5
docker node ls 查看当前swarm 下的节点
AVAILABILITY 三种状态说明:
active 可被指派task
pasue 不可被指派task,但是节点中的已存在task正常运行
drain 不可被指派task,且节点中的已存在task将调度到其他的worker节点运行
通过docker swarm join-token woker 查看加入命令,然后在worker执行命令,加入swarm。
管理swarm manager node
可以使用haproxy 来做多manage node 的高可用方案,Raft协议用来保证管理节点的数据一致性,容错点数量是(n-1)/2
常见的管理节点的操作:
设置managernode 只提供管理,不作为worker 节点使用
docker node update --availability drain manager节点主机名
添加标签
docker node update --label-add 键名称=值
为节点设置标签标记,一个节点可以多个标签。
docker node update --label-add foo --label-add bar worker1
为节点指定类型标签,来标识调度程序如何部署到哪个节点
docker node update --label-add tyep=queue worker1
提权到manage组
docker node promote worker1
降权
docker node demote workre1
manager节点要退出swarm集群,在manager 机器上操作
docker swarm node leave
若集群中存在其他workernode 如果manager要退出swarm 可以强制退出
docker swarm node leave --force
worker节点要退出swarm ,在woker机器上操作
docker swarm node leave
其他管理命令
docker node demote 从群集(swarm)管理器中降级一个或多个节点
docker node inspect 显示一个或多个节点的详细信息
docker node ls 列出群集(swarm)中的节点
docker node promote 将一个或多个节点推入到群集管理器中
docker node ps 列出在一个或多个节点上运行的任务,默认为当前节点
docker node rm 从群集(swarm)删除一个或多个节点
docker node update 更新一个节点
–availability 节点的可用性(有效/暂停/耗尽)
–label-add 添加或更新节点标签(key = value)
–label-rm 删除节点标签(如果存在)
–role 节点的作用(worker / manager)
管理服务(在manager node 上完成)
docker service create --replicas 2 --name myredis redis
# 创建2个名为myredis 的容器,源镜像为redis
docker service ls
# 查看已经部署了的服务
docker service ps myredis
# 查看服务的详细信息
docker service create --name helloworld
--env MYVAR=myvalue
--workdir /tmp
--user my_user
alpine ping docker.com
# enc 设置化境变量,workdir设置工作目录,user设置 用户信息
扩容缩容服务
docker service scale 服务名=服务task总数
例如 docker service scale myredis=3 从之前的2个扩容到3个
docker service scale myredis=1 扩容到3个以后,再缩容到1个。
删除服务
docker service rm myredis
滚动更新
docker service create
--replicas 3
--name redis
--update-delay 10s
redis:3.0.6
# 每成功部署一个,间隔十秒后再部署下一个,更新失败则调度器停止
docker service update --images redis:3.0.7 redis 使用新版本redis 来升级当前版本。
添加overlay 网络
docker network create --driver overlay mynetwork
#创建名字为mynetwork 的网络,在manager 上操作
docker service create
--replicas 4
--network mynetwokr
--name myweb
nginx
#指定mynetwork 网络下创建4份名字叫myweb的服务,源镜像用nginx
爬坑问题
将worker 提权之后,会导致status 为down ,重启只有docker node rm worker1 然后重新加入。