Compose 部署规范

Deploy 是 Compose 规范的可选部分。它提供了一组部署规范,用于管理容器在不同环境中的行为。

属性

endpoint_mode

endpoint_mode为连接到服务的外部客户端指定服务发现方法。Compose Deploy 规范定义了两个规范值:

  • endpoint_mode: vip:为服务分配一个虚拟 IP (VIP),该虚拟 IP 充当客户端访问服务的前端 在网络上。Platform 在客户端和运行服务的节点之间路由请求,而客户端不知道如何 许多节点正在参与服务或其 IP 地址或端口。

  • endpoint_mode: dnsrr:Platform 为服务设置 DNS 条目,以便服务名称的 DNS 查询返回 IP 地址列表(DNS 循环),客户端直接连接到其中一个地址。

services:
  frontend:
    image: example/webapp
    ports:
      - "8080:80"
    deploy:
      mode: replicated
      replicas: 2
      endpoint_mode: vip

标签

labels指定服务的元数据。这些标签仅在服务上设置,而不在服务的任何容器上设置。 这假定平台具有一些可以与 Compose 应用程序模型匹配的原生 “service” 概念。

services:
  frontend:
    image: example/webapp
    deploy:
      labels:
        com.example.description: "This label will appear on the web service"

模式

mode定义用于在平台上运行服务的复制模型。要么 ,每个物理节点只有一个容器,要么 指定数量的容器。默认值为 .globalreplicatedreplicated

services:
  frontend:
    image: example/webapp
    deploy:
      mode: global

放置

placement指定平台的约束和首选项,以选择物理节点来运行 Service Containers。

约束

constraints定义平台节点运行服务容器必须满足的必需属性。有关更多示例,请参阅 CLI 参考文档

deploy:
  placement:
    constraints:
      - disktype=ssd

偏好

preferences定义一个策略(目前是唯一支持的策略)以均匀分布任务 在 Datacenter Node 标签的值上。有关更多示例,请参阅 CLI 参考文档spread

deploy:
  placement:
    preferences:
      - spread: node.labels.zone

副本

如果服务是 (这是默认值),则指定应为 在任何给定时间运行。replicatedreplicas

services:
  frontend:
    image: example/webapp
    deploy:
      mode: replicated
      replicas: 6

资源

resources配置容器的物理资源约束以在平台上运行。这些约束可以配置 如:

  • limits:平台必须阻止容器分配更多。
  • reservations:平台必须保证容器至少可以分配配置的数量。
services:
  frontend:
    image: example/webapp
    deploy:
      resources:
        limits:
          cpus: '0.50'
          memory: 50M
          pids: 1
        reservations:
          cpus: '0.25'
          memory: 20M

CPU

cpus为容器可以使用的可用 CPU 资源量(内核数)配置限制或预留。

记忆

memory配置容器可以分配的内存量的限制或预留,设置为表示字节值的字符串。

PID

pids调整容器的 PID 限制,设置为整数。

设备

devices配置容器可以使用的设备的预留。它包含一个预留列表,每个预留都设置为具有以下参数的对象:、、 、 和 。capabilitiesdrivercountdevice_idsoptions

使用功能列表保留设备,使其成为唯一的必填字段。设备必须满足成功预留的所有请求功能。capabilities

能力

capabilities设置为字符串列表,表示通用和驱动程序特定的功能。 目前,以下通用功能得到了认可:

  • gpu:图形加速器
  • tpu:AI 加速器

为避免名称冲突,驱动程序特定的功能必须以驱动程序名称为前缀。 例如,保留启用了 nVidia CUDA 的加速器可能如下所示:

deploy:
  resources:
    reservations:
      devices:
        - capabilities: ["nvidia-compute"]
司机

可以使用 field 为保留的设备请求不同的驱动程序。该值指定为字符串。driver

deploy:
  resources:
    reservations:
      devices:
        - capabilities: ["nvidia-compute"]
          driver: nvidia
计数

如果设置为 或未指定,则 Compose 会保留满足所请求功能的所有设备。否则,Compose 至少会保留指定的设备数量。该值指定为整数。countall

deploy:
  resources:
    reservations:
      devices:
        - capabilities: ["tpu"]
          count: 2

count和 fields 是独占的。如果同时指定了这两者,则 Compose 将返回错误。device_ids

device_ids

如果已设置,则 Compose 会保留具有指定 ID 的设备,前提是这些设备满足请求的功能。该值指定为字符串列表。device_ids

deploy:
  resources:
    reservations:
      devices:
        - capabilities: ["gpu"]
          device_ids: ["GPU-f123d1c9-26bb-df9b-1c23-4a731f61d8c7"]

count和 fields 是独占的。如果同时指定了这两者,则 Compose 将返回错误。device_ids

选项

驱动程序特定的选项可以设置为 as 键值对。options

deploy:
  resources:
    reservations:
      devices:
        - capabilities: ["gpu"]
          driver: gpuvendor
          options:
            virtualization: false

restart_policy

restart_policy配置容器退出时是否以及如何重新启动容器。如果未设置,则 Compose 会考虑服务配置设置的字段。restart_policyrestart

  • condition.当设置为:
    • none,则无论退出状态如何,容器都不会自动重新启动。
    • on-failure,如果容器因错误而退出,则容器将重新启动,该错误表现为非零退出代码。
    • any(默认),则无论退出状态如何,容器都会重新启动。
  • delay:重启尝试之间等待的时间,指定为持续时间。默认值为 0,这意味着可以立即进行重启尝试。
  • max_attempts:在放弃之前尝试重启容器的次数(默认值:永不放弃)。如果重新启动没有 成功 ,此尝试不计入 Configured 值。 例如,如果设置为 '2',并且第一次尝试重启失败,则必须尝试两次以上的重启。windowmax_attemptsmax_attempts
  • window:在决定重启是否成功之前要等待多长时间,指定为持续时间(默认值: 立即决定)。
deploy:
  restart_policy:
    condition: on-failure
    delay: 5s
    max_attempts: 3
    window: 120s

rollback_config

rollback_config配置在更新失败时应如何回滚服务。

  • parallelism:一次要回滚的容器数量。如果设置为 0,则所有容器同时回滚。
  • delay:每个容器组回滚之间的等待时间(默认为 0 秒)。
  • failure_action:回滚失败怎么办。或 (默认)continuepausepause)
  • monitor:每次任务更新后监控失败的持续时间(默认为 0 秒)。(ns|us|ms|s|m|h)
  • max_failure_ratio:回滚期间允许的失败率(默认值为 0)。
  • order:回滚期间的操作顺序。其中之一 (旧任务在开始新任务之前停止), 或(首先启动新任务,并且正在运行的任务短暂重叠)(默认)。stop-firststart-firststop-first

update_config

update_config配置服务的更新方式。用于配置滚动更新。

  • parallelism:一次要更新的容器数。
  • delay:更新一组容器之间的等待时间。
  • failure_action:如果更新失败该怎么办。、 、 或 (default: ) 之一。continuerollbackpausepause
  • monitor:每次任务更新后监控失败的持续时间(默认为 0 秒)。(ns|us|ms|s|m|h)
  • max_failure_ratio:更新期间允许的失败率。
  • order:更新期间的操作顺序。其中之一 (旧任务在开始新任务之前停止), 或(首先启动新任务,并且正在运行的任务短暂重叠)(默认)。stop-firststart-firststop-first
deploy:
  update_config:
    parallelism: 2
    delay: 10s
    order: stop-first