準備済みイメージ仕様 (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-previewCLI 拡張機能バージョン 21.0.0b5 以降。 お持ちでない場合は、「aks-previewCLI 拡張機能のインストール」を参照してください。 - サブスクリプションに登録されている
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 フィーチャーフラグを登録する
AKSPreparedImageSpecificationPreviewコマンドを使用してサブスクリプションにaz feature register機能フラグを登録します。az feature register \ --namespace Microsoft.ContainerService \ --name AKSPreparedImageSpecificationPreviewaz feature showコマンドを使用して登録の状態を確認します。az feature show \ --namespace Microsoft.ContainerService \ --name AKSPreparedImageSpecificationPreview機能フラグが登録されたら、
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 を使用してクラスターを作成する
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)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 を使用してノード プールを作成する
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)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_IDaz 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]"
準備済みイメージ仕様バージョンのアップグレード
基本イメージ、依存関係、またはカスタマイズが変更されたら、新しいバージョンを作成し、それを参照するようにノード プールを更新します。 推奨されるワークフロー:
コンテナー イメージまたはスクリプトを更新して新しいバージョンを作成します。
非運用ノード プールの新しいバージョンを検証します。
新しいバージョンを参照するように運用ノード プールを更新します。
# 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コストの最適化のために未使用のイメージをクリーンアップします。
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 での準備済みイメージの仕様 (プレビュー) を参照してください。