Azure Kubernetes Service (AKS) (プレビュー) で準備済みイメージ仕様 (PIS) を作成および管理する

準備済みイメージ仕様 (PIS) を使用すると、必要なコンテナー イメージとカスタマイズを含む事前構成済みノード イメージを定義できます。 AKS は、準備されたイメージを 1 回ビルドし、ノードのプロビジョニング中に再利用することで、後続のスケール操作の起動時間を短縮します。 準備済みイメージ仕様のしくみと使用するタイミングの詳細については、「 AKS での準備済みイメージ仕様 (プレビュー)」を参照してください。

この記事では、AKS で PIS を作成および管理する方法について説明します。

Important

AKS のプレビュー機能は、セルフサービスのオプトイン単位で利用できます。 プレビューは、"現状有姿のまま" および "利用可能な限度" で提供され、サービス レベル アグリーメントおよび限定保証から除外されるものとします。 AKS プレビューは、ベストエフォート ベースでカスタマー サポートによって部分的にカバーされます。 そのため、これらの機能は運用環境での使用を目的としていません。 詳細については、次のサポート記事を参照してください。

前提条件

  • サポートされている Kubernetes バージョンを実行している既存の AKS クラスター。 まだお持ちでない場合は、「AKS クラスターの作成」を参照してください。
  • Azure CLI バージョン 2.85.0 以降。 バージョンを確認するには az --version を実行します。 インストールまたはアップグレードが必要な場合は、Azure CLI のインストールを参照してください。
  • リソース グループ内の AKS リソースを作成および管理するには、適切なAzure RBAC アクセス許可が必要です。
  • コンテナー イメージには、AKS クラスターからアクセスできる必要があります。 Azure Container Registry (ACR) を使用する場合は、AKS クラスターと統合されていることを確認します。
  • aks-preview CLI 拡張機能バージョン 21.0.0b5 以降。 お持ちでない場合は、「aks-preview CLI 拡張機能のインストール」を参照してください。
  • サブスクリプションに登録されている AKSPreparedImageSpecificationPreview 機能フラグ。 登録していない場合は、「AKSPreparedImageSpecificationPreview機能フラグを登録する」を参照してください。

制限事項

プレビュー期間中は、次の制限事項が適用されます。

  • ソブリン クラウドとエアギャップ環境を除くパブリック Azure リージョンで利用できます。
  • サポートされているオペレーティング システムには、Ubuntu、Azure Linux、Windowsが含まれます。
  • カスタム スクリプトは、イメージのビルドまたはスケールアップの失敗を引き起こす可能性があります。
  • 既存の仕様を変更するときに再作成が必要になる場合があります。

aks-preview CLI 拡張機能をインストールする

aks-preview コマンドを使用してまだインストールしていない場合は、az extension add CLI 拡張機能をインストールします。

az extension add --name aks-preview

拡張機能が既にインストールされている場合は、 az extension update コマンドを使用して最新バージョンに更新します。

az extension update --name aks-preview

AKSPreparedImageSpecificationPreview フィーチャーフラグを登録する

  1. AKSPreparedImageSpecificationPreview コマンドを使用してサブスクリプションに az feature register 機能フラグを登録します。

    az feature register \
      --namespace Microsoft.ContainerService \
      --name AKSPreparedImageSpecificationPreview
    
  2. az feature show コマンドを使用して登録の状態を確認します。

    az feature show \
      --namespace Microsoft.ContainerService \
      --name AKSPreparedImageSpecificationPreview
    
  3. 機能フラグが登録されたら、az provider register コマンドを使用して、Microsoft.ContainerService リソース プロバイダーの登録を更新します。

    az provider register --namespace Microsoft.ContainerService
    

準備されたイメージ仕様 (PIS) を作成する

基本的な準備済みイメージ仕様を作成する

az aks prepared-image-specification create コマンドを使用して PIS を作成します。

# Set environment variables
RESOURCE_GROUP=<your-resource-group>
CLUSTER_NAME=<your-aks-cluster-name>
PIS_NAME=<your-pis-name>
LOCATION=<location>
PIS_VERSION=v1

# Create a basic Prepared Image Specification
az aks prepared-image-specification create \
    --resource-group $RESOURCE_GROUP \
    --name $PIS_NAME \
    --version $PIS_VERSION \
    --location $LOCATION

キャッシュされたイメージを使用して準備済みイメージ仕様を作成する

az aks prepared-image-specification create コマンドを使用してコンテナー イメージを事前キャッシュする PIS を作成します。

# Set environment variables
RESOURCE_GROUP=<your-resource-group>
CLUSTER_NAME=<your-aks-cluster-name>
PIS_NAME=<your-pis-name>
LOCATION=<location>
PIS_VERSION=v1

# Create a Prepared Image Specification with cached images
az aks prepared-image-specification create \
    --resource-group $RESOURCE_GROUP \
    --name $PIS_NAME \
    --version $PIS_VERSION \
    --container-images \
        myacr.azurecr.io/model-server:v1 \
        myacr.azurecr.io/inference:v1

カスタム スクリプトを使用して準備済みイメージ仕様を作成する

az aks prepared-image-specification create コマンドを使用して、イメージのビルド中にカスタマイズ スクリプトを実行する PIS を作成します。

# Set environment variables
RESOURCE_GROUP=<your-resource-group>
CLUSTER_NAME=<your-aks-cluster-name>
PIS_NAME=<your-pis-name>
LOCATION=<location>
PIS_VERSION=v1

# Create a Prepared Image Specification using custom scripts
az aks prepared-image-specification create \
    --resource-group $RESOURCE_GROUP \
    --name $PIS_NAME \
    --version $PIS_VERSION \
    --customization-scripts @scripts.json

準備済みイメージ仕様を使用してクラスターまたはノード プールを作成する

PIS を作成した後は、クラスターまたはノード プールを作成または更新するときにそれを参照できます。 準備されたイメージ バージョンのリソース ID が必要です。

PIS を使用してクラスターを作成する

  1. az aks prepared-image-specification version show コマンドを使用して、PIS バージョンのリソース ID を取得します。

    # Set environment variables
    RESOURCE_GROUP=<your-resource-group>
    PIS_NAME=<your-pis-name>
    PIS_VERSION=v1
    
    # Get the PIS version resource ID
    PIS_VERSION_ID=$(az aks prepared-image-specification version show \
        --resource-group $RESOURCE_GROUP \
        --pis-name $PIS_NAME \
        --name $PIS_VERSION \
        --query id -o tsv)
    
  2. az aks create パラメーターを指定して --prepared-image-specification-id コマンドを使用して、準備されたイメージを参照する新しい AKS クラスターを作成します。

    # Set environment variables
    CLUSTER_NAME=<your-aks-cluster-name>
    
    # Create a new AKS cluster using the prepared image
    az aks create \
        --resource-group $RESOURCE_GROUP \
        --name $CLUSTER_NAME \
        --prepared-image-specification-id $PIS_VERSION_ID \
        --generate-ssh-keys
    

PIS を使用してノード プールを作成する

  1. az aks prepared-image-specification version show コマンドを使用して、PIS バージョンのリソース ID を取得します。

    # Set environment variables
    RESOURCE_GROUP=<your-resource-group>
    PIS_NAME=<your-pis-name>
    PIS_VERSION=v1
    
    # Get the PIS version resource ID
    PIS_VERSION_ID=$(az aks prepared-image-specification version show \
        --resource-group $RESOURCE_GROUP \
        --pis-name $PIS_NAME \
        --name $PIS_VERSION \
        --query id -o tsv)
    
  2. az aks nodepool add コマンドと --prepared-image-specification-id パラメーターを使用して、準備されたイメージを参照する新しいノード プールを作成します。

    # Set environment variables
    CLUSTER_NAME=<your-aks-cluster-name>
    
    # Create a new node pool using the prepared image
    az aks nodepool add \
        --resource-group $RESOURCE_GROUP \
        --cluster-name $CLUSTER_NAME \
        --name userpool \
        --prepared-image-specification-id $PIS_VERSION_ID
    
  3. az aks nodepool show コマンドを使用して、ノード プールで PIS が使用されていることを確認します。

    az aks nodepool show \
        --resource-group $RESOURCE_GROUP \
        --cluster-name $CLUSTER_NAME \
        --name userpool \
        --query "{state:provisioningState, pisId:preparedImageSpecificationId}"
    

準備されたイメージの仕様を管理する

準備されたイメージの仕様を一覧表示する

az aks prepared-image-specification list コマンドを使用して、リソース グループ内のすべての準備済みイメージ仕様を一覧表示します。

# Set environment variables
RESOURCE_GROUP=<your-resource-group>

# List all Prepared Image Specifications in the resource group
az aks prepared-image-specification list --resource-group $RESOURCE_GROUP

特定の準備済みイメージ仕様を表示する

az aks prepared-image-specification show コマンドを使用して、特定の準備済みイメージ仕様の詳細を取得します。

# Set environment variables
RESOURCE_GROUP=<your-resource-group>
PIS_NAME=<your-pis-name>

# Show the details of the Prepared Image Specification
az aks prepared-image-specification show \
    --resource-group $RESOURCE_GROUP \
    --name $PIS_NAME

準備済みイメージ仕様メタデータの更新

リソースの概念には、 PIS リソースPIS バージョンの 2 つがあります。 タグなどの PIS メタデータを更新すると、PIS リソースが更新され、参照されるバージョンのイメージ/スクリプトは変更されません。 コンテナー イメージまたはスクリプトを変更するには、新しい PIS バージョンを作成し、その PIS バージョン ID を参照するようにノード プールを更新する必要があります。

az aks prepared-image-specification update コマンドを使用して、既存の準備済みイメージ仕様のメタデータ (タグなど) を更新できます。 コンテナー イメージまたはスクリプトを変更するには、代わりに新しいバージョンを作成します。

# Set environment variables
RESOURCE_GROUP=<your-resource-group>
PIS_NAME=<your-pis-name>

# Update the Prepared Image Specification metadata
az aks prepared-image-specification update \
    --resource-group $RESOURCE_GROUP \
    --name $PIS_NAME \
    --tags environment=prod

準備済みイメージ仕様のすべてのバージョンを一覧表示する

az aks prepared-image-specification version list コマンドを使用して、準備済みイメージ仕様のすべてのバージョンを一覧表示します。

# Set environment variables
RESOURCE_GROUP=<your-resource-group>
PIS_NAME=<your-pis-name>

# List all versions of the Prepared Image Specification
az aks prepared-image-specification version list \
    --resource-group $RESOURCE_GROUP \
    --pis-name $PIS_NAME

準備済みイメージ仕様の特定のバージョンを表示する

az aks prepared-image-specification version show パラメーターが PIS バージョンに設定されている --name コマンドを使用して、特定のバージョンの詳細を取得します。

# Set environment variables
RESOURCE_GROUP=<your-resource-group>
PIS_NAME=<your-pis-name>
PIS_VERSION=v1

# Show the details of the specific version of the Prepared Image Specification
az aks prepared-image-specification version show \
    --resource-group $RESOURCE_GROUP \
    --pis-name $PIS_NAME \
    --name $PIS_VERSION

特定の準備済みイメージ仕様を使用するノード プールを一覧表示する

準備済みイメージ仕様を参照するクラスター内のすべてのノード プールを検索するには、JMESPath フィルターで az aks nodepool list コマンドを使用します。

# Set environment variables
RESOURCE_GROUP=<your-resource-group>
CLUSTER_NAME=<your-aks-cluster-name>

# List all node pools in the cluster that reference a Prepared Image Specification
az aks nodepool list \
    --resource-group $RESOURCE_GROUP \
    --cluster-name $CLUSTER_NAME \
    --query "[?preparedImageSpecificationId != null]"

準備済みイメージ仕様バージョンのアップグレード

基本イメージ、依存関係、またはカスタマイズが変更されたら、新しいバージョンを作成し、それを参照するようにノード プールを更新します。 推奨されるワークフロー:

  1. コンテナー イメージまたはスクリプトを更新して新しいバージョンを作成します。

  2. 非運用ノード プールの新しいバージョンを検証します。

  3. 新しいバージョンを参照するように運用ノード プールを更新します。

    # Set environment variables
    RESOURCE_GROUP=<your-resource-group>
    CLUSTER_NAME=<your-aks-cluster-name>
    NEW_PIS_VERSION_ID=<new-pis-version-resource-id>
    
    # Update a node pool to reference a new PIS version using the `az aks nodepool update` command
    az aks nodepool update \
        --resource-group $RESOURCE_GROUP \
        --cluster-name $CLUSTER_NAME \
        --name userpool \
        --prepared-image-specification-id $NEW_PIS_VERSION_ID
    
  4. コストの最適化のために未使用のイメージをクリーンアップします。

AKS バージョンのアップグレード

Kubernetes バージョンをアップグレードすると、AKS によって、参照先の PIS バージョン用に準備された VHD が自動的に再構築されます。 Kubernetes バージョンのアップグレード用に新しい PIS バージョンを作成する必要はありません。 コンテナー イメージやスクリプトなどの PIS コンテンツが変更されたときに、新しい PIS バージョンを作成する必要があります。

az aks get-upgrades コマンドを使用して、使用可能なアップグレードを確認します。

# Set environment variables
RESOURCE_GROUP=<your-resource-group>
CLUSTER_NAME=<your-aks-cluster-name>
    
# Check for available upgrades
az aks get-upgrades \
    --resource-group $RESOURCE_GROUP \
    --name $CLUSTER_NAME

az aks upgrade コマンドを使用してクラスターをアップグレードします。

# Set environment variables
RESOURCE_GROUP=<your-resource-group>
CLUSTER_NAME=<your-aks-cluster-name>
KUBERNETES_VERSION=<new-kubernetes-version>
    
# Upgrade the cluster to the new Kubernetes version
az aks upgrade \
    --resource-group $RESOURCE_GROUP \
    --name $CLUSTER_NAME \
    --kubernetes-version $KUBERNETES_VERSION

Important

運用ノード プールをアップグレードする前に、新しい Kubernetes およびノード イメージ バージョンを対象とする新しい準備済みイメージ仕様バージョンを作成して検証します。

az aks nodepool upgrade コマンドを使用して、特定のノード プールをアップグレードします。

# Set environment variables
RESOURCE_GROUP=<your-resource-group>
CLUSTER_NAME=<your-aks-cluster-name>
NODE_POOL_NAME=<your-node-pool-name>

# Upgrade the node pool to the new Kubernetes version
az aks nodepool upgrade \
    --resource-group $RESOURCE_GROUP \
    --cluster-name $CLUSTER_NAME \
    --name $NODE_POOL_NAME

準備済みイメージ仕様をノード プールから削除する

ノード プールでの準備済みイメージ仕様の使用を停止するには、az aks nodepool update パラメーターの空の文字列を使用して、--prepared-image-specification-id コマンドを使用してノード プールを更新します。

# Set environment variables
RESOURCE_GROUP=<your-resource-group>
CLUSTER_NAME=<your-aks-cluster-name>

# Remove the Prepared Image Specification from the node pool
az aks nodepool update \
  --resource-group $RESOURCE_GROUP \
  --cluster-name $CLUSTER_NAME \
  --name userpool \
  --prepared-image-specification-id ""

準備済みイメージの仕様バージョンを削除する

az aks prepared-image-specification version delete コマンドを使用して特定のバージョンを削除します。

Important

ノード プールによって参照されている PIS バージョンは削除しないでください。 代わりに、ノード プールを更新して PIS を削除するか、別の PIS バージョンを参照する必要があります。 参照先のバージョンを削除すると、AKS が準備されたイメージを正常に再構築またはローリングできなくなる可能性があります。

# Set environment variables
RESOURCE_GROUP=<your-resource-group>
PIS_NAME=<your-pis-name>
PIS_VERSION=<your-pis-version>

# Delete the specific version of the Prepared Image Specification
az aks prepared-image-specification version delete \
    --resource-group $RESOURCE_GROUP \
    --pis-name $PIS_NAME \
    --name $PIS_VERSION

準備済みイメージの指定を削除する

az aks prepared-image-specification delete コマンドを使用して、準備済みイメージ仕様リソース全体を削除します。

Important

PIS リソースを削除する前に、ノード プールがそのバージョンを参照していないことを確認してください。 参照が見つかる場合は、PIS リソースを削除する前に、参照を削除または更新してください。 参照先の PIS を削除すると、AKS が準備されたイメージを正常に再構築またはローリングできなくなります。

# Set environment variables
RESOURCE_GROUP=<your-resource-group>
PIS_NAME=<your-pis-name>

# Delete the Prepared Image Specification
az aks prepared-image-specification delete \
    --resource-group $RESOURCE_GROUP \
    --name $PIS_NAME

準備されたイメージ仕様のパフォーマンスを監視する

PIS によって環境内のプロビジョニング待機時間が短縮されているかどうかを評価するには、次のメトリックを監視します。

  • ノードのプロビジョニング期間と準備完了までの時間: 準備されたイメージを使用しないノードと比較します。
  • スケールアウト完了時間: オートスケーラー トリガーから準備完了状態のノードまでの時間。
  • イメージ のビルド期間とビルドの成功率: イメージ準備パイプラインの正常性を追跡します。
  • ポッドの起動時間とコンテナー イメージのプル期間: イメージの事前キャッシュが効果的に使用されていることを確認します。

準備済みイメージ仕様のトラブルシューティング

PIS 関連のエラーにはエラーの理由が含まれている必要があり、多くのエラーはカスタム スクリプトから発生する可能性があります。 PIS の追加後にノード プールの作成またはスケールアップが失敗した場合は、新しいバージョンを作成するか、ノード プール参照を更新する前に、イメージのビルド/カスタム スクリプト ログを調べてスクリプトを検証する必要があります。

イメージの作成が失敗する

イメージのビルド中にカスタマイズ スクリプトが失敗した場合、AKS はビルド VM を削除する代わりに割り当てを解除し、お客様が起動してデバッグできるようにします。 後で PIS が再ベイクすると、AKS は仮想マシン スケール セット/ビルド リソースを削除して再作成します。

PIS が準備済みイメージのビルドに失敗した場合は、次のことを確認します。

  • カスタマイズ スクリプトが無効であるか、形式が正しくありません。
  • コンテナー レジストリ認証エラー - AKS クラスターが指定されたレジストリへのプル アクセス権を持っているかどうかを確認します。
  • リソース グループまたはレジストリAzure RBAC アクセス許可がありません。
  • ターゲット OS でサポートされていないカスタマイズの種類。

ノード プールの作成が失敗する

PIS を参照するノード プールの作成に失敗した場合は、次のことを確認します。

  • PIS バージョン ID が有効であり、バージョンが同じリージョンに存在します。
  • サブスクリプションには、要求された VM SKU に対する十分なクォータがあります。
  • 要求された VM SKU は、準備されたイメージによってサポートされます。
  • リージョンでは、プレビュー中に PIS 機能がサポートされます。

スケール操作が高速化されない

プロビジョニング時間の短縮が表示されない場合は、次のことを確認します。

  • 高速化したいコンテナーイメージは、PISのバージョンに含まれています。
  • ノード プールは、正しいバージョンを参照します。
  • 新しいノードは、ベース AKS ノード イメージではなく、準備されたイメージから起動します。
  • ボトルネックはコンテナー イメージのプル時間であり、ワークロードの起動やその他の初期化ではありません。

リソースをクリーンアップする

テスト目的でこの記事のリソースを作成した場合は、継続的な料金が発生しないように、完了したらリソースを削除します。 これには、PIS バージョン、PIS リソース、テスト ノード プール、およびテスト AKS クラスターが含まれます。

リソース グループとその中のすべてのリソースを削除するには、 az group delete コマンドを使用します。

# Set environment variables
RESOURCE_GROUP=<your-resource-group>

# Delete the resource group and all resources in it
az group delete \
    --name $RESOURCE_GROUP \
    --yes \
    --no-wait

準備済みイメージの仕様の詳細については、 AKS での準備済みイメージの仕様 (プレビュー) を参照してください。