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(標籤)

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 定義平台的節點必須滿足才能運行服務容器的必要屬性。更多範例,請參閱 CLI 參考文件

deploy:
  placement:
    constraints:
      - disktype=ssd

preferences(偏好)

preferences 定義一種策略(目前唯一支援的策略是 spread),以便在數據中心節點標籤的值上平均分配任務。更多範例,請參閱 CLI 參考文件

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

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(CPU)

cpus 設定容器可使用的可用 CPU 資源數量(以核心數表示)的限制或預留。

記憶體

memory 設定容器可分配的記憶體數量限制或預留,設定為表示 位元組值 的字串。

行程 ID

pids 調整容器的行程 ID 限制,設定為整數。

裝置

devices 設定容器可使用的裝置預留。它包含一個預留列表,每個預留都設定為一個物件,具有以下參數:capabilitiesdrivercountdevice_idsoptions

裝置使用功能列表進行預留,使 capabilities 成為唯一必填欄位。裝置必須滿足所有請求的功能才能成功預留。

功能

capabilities 設定為字串列表,表示通用功能和驅動程式特定功能。目前辨識以下通用功能

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

為了避免名稱衝突,驅動程式特定功能必須加上驅動程式名稱作為前綴。例如,預留啟用 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

countdevice_ids 欄位互斥。如果同時指定兩者,Compose 會傳回錯誤。

裝置 ID

如果設定了 device_ids,Compose 會預留具有指定 ID 的裝置,前提是它們滿足請求的功能。該值指定為字串列表。

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

countdevice_ids 欄位互斥。如果同時指定兩者,Compose 會傳回錯誤。

選項

可以使用 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:回滾失敗時的操作。continuepause 之一(預設值為 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:更新失敗時的操作。continuerollbackpause 之一(預設值: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