Published on

docker swarm容器编排

Authors
  • avatar
    Name
    MissTree
    Twitter

目录

swarm

swarm 作为docker集群管理工具,主要有以下功能:

  • 服务发现和负载均衡
  • 自动部署和回滚
  • 自动伸缩
  • 自动恢复
  • 自动更新
  • 自动备份

同等的服务框架有

  • Kubernetes(K8s):是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。它可以轻松地实现动态添加服务器主机(也称为节点)。
  • Spring Cloud:基于Spring Boot的框架,结合服务注册与发现、负载均衡等组件,可以实现动态扩展服务节点的能力。
  • Mesos:Mesos是一个开源的分布式系统内核,它提供了动态添加服务器主机的能力。
  • Ambari:Ambari是一个管理Hadoop的强大工具,它支持动态添加服务器到Hadoop集群内。
  • Nomad:HashiCorp Nomad是一个简单易用的工作负载编排器,用于在本地或云端部署和管理应用程序。它支持动态添加服务器主机来扩展应用程序的部署规模。 但是现在国内基本用的是 Kubernetes和Spring Cloud框架,这些框架基本已经自带了集群管理的功能。

创建集群

# 1、创建管理节点 执行此命令会将当前节点设置为管理节点和leader
docker swarm init

# 2、创建工作manager节点
docker swarm join-token manager   # 管理节点
# 指令:docker swarm join --token SWMTKN-1-1rofefy7pd37lblyu79tf394d5ea68nf8p69x9v1m1s907iw7b-b9d0gfqeqz0tetkbtmooocpoa 192.168.64.137:2377
# 创建工作节点
docker swarm join-token worker     
# 指令:docker swarm join --token SWMTKN-1-1rofefy7pd37lblyu79tf394d5ea68nf8p69x9v1m1s907iw7b-cuswxw5f8kkwmbhuipxo47i6k 192.168.64.137:2377

# 3、复制指令到对应的虚拟机节点执行

# 4、查看状态
docker info
# docker info 上包含 Swarm: active 说明集群已经创建成功 属性上有对应的节点信息
docker node ls
# 可以看到集群的状态,但是工作节点上不可以使用这两个命令,因为工作节点上没有管理节点的权限
# 若是有节点关闭了, docker node ls 看到的节点状态是 Down

# 5、关闭节点
docker swarm leave
# 关闭管理节点
docker swarm leave -f

# 通过 docker node ls 可以看到新的集群节点
# 6、删除节点 不是 down 状态的节点不能删除
docker swarm rm 节点ID

docker node update --availability drain 节点ID
# 节点状态为 drain 表示节点已经被标记为不可用状态,不会接收新的任务。
docker node update --availability pause 节点ID
# 节点状态为 pause 表示节点已经被暂停,不会接收新的任务。
docker node update --availability  节点ID

docker swarm rm是强制在 docker node ls 列表删除,若是节点没有移除集群,节点再次进入集群会报错,节点要先离开集群然后才能再次加入集群。
集群leader角色在挂掉后,集群会重新选举一个新的leader。再次进入集群后,会自动加入集群,但是是manager的角色了,不再是leader角色。

自动锁定

docker swarm update --autolock true 锁定集群,防止其他用户修改集群配置。 锁定后的集群无法修改,只能通过 docker swarm unlock 解锁。 解锁后,其他用户可以修改集群配置。
锁定后变化:

  • 之前加入集群的节点在关闭docker服务后,无法重新加入集群。
  • systemctl stop docker 无法关闭。
# 获取之前设定autolock的解锁密钥
docker swarm unlock-key

# 解锁集群 节点重新加入集群
docker swarm unlock  # 解锁密钥,输入之前获取的解锁密钥

已经创建的集群的manager,无法作为创建新集群的leader,要先离开当前集群 docker swarm leave

节点切换

不管是manager还是worker节点,都可以通过以下命令切换节点。

# 切换到manager节点
docker node update --role manager 节点ID

# 切换到worker节点
docker node update --role worker 节点ID

# 服务主机切换 promote-升级、demote-降级
docker node promote  节点ID
docker node demote  节点ID

更新节点信息

# 更新节点信息
docker node update 节点ID --label-add 标签名=标签值
docker node update 节点ID --label-rm 标签名
docker node update 节点ID --availability active
docker node update 节点ID --availability drain
docker node update 节点ID --availability pause

通过 docker node inspect 节点ID 可以查看节点信息。

节点服务

# 创建服务  replicas 的数值大于节点数,会自动创建多个副本
docker service create --name 服务名 --replicas 副本数 --publish 端口:端口 镜像名
# 查看服务
docker service ls
# 查看一个服务详情
docker service ps 服务名
# 查看节点的服务
docker node ps
# 删除服务
docker service rm 服务名

# 查看节点服务日志
docker service logs 服务ID
# 查看节点服务日志 跟随
docker service logs -f 服务ID
# 查看节点服务日志 跟随 显示时间戳
docker service logs -f --timestamps 服务ID
# 查看节点服务日志 跟随 显示时间戳 显示详细信息
docker service logs -f --timestamps --details 服务ID