Azure Kubernetes Fleet Manager を使用して、複数のクラスターで Kubernetes とノード イメージを更新する

適用対象: ✔️ Fleet Manager ✔️ ハブ クラスターを持つFleet Manager

多数のクラスターを管理するプラットフォーム管理者は、安全かつ予測可能な方法で複数のクラスターの更新 (ノード OS イメージまたは Kubernetes のバージョンのアップグレードなど) をステージングする際に問題を抱えていることがよくあります。 この課題に対処するため、Azure Kubernetes Fleet Manager (Fleet) では、更新実行を使って、複数のクラスター間で更新を調整できます。

更新実行はステージ、グループ、戦略で構成され、手動で 1 回だけ適用するか、自動アップグレード プロファイルを使って継続的な定期更新を自動的に適用することができます。 すべての更新実行 (手動または自動) では、メンバー クラスターのメンテナンス期間が優先されます。

このガイドでは、更新実行を構成し手動で実行する方法について説明します。

前提条件

  • このガイドで参照されている更新の戦略、実行、ステージ、グループについての説明は、この機能の概念の概要でご確認ください。

  • 1 つ以上のメンバー クラスターを持つフリート リソースが存在する必要があります。 そうでない場合は、クイックスタートに従って Fleet リソースを作成し、Azure Kubernetes Service (AKS) クラスターをメンバーとして参加させます。

  • 以下の環境変数を設定します。

    export GROUP=<resource-group>
    export FLEET=<fleet-name>
    
  • この記事にある Azure CLI の手順を実行する場合は、Azure CLI バージョン 2.58.0 以降がインストールされている必要があります。 インストールとアップグレードについては、「Azure CLI のインストール」を参照してください。

  • また、fleet Azure CLI 拡張機能も必要なので、次のコマンドを実行してインストールします。

    az extension add --name fleet
    

    リリースされている最新バージョンの拡張機能に更新するには、az extension update コマンドを実行します。

    az extension update --name fleet
    

クラスターのアップグレード シーケンスの定義

更新実行では、クラスターのアップグレード シーケンスについて 2 つのオプションがサポートされています。

  • 1 つずつ: クラスター アップグレード シーケンスを制御する必要性を感じない場合は、one-by-one により、フリートのすべてのメンバー クラスターを一度に 1 つずつ順番にアップグレードする簡単な方法が利用できます。
  • 更新グループとステージを使ってクラスターのシーケンスを制御する: クラスター アップグレード シーケンスを制御したい場合は、更新グループと更新ステージの中でメンバー クラスターを構造化できます。 このシーケンスは、更新戦略の形式でテンプレートとして保存できます。 その後は、更新実行の作成が必要になるたびにシーケンスを定義するのではなく、更新戦略を使って更新実行を作成できます。

更新実行では、ユーザーが AKS クラスター レベルで設定する計画メンテナンス期間が優先されます。 計画メンテナンス期間で構成されたメンバー クラスターが、更新実行でどう処理されるかについては、複数のメンバー クラスターを対象とする計画メンテナンスに関する記事をご覧ください。

すべてのクラスターを 1 つずつ更新する

  1. Azure portal で、Azure Kubernetes Fleet Manager リソースに移動します。

  2. サービス メニューの [設定] で、[複数のクラスターの更新]>[実行の作成] を選びます。

  3. 更新実行の名前を入力し、アップグレードの種類で [1 つずつ] を選びます。

    Azure Kubernetes Fleet Manager でクラスターを 1 つずつ更新する更新実行を作成するための Azure portal のペインのスクリーンショット。

  4. [アップグレードのスコープ] で、次のいずれかのオプションを選びます。

    • コントロール プレーンとノード プールの両方の Kubernetes バージョン
    • クラスターのコントロール プレーンのみの Kubernetes バージョン
    • ノード イメージのバージョンのみ
  5. [ノード イメージ] で、次のいずれかのオプションを選びます。

    • [最新のイメージ]: 更新実行内のすべての AKS クラスターを、そのリージョンのそのクラスターで利用できる最新のイメージに更新します。
    • [一貫したイメージ]: 更新実行では、AKS クラスターが複数のリージョンに存在し、それらで利用できる最新のノード イメージが異なる可能性があります (詳しくは、リリース トラッカーをご確認ください)。 更新の実行では、一貫性を実現するために、これらすべてのリージョンにおいて共通の最新イメージが選択されます。

    Important

    ノード イメージのバージョンは、元の発行日から 90 日間のみ有効です。 更新プログラムの実行によって選択されたターゲット ノード イメージのバージョンが、メンバー クラスターのアップグレードまでに 90 日の期間を超えた場合、そのメンバー クラスターのアップグレードが失敗する可能性があります。

    更新実行を作成するための Azure portal のペインのスクリーンショット。[アップグレード スコープ] セクションが表示されています。

  6. [作成] を選んで更新実行を作成します。

  1. az fleet updaterun create コマンドを使い、--upgrade-type--node-image-selection フラグの値を選んで、更新実行を作成します。 次のコマンドでは、そのリージョンで各クラスターに利用できる最新のノード イメージを使い、コントロール プレーンとノード プールの両方の Kubernetes バージョンをアップグレードする更新実行が作成されます。

    --upgrade-type フラグは、次の値をサポートします。

    • Full は、コントロール プレーンの Kubernetes バージョンとノード プールを、ノード イメージと共にアップグレードします。
    • ControlPlaneOnly は、クラスターのコントロール プレーンの Kubernetes バージョンのみをアップグレードします。
    • NodeImageOnly は、ノード イメージのみをアップグレードします。

    --node-image-selection フラグは、次の値をサポートします。

    • Latest: 更新実行内のすべての AKS クラスターを、そのリージョンのそのクラスターで利用できる最新のイメージに更新します。
    • Consistent: 更新実行では、AKS クラスターが複数のリージョンに存在し、それらで利用できる最新のノード イメージが異なる可能性があります (詳しくは、リリース トラッカーをご確認ください)。 更新の実行では、一貫性を実現するために、これらすべてのリージョンにおいて共通の最新イメージが選択されます。
    az fleet updaterun create \
     --resource-group $GROUP \
     --fleet-name $FLEET \
     --name run-1 \
     --upgrade-type Full \
     --kubernetes-version 1.26.0 \
     --node-image-selection Latest
    
  2. az fleet updaterun start コマンドを使って更新実行を開始します。

    az fleet updaterun start \
     --resource-group $GROUP \
     --fleet-name $FLEET \
     --name run-1
    

更新実行を作成する際に、更新の実行範囲を制御できる機能があります。 --upgrade-type フラグは、次の値をサポートします。

  • ControlPlaneOnly は、クラスターのコントロール プレーンの Kubernetes バージョンのみをアップグレードします。
  • Full は、コントロール プレーンの Kubernetes バージョンとノード プールを、ノード イメージと共にアップグレードします。
  • NodeImageOnly は、ノード イメージのみをアップグレードします。

また、--node-image-selection フラグは、次の値をサポートします。

  • [最新]: 更新の実行内のすべての AKS クラスターを、そのリージョンのそのクラスターで使用可能な最新のイメージに更新します。
  • [一貫]: 更新実行では、AKS クラスターが複数のリージョンに存在し、それらで利用できる最新のノード イメージが異なる可能性があります (詳細については、リリース トラッカーをご確認ください)。 更新の実行では、一貫性を実現するために、これらすべてのリージョンにおいて共通の最新イメージが選択されます。

Important

ノード イメージのバージョンは、元の発行日から 90 日間のみ有効です。 更新プログラムの実行によって選択されたターゲット ノード イメージのバージョンが、メンバー クラスターのアップグレードまでに 90 日の期間を超えた場合、そのメンバー クラスターのアップグレードが失敗する可能性があります。

更新実行の開始:

更新実行を開始するには、次のコマンドを実行します。

az fleet updaterun start \
 --resource-group $GROUP \
 --fleet-name $FLEET \
 --name <run-name>

グループとステージを使用してクラスターを更新する

更新ステージを使って更新実行を定義し、異なる更新グループに対し更新するアプリケーションの順序を指定できます。 たとえば、最初の更新ステージでテスト環境のメンバー クラスターを更新し、2 番目の更新ステージで運用環境のメンバー クラスターを更新します。 また、各ステージの前後に必要な承認と、更新ステージ間の待機時間を指定することもできます。 このシーケンスは、更新戦略の形式でテンプレートとして保存できます。

  1. Azure portal で、Azure Kubernetes Fleet Manager リソースに移動します。

  2. サービス メニューの [設定] で、[複数のクラスターの更新]>[実行の作成] を選びます。

  3. 更新実行の名前を入力してから、更新シーケンスの種類として [ステージ] を選びます。

    更新実行内のステージ モードを選択するための Azure portal ページのスクリーンショット。

  4. [ ステージの作成] を選択し、ステージの名前を入力し、必要に応じて承認とステージ間の待機時間を設定します。

    ステージを作成して待ち時間を定義するための Azure portal のページのスクリーンショット。

  5. このステージに含める更新グループを選びます。 更新グループを特定のシーケンスで更新したい場合は、その順序を指定することもできます。 完了したら [作成] を選択します。

    アップグレード グループの選択が表示された、ステージ作成のための Azure portal のページのスクリーンショット。

  6. [アップグレードのスコープ] で、次のいずれかのオプションを選びます。

    • コントロール プレーンとノード プールの両方の Kubernetes バージョン
    • クラスターのコントロール プレーンのみの Kubernetes バージョン
    • ノード イメージのバージョンのみ
  7. [ノード イメージ] で、次のいずれかのオプションを選びます。

    • [最新のイメージ]: 更新実行内のすべての AKS クラスターを、そのリージョンのそのクラスターで利用できる最新のイメージに更新します。
    • [一貫したイメージ]: 更新実行では、AKS クラスターが複数のリージョンに存在し、それらで利用できる最新のノード イメージが異なる可能性があります (詳しくは、リリース トラッカーをご確認ください)。 更新の実行では、一貫性を実現するために、これらすべてのリージョンにおいて共通の最新イメージが選択されます。

    更新実行を作成するための Azure portal のペインのスクリーンショット。[アップグレード スコープ] セクションが表示されています。

  8. [作成] を選んで更新実行を作成します。

    更新実行を作成するたびにステージとその順序を指定することは繰り返しであり、複雑さを増します。 更新戦略を使用すると、更新実行のためのテンプレートを保存できるため、このプロセスを簡略化できます。 詳細については、更新戦略の作成と使用をご確認ください。

  9. [複数のクラスターの更新] メニューで、更新実行を選んでから、[開始] を選びます。

  1. 更新実行のステージとグループを定義する JSON ファイルを作成します。 ステージ ファイル (example-stages.json) からの入力の例を次に示します。

    {
        "stages": [
            {
                "name": "stage1",
                "maxAllowedFailures": "2",
                "groups": [
                    {
                        "name": "group-1a"
                    },
                    {
                        "name": "group-1b"
                    },
                    {
                        "name": "group-1c"
                    }
                ],
                "afterStageWaitInSeconds": 3600
            },
            {
                "name": "stage2",
                "groups": [
                    {
                        "name": "group-2a",
                        "maxAllowedFailures": "1"
                    },
                    {
                        "name": "group-2b"
                    },
                    {
                        "name": "group-2c"
                    }
                ]
            }
        ]
    }
    

    オプションの maxAllowedFailures フィールドは、セグメントが失敗としてマークされる前に、ステージまたはグループ レベルで許容されるメンバー クラスターのアップグレードエラーの数を制御します。 設定を解除するか、 "0"すると、1 回の失敗で更新プログラムの実行が停止します。

    この設定では、成功率ではなく、失敗数のみが評価されます。 その結果、構成されたしきい値を超えなければ、一部またはすべてのメンバーが失敗した場合でも、グループは Completed に達する可能性があります。 実行が完了したら、常に FailureCount、メンバーの状態、およびエラー メッセージを確認します。

    値には、固定整数 ( "2" など) またはパーセンテージ (たとえば、 "25%") を指定できます。 詳細については、「 許容される最大エラー数 (プレビュー)」を参照してください。

  2. az fleet updaterun create コマンドを使い、--stages フラグを JSON ファイルの名前に設定し、--upgrade-type--node-image-selection フラグには必要な値を指定して更新実行を作成します。 次のコマンドでは、そのリージョンで各クラスターに利用できる最新のノード イメージを使い、コントロール プレーンとノード プールの両方の Kubernetes バージョンをアップグレードする更新実行が作成されます。

    --upgrade-type フラグは、次の値をサポートします。

    • Full は、コントロール プレーンの Kubernetes バージョンとノード プールを、ノード イメージと共にアップグレードします。
    • ControlPlaneOnly は、クラスターのコントロール プレーンの Kubernetes バージョンのみをアップグレードします。
    • NodeImageOnly は、ノード イメージのみをアップグレードします。

    --node-image-selection フラグは、次の値をサポートします。

    • Latest: 更新実行内のすべての AKS クラスターを、そのリージョンのそのクラスターで利用できる最新のイメージに更新します。
    • Consistent: 更新実行では、AKS クラスターが複数のリージョンに存在し、それらで利用できる最新のノード イメージが異なる可能性があります (詳しくは、リリース トラッカーをご確認ください)。 更新の実行では、一貫性を実現するために、これらすべてのリージョンにおいて共通の最新イメージが選択されます。
    az fleet updaterun create \
     --resource-group $GROUP \
     --fleet-name $FLEET \
     --name run-1 \
     --upgrade-type Full \
     --kubernetes-version 1.26.0 \
     --node-image-selection Latest \
     --stages example-stages.json
    
  3. az fleet updaterun start コマンドを使って更新実行を開始します。

    az fleet updaterun start \
     --resource-group $GROUP \
     --fleet-name $FLEET \
     --name run-1
    

更新戦略を使用して更新実行を作成する

更新実行を作成するには、ステージ、グループ、順序を毎回指定する必要があります。 更新戦略を使用すると、更新実行のためのテンプレートを保存できるため、このプロセスを簡略化できます。

同じ更新戦略から、それぞれ一意の名前を持つ複数の更新実行を作成できます。

更新戦略は、次のいずれかの方法を使って作成できます。

更新実行を作成するときに更新戦略を保存する

  • Azure portal での更新実行の作成時に、更新戦略を保存します。

    更新戦略として保存されている更新実行ステージを示す Azure portal のスクリーンショット。

更新実行を管理する

以降のセクションでは、Azure portal と Azure CLI を使って更新実行を管理する方法について説明します。

  • フリート リソースの [複数のクラスターの更新] ページで、[未開始] または [失敗] の状態の更新実行を [開始] できます。

    [未開始] 状態の更新実行を開始する方法を示す Azure portal のスクリーンショット。

  • フリート リソースの [マルチクラスター更新] ページで、現在実行中または保留中の更新プログラムの実行を停止できます。

    [実行中] 状態の更新実行を停止する方法を示す Azure portal のスクリーンショット。

  • [未開始][失敗][実行中] 状態の更新実行では、任意の [ステージ] を選び、そのアップグレードを [スキップ] することができます。

    更新実行の特定のステージのアップグレードをスキップする方法を示す Azure portal のスクリーンショット。

    同様に、更新グループまたはメンバー クラスター レベルでアップグレードをスキップすることもできます。

  • コマンドを使って、[未開始] または [失敗] 状態の更新実行を az fleet updaterun start できます。

    az fleet updaterun start \
     --resource-group $GROUP \
     --fleet-name $FLEET \
     --name <run-name>
    
  • コマンドを使って、現在実行中の更新実行をaz fleet updaterun stopできます。

    az fleet updaterun stop \
     --resource-group $GROUP \
     --fleet-name $FLEET \
     --name <run-name>
    
  • --targets コマンドを使い、az fleet updaterun skip フラグで更新ステージまたはグループは指定することにより、それらをスキップできます。

    az fleet updaterun skip \
     --resource-group $GROUP \
     --fleet-name $FLEET \
     --name <run-name> \
     --targets Group:my-group-name Stage:my-stage-name
    

    詳細については、更新実行状態と実行/ステージ/グループのスキップ ビヘイビアーの概念の概要をご確認ください。

自動アップグレード プロファイルを使用して更新実行を自動化する

新しい Kubernetes またはノード イメージのバージョンが使用可能になったときに、複数のメンバー クラスターで更新実行を自動的に実行するには、自動アップグレード プロファイルを使います。

自動アップグレード プロファイル構成の詳細については、Azure Kubernetes Fleet Manager を使用した Kubernetes とノード イメージのアップグレードの自動化をご確認ください。

自動アップグレードプロファイルから更新実行を生成する

自動アップグレード プロファイルを作成する場合、クラスターはさまざまなバージョンの Kubernetes またはノード イメージ上に配置できます。 選択した自動アップグレード チャネルによっては、更新プログラムの実行を作成して実行するために、新しいバージョンのリリースによって自動アップグレードがトリガーされるまでにしばらく時間がかかる場合があります。

自動アップグレードを使用すると、 az fleet autoupgradeprofile generate-update-run コマンドを使用して、いつでも新しい更新プログラムの実行を生成できます。 結果の更新プログラムの実行は、現在 AKS で公開されている Kubernetes またはノード イメージのバージョンに基づいています。

az fleet autoupgradeprofile generate-update-run \
    --resource-group $GROUP \
    --fleet-name $FLEET \
    --name $AUTOUPGRADEPROFILE

生成された更新プログラムの実行は自動的に開始されず、レビューすることができます。 生成された更新プログラムの実行に問題がない場合は、更新プログラムの実行を管理する手順に従って、 更新プログラムの実行を開始および管理できます。

自動アップグレード プロファイルから更新プログラムの実行を手動で生成すると、結果の更新プログラムの実行が既に存在する可能性があります。 この状況は、更新実行の名前が自動アップグレード プロファイルのアップグレード仕様に基づいているために発生します。これは、ノード イメージや Kubernetes のバージョンなどのプロパティが変更された場合にのみ変更されます。 このシナリオでは、既存の更新プログラムの実行は変更されません。

次のステップ