Compose 部署规范
属性
endpoint_mode
endpoint_mode
指定了外部客户端连接到服务的服务发现方法。Compose 部署规范定义了两个规范值
endpoint_mode: vip
: 为服务分配一个虚拟 IP (VIP),该 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
labels
指定了服务的元数据。这些标签只设置在服务上,而不是设置在服务的任何容器上。这假设平台有一些“服务”的原生概念,可以匹配 Compose 应用程序模型。
services:
frontend:
image: example/webapp
deploy:
labels:
com.example.description: "This label will appear on the web service"
mode
mode
定义了在平台上运行服务的复制模型。可以是 global
(每个物理节点正好一个容器),也可以是 replicated
(指定数量的容器)。默认值为 replicated
。
services:
frontend:
image: example/webapp
deploy:
mode: global
placement
placement
指定了平台选择物理节点来运行服务容器的约束和偏好。
constraints
constraints
定义了平台的节点必须满足的必要属性才能运行服务容器。它可以通过一个列表或一个包含字符串值的映射来设置。
deploy:
placement:
constraints:
- disktype=ssd
deploy:
placement:
constraints:
disktype: ssd
preferences
preferences
定义了平台的节点应该满足的属性才能运行服务容器。它可以通过一个列表或一个包含字符串值的映射来设置。
deploy:
placement:
preferences:
- datacenter=us-east
deploy:
placement:
preferences:
datacenter: us-east
replicas
如果服务是 replicated
(默认值),replicas
指定任何给定时间应运行的容器数量。
services:
frontend:
image: example/webapp
deploy:
mode: replicated
replicas: 6
resources
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
cpus
配置容器可以使用多少可用 CPU 资源(以内核数表示)的限制或预留。
memory
memory
配置容器可以分配的内存量限制或预留,设置为表示 字节值 的字符串。
pids
pids
调整容器的 PIDs 限制,设置为整数。
devices
devices
配置容器可以使用设备的预留。它包含一个预留列表,每个预留都设置为包含以下参数的对象:capabilities
、driver
、count
、device_ids
和 options
。
使用功能列表保留设备,使 capabilities
成为唯一必填字段。设备必须满足所有请求的功能才能成功预留。
capabilities
capabilities
设置为字符串列表,表示通用功能和特定于驱动程序的功能。以下通用功能目前得到认可
gpu
:图形加速器tpu
:AI 加速器
为了避免名称冲突,特定于驱动程序的功能必须以驱动程序名称为前缀。例如,预留支持 nVidia CUDA 的加速器可能如下所示
deploy:
resources:
reservations:
devices:
- capabilities: ["nvidia-compute"]
driver
可以使用 driver
字段请求保留设备的另一个驱动程序。该值设置为字符串。
deploy:
resources:
reservations:
devices:
- capabilities: ["nvidia-compute"]
driver: nvidia
count
如果 count
设置为 all
或未指定,Compose 会保留所有满足请求的功能的设备。否则,Compose 至少保留指定数量的设备。该值设置为整数。
deploy:
resources:
reservations:
devices:
- capabilities: ["tpu"]
count: 2
count
和 device_ids
字段是互斥的。如果同时指定两者,Compose 会返回错误。
device_ids
如果设置了 device_ids
,Compose 会保留具有指定 ID 的设备,前提是它们满足请求的功能。该值设置为字符串列表。
deploy:
resources:
reservations:
devices:
- capabilities: ["gpu"]
device_ids: ["GPU-f123d1c9-26bb-df9b-1c23-4a731f61d8c7"]
count
和 device_ids
字段是互斥的。如果同时指定两者,Compose 会返回错误。
options
可以使用 options
将特定于驱动程序的选项设置为键值对。
deploy:
resources:
reservations:
devices:
- capabilities: ["gpu"]
driver: gpuvendor
options:
virtualization: false
restart_policy
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
rollback_config
配置在更新失败的情况下服务应如何回滚。
parallelism
:一次回滚的容器数量。如果设置为 0,则所有容器都会同时回滚。delay
:每个容器组回滚之间等待的时间(默认值 0 秒)。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
update_config
配置服务应如何更新。对于配置滚动更新很有用。
parallelism
:一次更新的容器数量。delay
:更新一组容器之间等待的时间。failure_action
:如果更新失败,该怎么做。continue
、rollback
或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