Compose 部署规范
部署是Compose规范的一个可选部分。它提供了一组部署规范,用于管理不同环境中容器的行为。
属性
endpoint_mode
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
mode 定义了在平台上运行服务时使用的复制模型。可以是 global,即每个物理节点上恰好一个容器,或者是 replicated,即指定数量的容器。默认值为 replicated。
services:
frontend:
image: example/webapp
deploy:
mode: globalplacement
placement 指定了平台选择物理节点以运行服务容器的约束和偏好。
约束条件
constraints 定义了平台节点必须满足的属性才能运行服务容器。有关更多示例,请参阅
CLI 参考文档。
deploy:
placement:
constraints:
- disktype=ssdpreferences
preferences 定义了一种策略(目前仅支持 spread 策略),用于在数据中心节点标签的值上均匀分布任务。有关更多示例,请参阅
CLI 参考文档
deploy:
placement:
preferences:
- spread: node.labels.zonereplicas
如果服务是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: 20Mcpus
cpus 配置了一个容器可以使用的可用CPU资源的限制或保留,以核心数为单位。
memory
memory 配置容器可以分配的内存量的限制或保留,设置为表示字节值的字符串。
pids
pids 调整容器的PIDs限制,设置为整数。
设备
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: nvidiacount
如果 count 设置为 all 或未指定,Compose 将保留所有满足请求能力的设备。否则,Compose 至少保留指定数量的设备。该值指定为整数。
deploy:
resources:
reservations:
devices:
- capabilities: ["tpu"]
count: 2count 和 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: falserestart_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: 120srollback_config
rollback_config 配置了在更新失败时服务应如何回滚。
parallelism: 每次回滚的容器数量。如果设置为0,所有容器将同时回滚。delay: 每个容器组回滚之间的等待时间(默认0秒)。failure_action: 如果回滚失败该怎么办。选项为continue或pause(默认为pause)monitor: 每次任务更新后监控失败的持续时间(ns|us|ms|s|m|h)(默认 0s).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)(默认 0s).max_failure_ratio: 更新期间可容忍的故障率。order: 更新期间的操作顺序。可以是stop-first(在启动新任务之前停止旧任务), 或start-first(首先启动新任务,并且运行的任务会短暂重叠)(默认值为stop-first)。
deploy:
update_config:
parallelism: 2
delay: 10s
order: stop-first