簡介
隨著需求變更,您可能需要持續更新 NGroups 及其容器群組 (CG)。
有兩種更新模式可用來更新 NGroups - 手動 (預設選項) 和滾動。
在滾動更新 (RU) 內,有 2 個選項 - 就地更新和取代更新。 取代 RU 是預設選項。
本文件會詳細說明 RU。 手動更新會在 NGroups 文件連結 (這裡) 中說明。
功能描述
考慮將 CG 設定檔參考從 cgprofile1 更新為 cgprofile2 的基本範例。
就地滾動更新
使用就地 RU,當我們將參考更新為 cgprofile2 並發出 UPDATE NGroups 命令,現有的 CG 會更新為 cgprofile2。 對現有 CG 的更新會發生以小型批次進行 (而非全部一起進行)。 它可確保對您的工作負載影響最小,因為更新期間可能只有少量的 CG 無法使用。
我們可以使用 NGroups API 來設定批次大小和其他相關的滾動更新模式設定。
由於就地 RU 會更新現有的 CG,因此 Azure 容器執行個體 (ACI) 強制執行的 CG 屬性有某些限制。
請參閱 ACI 關於更新 CG 的限制。 此外,請參閱這裡,以取得需要刪除 (與更新) 的 CG 屬性。
取代滾動更新
使用取代 RU,當我們將參考更新為 cgprofile2 並發出 UPDATE NGroups 命令,新的 CG 會更新為 cgprofile2。 具有 cgprofile1 的現有 CG 會遭到刪除。 此建立和刪除會以小型批次進行 (而非全部一起進行)。 它可確保對您的工作負載影響最小,因為更新期間可能只有少量的 CG 受影響。
如同就地 RU,我們可以使用 NGroups API 來設定批次大小和其他相關的滾動更新模式設定。
因為取代 RU 會建立新的 CG,因此 ACI 強制執行的限制較少。 因此,取代 RU 是更強大的選項,而且是客戶選取 RU 時的預設選項。
使用量
觸發滾動更新
進行 NGroups PUT 呼叫,且 PUT 呼叫中的 CG 設定檔與 NGroups 中目前參考的 CG 設定檔不同時,就會觸發滾動更新。
接著 NGroups 會自動將執行個體群組成批次,並一次更新一個批次。 maxBatchPercent 參數會決定批次的大小。
更新批次
就地更新會叫用 CG PUT 呼叫,以更新批次的每個 CG。
取代更新會叫用 CG PUT 呼叫,以建立新的 CG 並刪除批次的現有 CG。 要建立的 CG 與要刪除的 CG 之間有 1:1 的關聯。 不過,這些 CG 的名稱不同。
如果在 pauseTimeBetweenBatches 期間之後,批次中有足夠數量的容器群組提供良好訊號,NGroups 會自動開始下一個批次的更新。 否則,它會停止推出。 maxUnhealthyPercent 參數會指定狀況不良的 CG 總數,而 maxUnhealthyUpdatedPercent 參數會指定更新後狀況不良的 CG 總數。
以下是一個向 NGroups 發出滾動更新請求的範例:
{
"location": "{{location}}",
"properties": {
"updateProfile": {
"updateMode": "Rolling",
"rollingUpdateProfile": {
// Maximum percentage of total CGs which can be updated
// simultaneously by rolling update in one batch.
“maxBatchPercent”: “10”, // optional, defaults to 20%
// Maximum percentage of the total CGs across the whole NGroup
// that can be unhealthy at a time either by rolling update or health
// checks by liveness probes. If there are more unhealthy CGs than this,
// the current rolling update is marked as failed.
// This check is a prerequisite to start any batch.
“maxUnhealthyPercent”: “10”, // optional, defaults to 20%
// Maximum percentage of the updated CGs which can be in unhealthy state
// after each batch is updated. If there are more unhealthy CGs than this,
// the current rolling update is marked as failed.
“maxUnhealthyUpdatedPercent”: 10, // optional, defaults to 20%
// The wait time between batches after completing one batch of the rolling
// update and before starting the next batch. The time duration should
// be specified in ISO 8601 format for duration.
"pauseTimeBetweenBatches": "PT2M", // optional, defaults to PT1M
// A nullable boolean property. Default is null
// Sets the mode to either in-place RU (when true) or replace (default) RU.
“inPlaceUpdate”: null/false/true
}
},
"containerGroupProfiles": [
{
"resource": {
"id": "/subscriptions/{{subId}}/resourceGroups/{{rgName}}/providers/Microsoft.ContainerInstance/containerGroupProfiles/cgp1"
}
}
]
}
}
如果映像版本針對 CG 設定檔內的容器映像設定為最新標記,則 NGroups 會在 RU 期間自動挑選最新的映像版本。 為了避免應用程式出現意外行為,建議不要使用 最新的 圖片標籤。 請改用特定版本。
附註
為使用取代 RU,請針對 NGroups 資源設定 "rollingupdate.replace.enabled: true" 標記。 此標記是暫時的,且未來將不需要此標記。
“tags”: {
“rollingupdate.replace.enabled”: true
}
取得執行中滾動更新的狀態
若要取得滾動更新的最新狀態,您可以使用此 REST API:
GET /subscriptions/{subscriptionId}/resourceGroups/{{rgName}}/providers/Microsoft.ContainerInstance/NGroups/{{ngroupsName}}/latestRollingUpdate
這會傳回包含 RU 相關資訊的回應。
取消滾動更新
若要取消滾動更新,請使用下列 API。 一旦取消,RU 就無法恢復或重新啟動。 必須觸發新的 RU。
POST /subscriptions/{subscriptionId}/resourceGroups/{{rgName}}/providers/Microsoft.ContainerInstance/NGroups/{{ngroupsName}}/cancelRollingUpdate
呼叫這個 API 時不需要提供請求實體。
同時也要知道,取消 RU 不會自動回復到之前的狀態,但會維持在取消時的狀態。 例如,在 RU 期間,若想要將 cgprofile1 的 CG 配置文件參考更新為 cgprofile2,且在某個時候取消作業時,某些 CG 可能會有新的設定檔 cgprofile2 ,而其他 CG 則維持 在 cgprofile1。
滾動更新中批次的界限
RU 中特定批次的 CG 不會跨越故障模型邊界。 錯誤模型代表區域/容錯網域 (FD) 組合。 例如,區域 1/FD 0 是錯誤模型界限,區域 1/FD 1 是另一個錯誤模型界限,而區域 2/FD 0 則是另一個錯誤模型界限。
如果客戶的一個多重區域 NGroups 已設定三個區域,則批次會限制在最多只屬於一個區域的 CG。 批次絕不會包含分散於多個區域的 CG。
如果客戶已設定一個多重區域和多重 FD NGroups,則批次仍會包含最多只屬於單一區域中一個 FD 的 CG。
NGroups 會在批次中維護此錯誤模型界限,即使為批次選取的 CG 數目遠小於 maxBatchPercent 設定也一樣。 它會反映 NGroups 偏好使用安全更新,而不是快速 (因此更有風險) 更新。
唯一一次會超過錯誤模型界限的時候,是當 RU 選取狀況不良的 CG 做為第一個批次時。 在此批次中,RU 會嘗試更新所有狀況不良的 CG,以改善 NGroups 的整體可用性。 因此,更新狀況不良的 CG 時,RU 可能會超過 maxBatchPercent 設定。