Docker Swarm Service

本文详细介绍了Docker Swarm中的Service管理,包括Service的概念、任务调度、副本和全局服务的部署、任务状态、服务操作如创建、扩展、更新及回滚等。还涉及服务配置细节,如运行环境设置、控制服务位置、更新策略等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Service介绍

要在Docker引擎处于群集模式时部署image,需要创建一个Service(服务)。
创建一个服务时,指定要使用哪个容器镜像,以及要在正在运行的容器中执行哪些命令。还可以为服务定义选项,包括:

  • 群集所在的端口使服务在群集外部可用
  • 一个覆盖网络,用于服务连接到群中的其他服务
  • CPU和内存限制和保留
  • 滚动更新策略
  • 要在群集中运行的映像副本的数量

Services, tasks, and containers

当部署服务到 swarm,swarm manager接收你对服务期望状态的定义。然后它为服务在 swarm 中的节点调度一个或多个副本任务。这些任务在 swarm 的节点上彼此独立地运行。
例如假设你想负载均衡三个 HTTP 服务器实例。下面的图表展示了三个 HTTP 服务器副本。
三个 HTTP 实例中的每一个是 swarm 中的一个任务。

services-diagram.png

容器是一个独立的进程。在swarm模式模式中,每个task只调用一个容器。task类似于调度程序放置容器的“插槽”。一旦容器处于活动状态,调度程序就会识别出任务处于运行状态。如果容器未通过健康检查或终止,则任务终止。

Tasks and scheduling

任务是 swarm 内调度的原子单位。当你通过创建或更新服务声明一个期望状态的服务,调度器通过调度任务来实现期望的状态。例如,你指定一个服务始终保持运行三个HTTP 实例。调度器就创建三个任务。每个任务运行一个容器。容器是任务的实例化。如果一个 HTTP 容器之后出现故障停止,此任务被标志为失败,调度器就会创建一个新的任务来生成一个新容器

任务是一个单向机制。它单向地执行一系统状态,assigned,prepared, running 等。如果一个任务失败了,调度器就会删除这个任务和它的容器,然后创建一个新的任务来替换它。

下面的图表显示 swarm 模式是如何接收服务创建请求和调度任务到 worker 节点的。

service-lifecycle.png

Replicated and global services

有两种类型的services部署,副本和全局

  • Replicated services
    你可以指定运行相同任务的数量。例如,你决定部署三个 HTTP 实例的副本,每个提供相同的内容。
  • global services
    在每个节点上运行一个相同的任务。不需要预先指定任务的数量。每次增加一个节点到 swarm 中,协调器就会创建一个任务,然后调度器把任务分配给新节点。

下图表示用黄色表示拥有三个副本的 Replicated service,用灰色表示了一个global service

replicated-vs-global.png

task 状态

Docker允许你创建可以启动任务的服务。服务是对所需状态的描述,任务完成这项工作。在集群节点上按以下顺序调度工作:

  • 使用docker service create或UCP web UI或CLI创建服务。
  • 请求被发送到Docker manager节点。
  • Docker manager节点将服务安排在特定节点上运行。
  • 每个服务可以启动多个任务。
  • 每个任务都有一个生命周期,有像NEW、PENDING和COMPLETE这样的状态。

任务是运行一次直至完成的执行单元。当一个任务停止时,它不会再次执行,但是一个新的任务可能会取而代之。
任务在许多状态中前进,直到它们完成或失败。任务在新状态中初始化。任务通过许多状态向前推进,而它的状态不会后退。例如,任务永远不会从COMPLETE变为RUNNING。

task的生命周期

NEW       任务在初始化状态
PENDING   正在分配任务所用的资源
ASSIGNED  Docker分配任务给节点
ACCEPTED  任务被工作节点接受。如果工作节点拒接任务,状态将会转变成REJECTED
PREPARING Docker正在准备任务
STARTING  Docker正在开启任务
RUNNING   任务正在执行
COMPLETE  任务结束,不带错误代码
FAILED    任务结束,带着错误代码
SHUTDOWN  Docker请求任务关闭
REJECTED  工作节点拒绝任务
ORPHANED  节点宕机时间太长
REMOVE    该任务不是终端,但相关服务已被删除或缩小

查看task状态
运行docker service ps 去得到任务状态。CURRENT STATE字段显示了任务状态以及该任务存在时间

```script
$ docker service ps webserver
ID                  NAME                IMAGE               NODE                DESIRED STATE       CURRENT STATE            ERROR                              PORTS
owsz0yp6z375        webserver.1         nginx               UbuntuVM            Running             Running 44 seconds ago
j91iahr8s74p         \_ webserver.1     nginx               UbuntuVM            Shutdown            Failed 50 seconds ago    "No such container: webserver.…"
7dyaszg13mw2         \_ webserver.1     nginx               UbuntuVM            Shutdown            Failed 5 hours ago    
```

操作

部署一个Service到swarm
  1. 执行下面的命令

    [root@localhost ~]# docker service create --replicas 1 --name helloworld alpine ping www.baidu.com
    7k5nx2b4zj8at0aohqfj6lcqw
    overall progress: 1 out of 1 tasks 
    1/1: running   [==================================================>] 
    verify: Service converged
  • docker service create 创建服务
  • --name service的名字
  • --replicas指定一个service有几个实例运行
  1. 查看运行的service

    [root@localhost ~]# docker service list
    ID                  NAME                MODE                REPLICAS            IMAGE               PORTS
    7k5nx2b4zj8a        helloworld          replicated          1/1                 alpine:latest
查看service的详细信息
  1. [root@localhost ~]# docker service inspect --pretty helloworld (or ServiceID)
    
    ID:     7k5nx2b4zj8at0aohqfj6lcqw
    Name:       helloworld
    Service 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值