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