共用方式為


NGroups 滾動更新

簡介

隨著需求變更,您可能需要持續更新 NGroups 及其容器群組 (CG)。

有兩種更新模式可用來更新 NGroups – 手動 (預設選項)和 滾動

在滾動更新 (RU) 內,有 2 個選項 – 就地更新和取代更新。 取代 RU 是預設選項。

本文件詳細說明 RU。 此處的 NGroups 檔連結涵蓋手動更新。

功能描述

請考慮將 cgprofile1 的 CG 配置文件參考更新為 cgprofile2 的基本範例。

就地滾動更新

使用就地 RU 時,當我們更新 cgprofile2 的參考併發出 UPDATE NGroups 命令時,現有的 CG 會以 cgprofile2 更新。 現有 CG 的更新會以小批次進行(而非一次全部)。 它可確保您的工作負載影響最小,因為更新期間可能只有少量的 CG 無法使用。

我們可以使用 NGroups API 來設定批次大小和其他相關的滾動更新模式設定。

由於就地 RU 會更新現有的 CG,因此 Azure 容器執行個體 (ACI) 強制執行的 CG 屬性有某些限制。

請參閱 ACI 關於更新 CG 的限制 。 此外,請參閱 這裡 ,以取得需要刪除的 CG 屬性(與更新)。

取代滾動更新

以取代 RU,當我們更新 cgprofile2 的參考併發出 UPDATE NGroups 命令時,會使用 cgprofile2 建立新的 CG。 刪除具有 cgprofile1 的現有 CG。 此建立和刪除會在小批次中發生(而非一次全部)。 這可確保您的工作負載影響最小,因為更新期間只有少量的 CG 受到影響。

如同就地 RU,我們可以使用 NGroups API 來設定批次大小和其他相關的輪流更新模式設定。

因為取代 RU 會建立新的 CG,因此 ACI 強制執行的限制較少。 因此,取代 RU 是更強大的選項,而且是客戶選取 RU 時的預設選項。

使用方式

觸發滾動更新

當進行 NGroups PUT 呼叫,且 PUT 呼叫中的 CG 配置檔與 NGroups 中目前參考的 CG 配置檔不同時,就會觸發滾動更新。

NGroups 接著會自動將實例分組成批次,並一次更新一個批次。 maxBatchPercent 參數會決定批次的大小。

更新 Batch

  • 就地更新會叫用 CG PUT 呼叫來更新批次的每個 CG。

  • 取代更新會叫用 CG PUT 呼叫,以建立新的 CG 並刪除批次的現有 CG。 所建立的 CG 與已刪除的 CG 之間有 1:1 的對應。 不過,CG 名稱會有所不同。

如果批次中足夠數量的 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 期間自動挑選最新的映像版本。 若要防止應用程式中發生非預期的行為,建議您不要使用 影像的最新 標籤。 請改用特定版本。

注意

若要使用 replace 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 中特定批次的 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 設定。