08_drain a node on the swarm

在之前的小节,所有的节点的状态都是运行着的可用状态。swarm manager 可以分配任务给任意可用的节点。

有时候,你可能需要对某台服务器进行维护,你需要配置某个节点为drain状态,即排干该节点上面的所有运行的容器。drain状态可以防止维护节点再收到 管理节点的指令。

它也意味着管理节点停止在该服务器上面运行任务,并把复制任务放到别的可用节点上面。

$ docker node ls
ID                           HOSTNAME  STATUS  AVAILABILITY  MANAGER STATUS
1bcef6utixb0l0ca7gxuivsj0    worker2   Ready   Active
38ciaotwjuritcdtn9npbnkuz    worker1   Ready   Active
e216jshn25ckzbvmwlnh5jr3g *  manager1  Ready   Active        Leader

如果你不在运行redis3.0.7的镜像,回滚到原来的redis3.0.6,你可以执行以下命令

$ docker service create --replicas 3 --name redis --update-delay 10s redis:3.0.6
c5uo6kdmzpon37mgj9mwglcfw
$ docker service ps redis
NAME                               IMAGE        NODE     DESIRED STATE  CURRENT STATE
redis.1.7q92v0nr1hcgts2amcjyqg3pq  redis:3.0.6  manager1 Running        Running 26 seconds
redis.2.7h2l8h3q3wqy5f66hlv9ddmi6  redis:3.0.6  worker1  Running        Running 26 seconds
redis.3.9bg7cezvedmkgg6c8yzvbhwsd  redis:3.0.6  worker2  Running        Running 26 seconds

当我们想要排干 worker1上面的容器,进行维护时

docker node update --availability drain <NODE-ID>

docker node update --availability drain worker1
worker1
$ docker node inspect --pretty worker1
ID:38ciaotwjuritcdtn9npbnkuz
Hostname:worker1
Status:
 State:Ready
 Availability:Drain
...snip...

可以看到

Availability:Drain
$ docker service ps redis
NAME                                    IMAGE        NODE      DESIRED STATE  CURRENT STATE           ERROR
redis.1.7q92v0nr1hcgts2amcjyqg3pq       redis:3.0.6  manager1  Running        Running 4 minutes
redis.2.b4hovzed7id8irg1to42egue8       redis:3.0.6  worker2   Running        Running About a minute
 \_ redis.2.7h2l8h3q3wqy5f66hlv9ddmi6   redis:3.0.6  worker1   Shutdown       Shutdown 2 minutes ago
redis.3.9bg7cezvedmkgg6c8yzvbhwsd       redis:3.0.6  worker2   Running        Running 4 minutes

swarm manager 会停止处于 drain状态的节点上面的容器,并重新在可用的节点上面启用该容器。

维护完毕,从drain状态恢复回  active 状态

$ docker node update --availability active worker1
worker1
$ docker node inspect --pretty worker1
ID:38ciaotwjuritcdtn9npbnkuz
Hostname:worker1
Status:
 State:Ready
 Availability:Active
...snip...

当你设置一个维护的节点重新回到 active 状态时候,它能够重新收到如下的任务分配:

  1. 服务更新扩容
  2. 滚动更新
  3. 当你设置别的节点为drain
  4. 当另外一个节点上面的任务运行失败
时间: 2024-10-12 04:17:30

08_drain a node on the swarm的相关文章

docker swarm集群及其UI部署

一.规划 ①swarm01作为manager节点,swarm02和swarm03作为worker节点. # cat /etc/hosts 127.0.0.1   localhost 192.168.139.175  swarm01  192.168.139.176  swarm02  192.168.139.177  swarm03 ②配置SSH免密登陆 # ssh-keygen -t rsa -P '' # ssh-copy-id -i .ssh/id_rsa.pub [email prote

Docker swarm 集群搭建

Swarm是Docker公司在2014年12月初发布的一套较为简单的工具,用来管理docker集群,它将一群Docker宿主机变成一个单一的,虚拟的主机.Swarm使用标准的Docker API接口作为其前端访问入口,换言之,各种形式的Docker Client(docker client in Go, docker_py, docker等)均可以直接与Swarm通信.Swarm几乎全部用go语言来完成开发,上周五,4月17号,Swarm0.2发布,相比0.1版本,0.2版本增加了一个新的策略来

Docker1.12+ Swarm

Docker Swarm是一个用于创建Docker主机(运行Docker守护进程的服务器)集群的工具,使用Swarm操作集群,会使用户感觉就像是在一台主机上进行操作 docker1.12集成了swarmkit, 使你可以不用安装额外的软件包, 使用简单的命令启动创建docker swarm集群. 如果你在运行 Docker 1.12时,你就可以原生创建一个 Swarm 集群 . 集成了swarm集群的安全特性, 集成了K-V存储, 你现在不需要额外部署etcd或者consul. 在Docker1

运维之我的docker-集群的管理-swarm

使用docker引擎的swarm模式是v1.12.0版本以后的新特性,我们使用docker cli创建一个swarm,部署和管理应用服务集群. swarm集群特色 docker引擎综合了集群管理功能: 默认自带集群服务的管理工具,不需要额外的工具. 分布式的设计思路: 部署docker时不区分节点角色,当启动时根据不同角色使用不同参数.docker引擎分为管理器和工作程序 ,这就意味着你可以使用一个磁盘构建一个完整集群. 服务声明模式 docker引擎可以让你在海量应用服务里面,给服务定义你想要

利用shipyard部署swarm集群及管理容器

shipyard是一个web管理容器的工具 服务器列表: 10.0.22.232    swarm-manage 10.0.22.244    swarm-node-1 10.0.22.245    swarm-node-2 部署swarm集群: swarm-manage #curl -s https://shipyard-project.com/deploy | bash -s Digest: sha256:8a60ad2ee9bd1e4e3d2e50b4c61ed510a158c8ca632

Docker - 运行 containers 使用在 swarm 模式下创建的 overlay 模式的 network

前言 在Docker engine v1.12, 使用Swarm可以方便的创建overlay模式的网络,但是它只能被swarm下面的service所使用的,相对于container,这个网络是完全隔离的. 在v1.13,运行 containers 时,可以加入之前在swarm模式下自定义的overlay网络啦! 1.  Create swarm in one docker host (172.100.1.17) $ docker swarm init –advertise-address 172

docker1.12.0 swarm集群

测试环境: Manager: 192.168.209.129  Docker_Node1 Node: 192.168.209.130  Docker_Node2 系统及软件:centos 7.2  docker 1.12.0 1.初始化swarm集群 [[email protected] ~]# docker swarm init 还可以用参数: --listen-addr  指定监听(格式: <ip|interface>[:port]) (默认:0.0.0.0:2377) --adverti

Docker Swarm集群部署应用

在Docker Swarm集群部署应用 我们过去使用docker run的命令创建容器, 把前面替换成docker service create就行了. 建议搭建一个registry,为所的docker主机提供镜像下载,否则你需要在每个docker主机本地存在容器镜像. 所以搭建一个私有仓库,由私有仓库提供所需要的镜像, 本实验环境中用node1同时作为registry. 拉取本地私有仓库registry,查看registry镜像 基础环境 全部为CentOS7系统,Docker 版本为1.12

docker swarm 集群创建

一. 环境准备 1. 准备3台虚拟机,IP和主机名设置如下 192.168.71.137 manager1 192.168.71.141 worker1 192.168.71.140 worker2 2. 系统和软件版本 系统版本 [[email protected] ~]# cat /etc/redhat-release CentOS Linux release 7.2.1511 (Core) 内核版本 [[email protected] ~]# uname -r 3.10.0-327.36