Docker Swarm集群管理

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: Docker Swarm集群管理

Docker Swarm是Docker引擎原生内置的容器集群管理工具。

基本概念

Swarm节点

运行Docker的主机可以主动初始化一个Swarm集群作为Leader节点或者加入一个已存在的Swarm集群,这样这个运行Docker的主机就成为一个Swarm集群的节点。
Swarm集群节点可以分为manager管理节点work工作节点

管理节点用于Swarm集群的管理,docker swarm命令基本只能在管理节点执行。一个Swarm集群可以有多个管理节点,但只有一个管理节点可以成为Leader。

为了利用Swarm模式的容错特性,Docker建议您根据组织的高可用性要求实现奇数个节点。当您有多个管理器时,您可以从管理器节点的故障中恢复而无需停机。Docker建议一个Swarm最多使用七个管理器节点。一个N管理器集群最多可以容忍丢失$\frac{N - 1}{2}$管理器。如:一个三管理器群最多可以容忍一名管理器的损失。

工作节点是任务执行节点,管理节点将服务(service)下发至工作节点执行。管理节点默认也作为工作节点。也可以通过配置让服务只运行在管理节点。
docker-node

任务与服务

  • 任务(task)是Swarm中的最小的调度单位,目前来说就是一个单一的容器。
  • 服务(services)是指一组任务的集合,服务定义了任务的属性。
    task and service

    集群管理

    端口配置

    docker swarm port
  • 2377(TCP): 用来与管理器节点之间进行通信。不开放2377端口,可能会导致无法加入集群中。
  • 7946(TCP/UDP): 用于docker节点之间的通信。
  • 4789(UDP): 覆盖网络流量。
    • 4789端口是Swarm数据路径端口的默认值,也称为VXLAN端口。防止任何不受信任的流量到达此端口很重要,因为VXLAN不提供身份验证。此端口应只对受信任的网络开放,而绝不能在外围防火墙上开放。

创建集群

{
   
   mathJaxContainer[1]}{
   
   IP}

Swarm initialized: current node (xxx) is now a manager.

To add a worker to this swarm, run the following command:

    docker swarm join --token xxx IP:2377

To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

在服务器上调用docker swarm init若输出正常即集群模式创建成功。本主机自动成为Leader管理员节点。当一台主机有多个网卡多个IP时,需要使用--advertise-addr参数来指定IP。

加入集群

在加入集群时,需要保证两个主机之间可以正常通讯。在加入集群时,需要Leader节点的token信息。在Leader节点中输入:

$ docker swarm join-token [manager|worker]

To add a manager to this swarm, run the following command:

    docker swarm join --token xxx IP:2377

根据需要加入工作节点还是管理节点选择参数,生成加入节点的语句。在主机中键入命令即可加入Leader节点。

$ docker swarm join --token xxx IP:2377

查看集群

$ docker node ls
ID      HOSTNAME         STATUS    AVAILABILITY   MANAGER STATUS   ENGINE VERSION
xxx *   docker-desktop   Ready     Active         Leader           20.10.23

通过docker node ls命令查看当前集群中有多少节点,节点的活动状况。

退出集群

$ docker swarm leave --force
Node left the swarm.

通过docker swarm leave来离开集群,对于Leader节点或退出集群失败的情况可以通过--force参数来强制退出。

节点设置

节点标签设置

在集群环境中,因为不同节点的系统、配置、环境等的不同,导致有的服务只能在只能在指定的机器上跑(如:只在带GPU机器上跑人工智能相关模型的服务),或者由于业务原因导致我们需要在特定的节点上跑相关服务。我们可以通过给节点设置label标签的方式来使节点固定在相关的机器上。

{
   
   mathJaxContainer[2]}{
   
   key}={
   
   mathJaxContainer[3]}{
   
   node_id}

${node_id}可以根据docker node ls命令进行查看,通过给节点添加label,在docker-compose文件中添加如下配置使服务只能在指定节点中运行。

deploy:
      placement:
        constraints:
          - node.labels.{
   
   mathJaxContainer[4]}{
   
   value}

节点信息查询

{
   
   mathJaxContainer[5]}{
   
   node_id}
...
"Spec": {
   
   
            "Labels": {
   
   
                "arch": "x86_64"
            },
            "Role": "manager",
            "Availability": "active"
        },
...

通过docker inspect ${node_id}命令来查看节点的详情信息,如:我们可以通过inspect命令来查看我们对节点设置的标签信息。

服务管理

Docker Swarm采用懒加载的方式进行服务的部署,当调用完部署服务的命令后,可能会长时间看到服务没有正常启动,日志也没有任何输出,此时有可能是因为系统中还没有下载相关的镜像,Docker引擎正在后台默默的下载镜像。

部署服务

Swarm内置docker compose,可以通过docker-compose文件来进行部署,一次启动多个关联的服务。在Swarm中,我们可以使用docker stack deploy来进行Swarm服务的部署。

{
   
   mathJaxContainer[6]}{
   
   services_name} -c ${compose_file_path}

其中-c指定docker-compose文件,在一次部署中可以指定多个服务部署文件进行多服务的部署。

查看服务

$ docker stack ls

通过docker stack ls可以查看本集群中有多少服务集,各个服务集里面有多少个服务

{
   
   mathJaxContainer[7]}{
   
   services_name|servicves_id}

通过docker stack services ${services_name|servicves_id}命令查看该服务集下面有多少具体的服务,服务里面有多少个分片或任务,各个服务的具体运行情况。

服务日志查看

在docker服务中,可以通过volume挂在目录的方式将数据和日志等文件信息挂载到容器外。通过这种方式,可以有效健壮的保留容器的运行信息可进行容器迁移。在使用Docker时,建议将数据和日志挂载到外部磁盘上,这样可以打开外部文件进行日志信息的查看和传输管理等操作。
也可以使用如下命令:

docker service logs ${service_name|service_id} -f -t

注意查看日志的名称为${service_name|service_id}`。可以通过`docker stack services ${services_name|servicves_id}命令来查看具体的${service_name|service_id}信息、其中-t参数表示显示日志的时间戳,-f参数表示跟踪日志输出,即当在查看服务日志时,仍有日志输出,控制台会同步显示更新的日志信息。根据需要添加参数。

服务重启

docker service update --force

若服务因系统资源不足或出现错误等而出现挂掉的情况,等解决完问题后,可以使用docker service update --force命令来强制重启挂掉的服务。

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
1月前
|
Prometheus 监控 Cloud Native
如何使用Prometheus监控Docker Swarm集群的资源使用情况?
还可以根据实际需求进行进一步的配置和优化,如设置告警规则,当资源使用超出阈值时及时发出警报。通过这些步骤,能够有效地使用 Prometheus 对 Docker Swarm 集群的资源进行监控和管理。
73 8
|
1月前
|
Prometheus 监控 Cloud Native
如何监控Docker Swarm集群的性能?
如何监控Docker Swarm集群的性能?
130 8
|
1月前
|
调度 开发者 Docker
Docker Swarm
Docker Swarm 为容器化应用的部署和管理提供了一种高效、可靠的方式,使开发者能够更轻松地构建和运行分布式应用。随着容器技术的不断发展,Docker Swarm 在企业级应用中的应用也将越来越广泛。
63 8
|
1月前
|
监控 Docker 容器
Docker Swarm集群的扩展与缩容策略,涵盖其意义、方法、步骤及注意事项
本文深入探讨了Docker Swarm集群的扩展与缩容策略,涵盖其意义、方法、步骤及注意事项,旨在帮助用户高效管理集群资源,适应业务变化,确保服务稳定性和资源优化。
62 6
|
2月前
|
Kubernetes 负载均衡 调度
Docker Swarm 核心概念及详细使用
Docker Swarm 是 Docker 的原生集群管理工具,用于将多个 Docker 主机整合成一个虚拟主机,提供集群管理和调度功能。其核心特点包括集群管理、容错与高可用性、负载均衡、声明式服务模型、服务发现和安全性。本文档详细介绍了 Docker Swarm 的安装配置、服务部署、节点管理、网络配置及故障模拟等关键操作,适用于中小型项目或对 Kubernetes 复杂性有所顾虑的用户。
184 6
|
2月前
|
应用服务中间件 nginx Docker
Docker Swarm、Docker Stack和Portainer的使用
Docker Swarm、Docker Stack 和 Portainer 各有其独特的功能和优势。Docker Swarm 适用于分布式服务的管理和编排,Docker Stack 便于多容器应用的定义和部署,而 Portainer 提供了直观的 UI,简化了 Docker 环境的管理。结合使用这些工具,可以大大提高容器化应用的部署和管理效率。希望本文对您理解和应用这些工具有所帮助。
184 5
|
3月前
|
负载均衡 应用服务中间件 网络安全
docker swarm添加更多的服务
【10月更文挑战第16天】
44 6
|
2月前
|
API Docker 容器
【赵渝强老师】构建Docker Swarm集群
本文介绍了如何使用三台虚拟主机构建Docker Swarm集群。首先在master节点上初始化集群,然后通过特定命令将node1和node2作为worker节点加入集群。最后,在master节点上查看集群的节点信息,确认集群构建成功。文中还提供了相关图片和视频教程,帮助读者更好地理解和操作。
|
2月前
|
调度 Docker 容器
【赵渝强老师】Docker Swarm集群的体系架构
Docker Swarm自1.12.0版本起集成至Docker引擎,无需单独安装。它内置服务发现功能,支持跨多服务器或宿主机创建容器,形成集群提供服务。相比之下,Docker Compose仅限于单个宿主机。Docker Swarm采用主从架构,Swarm Manager负责管理和调度集群中的容器资源,用户通过其接口发送指令,Swarm Node根据指令创建容器运行应用。
|
2月前
|
负载均衡 安全 调度
深入调查研究Docker Swarm
【10月更文挑战第19天】
57 0

热门文章

最新文章