简介
Swarm 在 Docker 1.12 版本之前属于一个独立的项目,在 Docker 1.12 版本发布之后,该项目合并到了 Docker 中,成为 Docker 的一个子命令。目前,Swarm 是 Docker 社区提供的唯一一个原生支持 Docker 集群管理的工具。它可以把多个 Docker 主机组成的系统转换为单一的虚拟 Docker 主机,使得容器可以组成跨主机的子网网络。
Docker Swarm 是一个为 IT 运维团队提供集群和调度能力的编排工具。用户可以把集群中所有 Docker Engine 整合进一个「虚拟 Engine」的资源池,通过执行命令与单一的主 Swarm 进行沟通,而不必分别和每个 Docker Engine 沟通。在灵活的调度策略下,IT 团队可以更好地管理可用的主机资源,保证应用容器的高效运行。
1、基本概念
节点--docker 节点 分为工作(worker)节点和管理(master)节点 ,管理节点用于swarm集群管理,工作节点是任务执行节点
服务和任务--任务是swarm中的最小调度单元,目前就是一个简单的容器,服务是指一组任务的集合,它定义了任务的属性
2、创建swarm集群
2.1、创建管理节点
docker swarm init
执行成功后会输出docker swarm join --token ... 命令,在其他机器上执行这个命令,就可以让这台机器加入这个集群
默认管理节点也是工作节点,可以使用以下命令禁止集群上的服务部署到管理节点,保证管路节点只做管理角色
docker node update --availability drain [naem|ID]
2.2、创建工作节点
在工作节点机器上执行上述输出的命令,执行成功后,工作节点就加入成功了,如果忘记上述命令可以在管理节点执行 docker swarm join-token worker 命令获得
2.3、创建备份管理节点
在主管理节点即第一次创建集群的机器上执行docker swarm join-token manager
会输出创建管理节点的命令,在要创建管理集群的节点上执行上述命令
2.4、查看集群状态
docker node ls
2.5、退出集群
docker swarm leave(在工作节点运行)
注意命令执行后立即在管理节点执行docker node ls 可以看到状态依然是Ready,需要等待一段时间状态才会变成DOWN
如果要删除管理节点,首先要在管理节点将要删除的管理节点降级成工作节点即使用
docker node demote [ID|name] ,再在已经降级为工作节点上执行dokcer swarm leave,如果使用docker swarm leave --force直接删除一个管理节点将会使集群崩溃
注意要退出集群时最好将此节点的状态先置为drain,使用如下命令
docker node update --availability drain [naem|ID]
使用上述命令后此节点上所有容器将迁移到其他工作节点上,
2.6、删除节点
在管理节点执行 docker node rm [ID|NAME] 删除一个退出集群的节点即状态必须是DOWN
2.7、升级和降级工作节点
将工作节点升级成管理节点
docker node promote [ID|name]
将管理节点降级为工作节点
docker node demote [ID|name]
2.8、调整节点访问属性
docker node update --availability active [ID|name]
将节点访问属性置为active, 表明节点可以被被分配任务
docker node update --availability pause [ID|name]
将节点访问属性置为pause, 表明节点暂停分配任务,当旧的任务或容器将保持,
docker node update --availability drain [ID|name]
将节点访问属性置为drain, 表明节点停止任务分配,并将已运行的任务分配到其他机器上
3、集群服务相关命令
3.1、查看服务列表
docker service ls
3.2、查看某个服务的具体信息
docker service ps [service_name]
3.3、创建一个服务
docker service create --replicas 3 -p 80:80 --name nginx nginx:1.13.7-alpine
3.4、更新服务参数
更新端口
docker service update --publish-rm 80:80 my_web
删除端口
docker service update --publish-rm 80:80 my_web
更新镜像
docker service update --image redis:3.0.7 redis
更改所分配的cpu和内存
docker service update --reserve-cpu 1 --reserve-memory 256m my_nginx
指定每次更新的容器数量
--update-parallelism
指定容器更新的间隔
--update-delay
3.5、服务回退
docker service rollback nginx
3.6、查看服务log
docker service ps nginx
3.7、删除一个镜像
docker service rm my_web
3.8、创建群组并配置cpu和内存
docker service create --name my_nginx --reserve-cpu 2 --reserve-memory 512m --replicas 3 nginx
3.9、服务伸缩
docker service scale nginx=5
3.10、docker swarm web管理工具
下载protainer镜像
docker pull portainer/portainer
启动镜像
docker run -d -p 9000:9000 --name portainer --restart always -v /var/run/docker.sock:/var/run/docker.sock -v /data/portainer:/data portainer/portainer
使用浏览器打开页面
注意
docker swarm 的命令一般只能在管理节点上执行,但docker swarm leave是可以在工作节点上执行的
3.11、错误汇总
1、Error response from daemon: error while validating Root CA Certificate: x509: certificate has expired or is not yet valid
原因:主机时间不同步导致的
解决方法:同步主机时间 ntpdate -u ntp.api.bz