Azure での VM とスケール セットの拡張機能の自動アップグレード

拡張機能の自動アップグレードは、Azure VM と Azure Virtual Machine Scale Sets で利用できます。 VM またはスケール セットで拡張機能の自動アップグレードが有効になっていると、拡張機能の発行元がその拡張機能の新しいバージョンをリリースするたびに、拡張機能が自動的にアップグレードされます。

拡張機能の自動アップグレードには、次の機能があります。

  • Azure VM と Azure Virtual Machine Scale Sets でサポートされています。
  • アップグレードは、可用性優先のデプロイ モデルで適用されます。
  • 仮想マシン スケール セットの場合、20% を超えるスケール セット仮想マシンが 1 回のバッチでアップグレードされることはありません。 最小バッチ サイズは 1 仮想マシンです。
  • すべての VM サイズ、および Windows と Linux の両方の拡張機能で動作します。
  • いつでも自動アップグレードをオプトアウトできます。
  • 拡張機能の自動アップグレードは、任意のサイズの Virtual Machine Scale Sets で有効にすることができます。
  • サポートされている各拡張機能は個別に登録され、どの拡張機能を自動的にアップグレードするかを選択できます。
  • すべてのパブリック クラウド リージョンでサポートされています。

拡張機能の自動アップグレードのしくみ

拡張機能のアップグレード プロセスにより、VM 上の既存の拡張機能のバージョンが、拡張機能の発行元によって発行された、同じ拡張機能の新しいバージョンに置き換えられます。 新しい拡張機能がインストールされた後、VM の正常性が監視されます。 アップグレードが完了してから 5 分以内に VM が正常な状態にならない場合、拡張機能のバージョンは前のバージョンにロールバックされます。

拡張機能の更新が失敗した場合は、自動的に再試行されます。 再試行は、ユーザーの介入なしに、数日に 1 回試行されます。

可用性優先の更新

プラットフォームの調整された更新の可用性優先モデルにより、Azure の可用性構成が複数の可用性レベルで尊重されます。

更新中の仮想マシンのグループについては、Azure プラットフォームで更新がオーケストレーションされます。

複数のリージョン間:

  • Azure 全体でデプロイが失敗するのを防ぐために、更新は Azure 全体を段階的に移動します。
  • 1 つの "フェーズ" には 1 つ以上のリージョンを含めることができます。前のフェーズで対象の VM が正常に更新された場合にのみ、更新はフェーズ間を移動します。
  • geo ペア リージョンは、同時に更新されないことに加え、同じリージョンのフェーズに置くことができません。
  • 更新の成功は、更新後に VM の正常性を追跡することによって測定できます。 VM の正常性は、VM のプラットフォーム正常性インジケーターによって追跡されます。 Virtual Machine Scale Sets の場合、VM の正常性は、アプリケーション正常性プローブまたはアプリケーション正常性拡張機能によって追跡されます (スケール セットに適用される場合)。

リージョン内:

  • 異なる Availability Zones にある VM が、同じ更新で同時に更新されることはありません。
  • 可用性セットに含まれていない単一の VM は、サブスクリプション内のすべての VM の同時更新を回避するために、ベスト エフォートでバッチ処理されます。

"セット" 内:

  • 共通の可用性セット内またはスケール セット内のすべての VM が同時に更新されることはありません。
  • 共通の可用性セット内の VM は更新ドメインの境界内で更新され、複数の更新ドメインにまたがる VM は同時に更新されません。
  • 共通の仮想マシン スケール セット内の VM は、バッチにグループ化され、更新ドメインの境界内で更新されます。

Virtual Machine Scale Sets のアップグレード プロセス

  1. アップグレード プロセスが始まる前に、オーケストレーターによって、異常 (何らかの理由による) な VM がスケール セット全体の 20% を超えていないことが確認されます。

  2. アップグレード オーケストレーターによってアップグレードする VM インスタンス バッチが識別されます。 アップグレード バッチには、仮想マシンの最小バッチ サイズに基づき、VM 合計数の最大 20% が入ります。

  3. アプリケーション正常性プローブまたはアプリケーション正常性拡張機能が構成されているスケール セットの場合、アップグレードは VM が正常になるまで 5 分間 (または定義されている正常性プローブ構成だけ) 待機した後、次のバッチがアップグレードされます。 アップグレード後に VM の正常性が回復しない場合は、既定で、VM の前のバージョンの拡張機能が再インストールされます。

  4. また、アップグレード オーケストレーターにより、アップグレード後に異常が発生した VM の割合も追跡されます。 アップグレード処理中に異常なアップグレード済みインスタンスの割合が 20% を超えた場合は、アップグレードが停止します。

上記のプロセスは、スケール セット内のすべてのインスタンスがアップグレードされるまで続行されます。

スケール セットのアップグレード オーケストレーターにより、各バッチをアップグレードする前に、スケール セット全体の正常性が確認されます。 バッチのアップグレード中に、他の計画メンテナンスまたは計画外メンテナンスのアクティビティが同時に発生することがあり、それによってスケール セット仮想マシンの正常性が影響を受ける場合があります。 そのような場合、スケール セットのインスタンスの 20% より多くが異常な状態になると、スケール セットのアップグレードは現在のバッチが終了した時点で停止します。

サポートされる拡張機能

拡張機能の自動アップグレードでは、次の拡張機能がサポートされています (さらに多くの拡張機能が定期的に追加されます)。

拡張機能の自動アップグレードの有効化

拡張機能の自動アップグレードを拡張機能に対して有効にするには、プロパティ enableAutomaticUpgradetrue に設定され、各拡張機能の定義に個別に追加されていることを確認する必要があります。

Virtual Machines の REST API

Azure VM で拡張機能 (この例では Dependency Agent 拡張機能) に対して拡張機能の自動アップグレードを有効にするには、次の呼び出しを使用します。

PUT on `/subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/providers/Microsoft.Compute/virtualMachines/<vmName>/extensions/<extensionName>?api-version=2019-12-01`
{    
    "name": "extensionName",
    "type": "Microsoft.Compute/virtualMachines/extensions",
    "location": "<location>",
    "properties": {
        "autoUpgradeMinorVersion": true,
        "enableAutomaticUpgrade": true, 
        "publisher": "Microsoft.Azure.Monitoring.DependencyAgent",
        "type": "DependencyAgentWindows",
        "typeHandlerVersion": "9.5"
        }
}

Virtual Machine Scale Sets の REST API

スケール セット モデルに拡張機能を追加するには、次の呼び出しを使用します。

PUT on `/subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/providers/Microsoft.Compute/virtualMachineScaleSets/<vmssName>?api-version=2019-12-01`
{
   "location": "<location>",
   "properties": {
   	    "virtualMachineProfile": {
            "extensionProfile": {
       	        "extensions": [
            	{
                "name": "<extensionName>",
            	  "properties": {
             		    "autoUpgradeMinorVersion": true,
             		    "enableAutomaticUpgrade": true,
              	    "publisher": "Microsoft.Azure.Monitoring.DependencyAgent",
              	    "type": "DependencyAgentWindows",
              	    "typeHandlerVersion": "9.5"
            		}
          	    }
        	    ]
    	    }
    	}
    }
}

Virtual Machines の Azure PowerShell

Set-AzVMExtension コマンドレットを使用します。

Set-AzVMExtension -ExtensionName "Microsoft.Azure.Monitoring.DependencyAgent" `
    -ResourceGroupName "myResourceGroup" `
    -VMName "myVM" `
    -Publisher "Microsoft.Azure.Monitoring.DependencyAgent" `
    -ExtensionType "DependencyAgentWindows" `
    -TypeHandlerVersion 9.5 `
    -Location WestUS `
    -EnableAutomaticUpgrade $true

Virtual Machine Scale Sets の Azure PowerShell

拡張機能をスケール セット モデルに追加するには、Add-AzVmssExtension コマンドレットを使用します。

Add-AzVmssExtension -VirtualMachineScaleSet $vmss
    -Name "Microsoft.Azure.Monitoring.DependencyAgent" `
    -Publisher "Microsoft.Azure.Monitoring.DependencyAgent" `
    -Type "DependencyAgentWindows" `
    -TypeHandlerVersion 9.5 `
    -EnableAutomaticUpgrade $true

拡張機能を追加した後、Update-AzVmss を使用してスケール セットを更新します。

Virtual Machines 向け Azure CLI

az vm extension set コマンドレットを使用します。

az vm extension set \
    --resource-group myResourceGroup \
    --vm-name myVM \
    --name DependencyAgentLinux \
    --publisher Microsoft.Azure.Monitoring.DependencyAgent \
    --version 9.5 \
    --enable-auto-upgrade true

Virtual Machine Scale Sets の Azure CLI

拡張機能をスケール セット モデルに追加するには、az vmss extension set コマンドレットを使用します。

az vmss extension set \
    --resource-group myResourceGroup \
    --vmss-name myVMSS \
    --name DependencyAgentLinux \
    --publisher Microsoft.Azure.Monitoring.DependencyAgent \
    --version 9.5 \
    --enable-auto-upgrade true

仮想マシン用の ARM テンプレート

次の例では、Azure Resource Manager を使用して、仮想マシン上の拡張機能 (この例では Dependency Agent 拡張機能) の自動アップグレードを設定する方法について説明しています

{
    "type": "Microsoft.Compute/virtualMachines/extensions",
    "location": "[resourceGroup().location]",
    "name": "<extensionName>",
    "dependsOn": [
        "[concat('Microsoft.Compute/virtualMachines/', variables('vmName'))]"
    ],
    "properties": {
        "publisher": "Microsoft.Azure.Monitoring.DependencyAgent",
        "type": "DependencyAgentWindows",
        "typeHandlerVersion": "9.5",
        "autoUpgradeMinorVersion": true,
        "enableAutomaticUpgrade": true,
        "settings": {
            "enableAMA": "true"
        }
    }
}

仮想マシン スケール セットの ARM テンプレート

次の例を使用して、スケール セット モデル内の拡張機能に拡張機能の自動アップグレードを設定します。

{
   "type": "Microsoft.Compute/virtualMachineScaleSets",
   "apiVersion": "2023-09-01",
   "name": "[variables('vmScaleSetName')]",
   "location": "[resourceGroup().location]",
   "properties": {
   	    "virtualMachineProfile": {
            "extensionProfile": {
       	        "extensions": [{
                     "name": "<extensionName>",
                     "properties": {
                          "publisher": "Microsoft.Azure.Monitoring.DependencyAgent",
                          "type": "DependencyAgentWindows",
                          "typeHandlerVersion": "9.5",
                          "autoUpgradeMinorVersion": true,
                          "enableAutomaticUpgrade": true,
                     }
                }]
    	    }
    	}
    }
}

複数の拡張機能での拡張機能のアップグレード

VM または Virtual Machine Scale Set に複数の拡張機能を追加し、その拡張機能の自動アップグレードを有効にできます。 同じ VM またはスケール セットに他の拡張機能を追加し、その拡張機能自動アップグレードを有効にしないこともできます。

1 つの仮想マシンで複数の拡張機能アップグレードが利用できる場合、アップグレードをバッチにまとめることができる場合がありますが、仮想マシン上では、各拡張機能アップグレードが個別に適用されます。 1 つの拡張機能でエラーが発生しても、アップグレードされている可能性がある他の拡張機能には影響がありません。 たとえば、2 つの拡張機能のアップグレードがスケジュールされていて、最初の拡張機能のアップグレードが失敗した場合でも、2 つ目の拡張機能はアップグレードされます。

VM または仮想マシン スケール セットに拡張機能のシーケンス処理を使用して複数の拡張機能が構成されている場合は、拡張機能の自動アップグレードも適用できます。 拡張機能のシーケンス処理は VM の初回デプロイに適用されます。将来、ある拡張機能に拡張機能アップグレードがあるとすれば、それは個別に適用されます。

次のステップ