チュートリアル: ノードを Azure Linux に移行する

このチュートリアルでは、全5回中第3回として、既存のノードを Azure Linux に移行します。 次のいずれかの方法を使って、既存のノードを Azure Linux に移行できます。

  • 既存のノード プールを削除して、新しい Azure Linux ノード プールを追加します。
  • インプレース オペレーティング システム (OS) SKU の移行を実行します。

このチュートリアルで使用するコマンドでは、Tutorial 1: Create a cluster with the Azure Linux Container Host for AKS で設定した環境変数を使用します。

Azure Linux に移行する既存のノードがない場合は、次のチュートリアルに進んでください。 この後のチュートリアルでは、クラスターでテレメトリと監視を有効にして、Azure Linux ノードをアップグレードする方法について説明します。

Prerequisites

Note

新しい Azure Linux ノード プールを追加するときは、少なくとも 1 つを --mode System として追加する必要があります。 そうしないと、AKS では既存のノード プールを削除できません。

  • 最新バージョンの Azure CLI が必要です。 バージョンを確認するには、az --version を実行します。 インストールまたはアップグレードが必要な場合は、Azure CLI のインストールを参照してください。

環境変数の設定

デプロイごとに一意のリソース名を作成するには、次の環境変数を設定します。 プレースホルダーの <your-node-pool-name> を、選択した名前に置き換えます。 必要に応じて、ランダム サフィックスを追加して一意性を確保できます。 ノード プールの名前は、小文字で始める必要があり、英数字のみを含めることができます。 Linux のノード プールの長さは、1 から 12 文字の範囲内である必要があります。

# Set random suffix for uniqueness
export RANDOM_SUFFIX=$(openssl rand -hex 3)

# Set node pool name
export NODE_POOL_NAME="<your-node-pool-name>$RANDOM_SUFFIX"

Azure Linux ノード プールを追加して、既存のノード プールを削除する

  1. az aks nodepool add コマンドを使って、新しい Azure Linux ノード プールを追加します。 このコマンドは、--mode System フラグを指定してクラスターに新しいノード プールを追加します。これにより、それはシステム ノード プールになります。 Azure Linux クラスターにはシステム ノード プールが必要です。

    az aks nodepool add --resource-group $RESOURCE_GROUP --cluster-name $CLUSTER_NAME --name $NODE_POOL_NAME --mode System --os-sku AzureLinux
    

    出力例:

    {
      "id": "/subscriptions/xxxxx/resourceGroups/myResourceGroupxxx/providers/Microsoft.ContainerService/managedClusters/myAKSCluster/nodePools/systempool",
      "name": "systempool",
      "provisioningState": "Succeeded"
    }
    
  2. az aks nodepool delete コマンドを使って、既存のノードを削除します。

OS SKU のインプレース移行

既存の Ubuntu ノード プールを Azure Linux に移行するには、ノード プールの OS SKU を変更します。これにより、クラスターは標準ノード イメージのアップグレード プロセスを通じてロールされます。 この新機能では、新しいノード プールを作成する必要はありません。

インプレース OS SKU の移行の制限事項

OS SKU 移行要求をブロックする可能性がある設定がいくつかあります。 移行を成功させるには、次のガイドラインと制限事項を確認してください。

  • OS SKU 移行機能は、PowerShell または Azure portal では使用できません。
  • OS SKU 移行機能では、既存のノード プールの名前を変更できません。
  • サポートされている Linux OS SKU 移行ターゲットは、Ubuntu、Azure Linux、Azure Linux と OS Guard のみです。
  • Azure Linux と OS Guard では、信頼できる起動が既定で必要です。 OS Guard を使用して Azure Linux に移行できるようにするには、トラステッド起動を有効にする必要があります。 既存のノード プールでトラステッド起動を有効にできないため、信頼された起動を有効にして新しいノード プールを作成し、そのノード プールにワークロードを移行する必要があります。
  • Gen 1 のみの仮想マシン (VM) サイズを使用しているお客様は、サポートされている Gen 1 イメージがないため、OS Guard を使用して Azure Linux に移行できません。 この場合は、Gen 2 をサポートする VM サイズの新しいノード プールを作成する必要があります。
  • UseGPUDedicatedVHD が有効になっている Ubuntu OS SKU では、OS SKU の移行を実行できません。
  • CVM 20.04 が有効になっている Ubuntu OS SKU では、OS SKU の移行を実行できません。
  • Kata が有効になっているノード プールでは、OS SKU の移行を実行できません。
  • Windows OS SKU の移行はサポートされていません。

インプレース OS SKU の移行の前提条件

  • 少なくとも 1 つの Ubuntu ノード プールを含む既存の AKS クラスター。
  • OS SKU 移行機能を使う前に、開発と運用環境に Azure Linux クラスターをデプロイし、サービスが正常なままであることを検証して、ワークロードの構成と実行が Azure Linux コンテナー ホストで正常に行われるのを確認することをお勧めします。
  • 運用クラスターでプロセスを使う前に、移行機能が動作することをテストと開発環境で確認します。
  • アップグレード中に AKS が VM 間でポッドを移動できるように、ポッドに十分な ポッド中断予算 (PDB) があることを確認します。
  • Azure CLI バージョン 2.61.0 以降が必要です。 バージョンを確認するには、az --version を実行します。 インストールまたはアップグレードが必要な場合は、Azure CLI のインストールを参照してください。
  • Terraform を使用している場合は、 v3.111.0 以上の AzureRM Terraform モジュールが必要です。

Ubuntu ノード プールの OS SKU を移行する

az aks nodepool update コマンドを使って、ノード プールの OS SKU を Azure Linux に移行します。 このコマンドは、ノード プールの OS SKU を Ubuntu から Azure Linux に更新します。 OS SKU の変更によって即時アップグレード操作がトリガーされ、完了までに数分かかります。

az aks nodepool update --resource-group $RESOURCE_GROUP --cluster-name $CLUSTER_NAME --name $NODE_POOL_NAME --os-sku AzureLinux

出力例:

{
  "id": "/subscriptions/xxxxx/resourceGroups/myResourceGroupxxx/providers/Microsoft.ContainerService/managedClusters/myAKSCluster/nodePools/nodepool1",
  "name": "nodepool1",
  "osSku": "AzureLinux",
  "provisioningState": "Succeeded"
}

Note

OS SKU の移行中に問題が発生した場合は、以前の OS SKU にロールバックできます。

OS SKU の移行を検証する

テスト クラスターで移行が完了したら、次のことを検証して、移行の成功を確認する必要があります。

  • 移行ターゲットが Azure Linux の場合は、kubectl get nodes -o wide コマンドを実行します。 出力で、OS イメージとして Microsoft Azure Linux 3.0 が表示され、カーネル バージョンの末尾に .azl3 が表示される必要があります。
  • kubectl get pods -o wide -A コマンドを実行して、すべてのポッドとデーモンセットが新しいノード プールで稼働していることを検証します。
  • kubectl get nodes --show-labels コマンドを実行して、アップグレードされたノード プール内のすべてのノード ラベルが想定した内容であることを検証します。

Tip

運用クラスターを移行する前に、サービスの正常性を数週間監視することをお勧めします。

運用クラスターで OS SKU の移行を実行する

  1. 既存のテンプレートを更新して、OSSKU=AzureLinux を設定します。 apiVersion2023-07-01 以降に設定されていることを確認します。

    • ARM テンプレート: "OSSKU": "AzureLinux" セクションでagentPoolProfileを使用します。
    • Bicep: osSku: "AzureLinux" セクションで agentPoolProfile を使用します。
    • Terraform: os_sku = "AzureLinux" セクションでdefault_node_poolを使用します。
  2. クラスターの ARM、Bicep、または Terraform テンプレートを再デプロイして、OSSKU の新しい設定を適用します。 このデプロイの間、クラスターはノード イメージのアップグレードを行っているかのように動作します。 クラスターの容量が増加した後、既存のノードが 1 つずつ、新しい OS SKU の最新の AKS イメージで再起動されます。

以前の OS SKU にロールバックする

OS SKU の移行中に問題が発生した場合は、以前の OS SKU にロールバックできます。 これを行うには、テンプレートの OS SKU フィールドを変更して、デプロイを再送信する必要があります。これにより、別のアップグレード操作がトリガーされて、ノード プールが以前の OS SKU に復元されます。

az aks nodepool update コマンドを使用して、以前の OS SKU にロールバックできます。 このコマンドは、ノード プールの OS SKU を Azure Linux から Ubuntu に更新します。

次のステップ

このチュートリアルでは、既存のノード プールを削除し、新しい Azure Linux ノード プールを追加するか、インプレース OS SKU の移行を実行して、既存のノードを Azure Linux に移行しました。

次のチュートリアルでは、テレメトリを有効にしてクラスターを監視する方法について説明します。