次の方法で共有


NGroups ローリング アップデート

はじめに

要件が変わると、NGroups とそのコンテナー グループ (CG) を更新し続ける必要がある場合があります。

NGroups の更新には、手動 (既定のオプション) とローリングの 2 つの更新モードを使用できます。

ローリング アップデート (RU) には、"インプレース" アップデートと "リプレース" アップデートという 2 つのオプションがあります。 リプレース RU が既定のオプションです。

このドキュメントでは、RU について詳しく説明します。 手動更新については、NGroups のドキュメント リンク (こちら) で説明されています。

機能の説明

cgprofile1 から cgprofile2 に CG プロファイル参照を更新する基本的な例を考えてみましょう。

インプレース ローリング アップデート

インプレース RU では、参照を cgprofile2 に更新し、UPDATE NGroups コマンドを発行すると、"既存の CG" が cgprofile2 で更新されます。 既存の CG に対する更新は、(一度にすべてではなく) 小さなバッチで行われます。 これにより、更新中に使用できない可能性のある CG の割合がごくわずかになるため、確実にワークロードへの影響が最小限に抑えられます。

NGroups API を使用して、バッチ サイズやその他の関連するローリング アップデート モードの設定を構成できます。

インプレース RU は既存の CG を更新するため、Azure Container Instances (ACI) によって適用される CG プロパティには特定の制限があります。

CG の更新に関する ACI の制限事項を参照してください。 また、(更新ではなく) 削除が必要な 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 はインスタンスをバッチに自動的にグループ化し、一度に 1 つずつバッチを更新します。 maxBatchPercent パラメーターにより、バッチのサイズが決定します。

バッチを更新する

  • インプレース アップデートでは、CG PUT 呼び出しを呼び出してバッチの各 CG を更新します。

  • リプレース アップデートでは、CG PUT 呼び出しを呼び出して新しい CG を作成し、バッチの既存の CG を削除します。 作成される CG と削除される CG の間には、1 対 1 の対応が存在します。 しかし、CG 名は異なります。

pauseTimeBetweenBatches 期間後にバッチ内の十分な数の CG から正常なシグナルが提供された場合、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 プロファイル内のコンテナー イメージのイメージ バージョンが latest タグに設定されている場合、NGroups は RU 中に最新のイメージ バージョンを自動的に取得します。 アプリケーションの予期しない動作を防ぐために、イメージに latest タグを使用しないことをお勧めします。 代わりに、特定のバージョンを使用してください。

Note

リプレース 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 は、さらに別の障害モデル境界です。

お客様が 3 つのゾーンを設定した複数ゾーンの NGroup を使用している場合、バッチは最大で 1 つのゾーンにのみ属する CG に限定されます。 複数のゾーンに分散された CG でバッチが構成されることはありません。

お客様が複数ゾーンで複数 FD の NGroups を設定している場合、バッチは、最大で 1 つのゾーン内の 1 つの FD にのみ属する CG で構成されます。

NGroups は、バッチに対して選択された CG の数が maxBatchPercent 設定よりもはるかに少ない場合でも、この障害モデルの境界をバッチで保持します。 これは NGroups が、より高速な (したがってリスクの高い) アップデートよりも安全なアップデートを優先していることを反映しています。

エラー モデルの境界を越えるのは、RU が最初のバッチで異常な CG を選択したときだけです。 このバッチでは、NGroups の全体的な可用性を向上させるために、RU は異常なすべての CG の更新を試みます。 その結果、異常な CG を更新するときに RU が maxBatchPercent 設定を超える可能性があります。