编写部署规范

笔记:

部署是 Compose 规范的可选部分

Compose 部署规范允许您声明服务的附加元数据,以便 Compose 获取相关数据以在平台上分配足够的资源并配置它们以满足您的需求。

属性

端点模式

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

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

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

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

标签

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

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

模式

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

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

放置

placement指定平台选择物理节点来运行服务容器的约束和首选项。

限制条件

constraints定义平台节点必须满足才能运行服务容器的必需属性。它可以通过列表或带有字符串值的映射来设置。

deploy:
  placement:
    constraints:
      - disktype=ssd
deploy:
  placement:
    constraints:
      disktype: ssd

优先

preferences定义平台节点应满足运行服务容器的属性。它可以通过列表或带有字符串值的映射来设置。

deploy:
  placement:
    preferences:
      - datacenter=us-east
deploy:
  placement:
    preferences:
      datacenter: us-east

复制品

如果服务是replicated(这是默认值),则replicas指定在任何给定时间应运行的容器数量。

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

中央处理器

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

记忆

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

PID

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

设备

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

设备使用功能列表进行保留,这是capabilities唯一必填字段。设备必须满足成功预订所需的所有功能。

能力

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

  • gpu:图形加速器
  • tpu:人工智能加速器

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

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

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

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

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

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

count并且device_ids字段是排他的。如果两者都指定,Compose 将返回错误。

设备ID

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

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

count并且device_ids字段是排他的。如果两者都指定,Compose 将返回错误。

选项

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

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

重启策略

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

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

回滚配置

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

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

更新配置

update_config配置服务应如何更新。对于配置滚动更新很有用。

  • parallelism:一次更新的容器数量。
  • delay:更新一组容器之间等待的时间。
  • failure_action: 更新失败怎么办?continuerollback、 或之一pause(默认值:pause)。
  • monitor:每个任务更新后监视失败的持续时间(ns|us|ms|s|m|h)(默认 0 秒)。
  • max_failure_ratio:更新期间可容忍的失败率。
  • order:更新期间的操作顺序。stop-first(旧任务在启动新任务之前停止)或start-first(新任务首先启动,并且正在运行的任务短暂重叠)之一(默认stop-first)。
deploy:
  update_config:
    parallelism: 2
    delay: 10s
    order: stop-first