Azure Resource Manager (ARM) テンプレート を使用して AKS クラスターをデプロイすることで、AKS 用の Azure Container Linux (ACL) の使用を開始>します。
このクイック スタートでは、次の方法について説明します。
- AKS の ACL を使用して AKS クラスターを作成します。
- ARM テンプレートを使用してクラスターをデプロイします。
- マイクロサービスのグループと、小売シナリオをシミュレートする Web フロントエンドを使用して、サンプルのマルチコンテナー アプリケーションを実行します。
Note
AKS クラスターの迅速なプロビジョニングを開始するため、この記事には、評価のみを目的とした既定の設定でクラスターをデプロイする手順が含まれています。 運用環境に対応したクラスターをデプロイする前に、ベースライン参照アーキテクチャを理解して、ビジネス要件にどの程度合致しているかを検討することをお勧めします。
Important
AKS で Azure Container Linux (ACL) を使用している場合は、次の考慮事項と制限事項を確認してください。
- ACL は、AKS v1.34 以降で一般提供されています。
- ACL には、セキュア ブートと vTPM を使用 したトラステッド起動 が必要です。 信頼されていない起動バリアントは使用できません。
- Arm64 の ACL では、Trusted Launch の互換性を有効にするために Cobalt ベース (v6) SKU が必要です。
-
NodeImageおよびNoneは、サポートされている唯一の オペレーティング システム (OS) アップグレード チャネルです。UnmanagedおよびSecurityPatchは、変更できない/usrディレクトリのため、ACL と互換性がありません。 - アーティファクト ストリーミング はサポートされていません。
- ポッドサンドボックス はサポートされていません。
- Confidential Virtual Machines (CVM) は サポートされていません。
- 第 1 世代 VM はサポートされていません。
Prerequisites
- この記事では、Kubernetes の基本的な概念を理解していることを前提としています。 詳細については、Azure Kubernetes Service (AKS) の
Kubernetes のコア概念を参照してください。 - Azure アカウントをお持ちでない場合は、開始する前に 無料アカウント を作成してください。
- クラスターの作成に使用する ID に、適切な最小限のアクセス許可が付与されていることを確認してください。 AKS のアクセスと ID の詳細については、「Azure Kubernetes Service (AKS) でのアクセスと ID オプション」を参照してください。
- ARM テンプレートをデプロイするには、デプロイするリソースに対する書き込みアクセス権と、
Microsoft.Resources/deploymentsリソースの種類に対するすべての操作にアクセスする必要があります。 たとえば、仮想マシンをデプロイするには、Microsoft.Compute/virtualMachines/writeとMicrosoft.Resources/deployments/*アクセス許可が必要です。 ロールとアクセス許可の一覧については、Azure の組み込みロールに関するページを参照してください。
テンプレートからクラスターをデプロイした後、Azure CLI または Azure PowerShell を使用してクラスターに接続し、サンプル アプリケーションをデプロイできます。
必要なリソース プロバイダーを登録する
Azure サブスクリプションに必要なリソース プロバイダー (Microsoft.ContainerService など) を登録することが必要になる場合があります。
登録の状態を確認する
az provider show コマンドを使用して登録の状態を確認します。
az provider show --namespace Microsoft.ContainerService --query registrationState
リソース プロバイダーを登録する
必要に応じて、Microsoft.ContainerService コマンドを使用して、az provider register リソース プロバイダーを登録します。
az provider register --namespace Microsoft.ContainerService
SSH キー ペアを作成する
ARM テンプレートを使用して AKS クラスターを作成するには、SSH 公開キーを指定します。 このリソースが必要な場合は、このセクションの手順に従ってください。 それ以外の場合は、「テンプレートの確認」セクションに進みます。
AKS ノードにアクセスするには、ssh-keygen コマンドを使用して生成する SSH キーの組 (公開および秘密) を使用して接続します。 既定では、これらのファイルは ~/.ssh ディレクトリに作成されます。
ssh-keygen コマンドを実行すると、指定した場所に同じ名前の SSH キーの組が既に存在する場合は上書きされます。 SSH キーの作成の詳細については、Azure での認証用の SSH キーの作成と管理に関するページを参照してください。
https://shell.azure.com に移動して、ブラウザーでCloud Shellを開きます。
az group createコマンドを使用して、リソース グループを作成します。 次の例では、 myResourceGroup という名前のリソース グループを 米国東部 リージョンに作成します。az group create \ --name myResourceGroup \ --location eastusaz sshkey createコマンドまたはssh-keygenコマンドを使用して SSH キー ペアを作成します。az sshkey create --name mySSHKey --resource-group myResourceGroupまたは、
ssh-keygenを使用して SSH キー ペアを作成します。ssh-keygen -t rsa -b 4096テンプレートをデプロイするには、SSH ペアから公開キーを指定する必要があります。
az sshkey showコマンドを使用して公開キーを取得します。az sshkey show --name mySSHKey --resource-group myResourceGroup --query publicKey
テンプレートを確認する
次のデプロイでは、
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"metadata": {
"_generator": {
"name": "bicep",
"version": "0.26.170.59819",
"templateHash": "14823542069333410776"
}
},
"parameters": {
"clusterName": {
"type": "string",
"defaultValue": "aks101cluster",
"metadata": {
"description": "The name of the Managed Cluster resource."
}
},
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]",
"metadata": {
"description": "The location of the Managed Cluster resource."
}
},
"dnsPrefix": {
"type": "string",
"metadata": {
"description": "Optional DNS prefix to use with hosted Kubernetes API server FQDN."
}
},
"osDiskSizeGB": {
"type": "int",
"defaultValue": 0,
"minValue": 0,
"maxValue": 1023,
"metadata": {
"description": "Disk size (in GB) to provision for each of the agent pool nodes. This value ranges from 0 to 1023. Specifying 0 will apply the default disk size for that agentVMSize."
}
},
"agentCount": {
"type": "int",
"defaultValue": 3,
"minValue": 1,
"maxValue": 50,
"metadata": {
"description": "The number of nodes for the cluster."
}
},
"agentVMSize": {
"type": "string",
"defaultValue": "standard_d2s_v3",
"metadata": {
"description": "The size of the Virtual Machine."
}
},
"linuxAdminUsername": {
"type": "string",
"metadata": {
"description": "User name for the Linux Virtual Machines."
}
},
"sshRSAPublicKey": {
"type": "string",
"metadata": {
"description": "Configure all linux machines with the SSH RSA public key string. Your key should include three parts, for example 'ssh-rsa AAAAB...snip...UcyupgH azureuser@linuxvm'"
}
}
},
"resources": [
{
"type": "Microsoft.ContainerService/managedClusters",
"apiVersion": "2026-03-01",
"name": "[parameters('clusterName')]",
"location": "[parameters('location')]",
"identity": {
"type": "SystemAssigned"
},
"properties": {
"dnsPrefix": "[parameters('dnsPrefix')]",
"agentPoolProfiles": [
{
"name": "agentpool",
"osDiskSizeGB": "[parameters('osDiskSizeGB')]",
"count": "[parameters('agentCount')]",
"vmSize": "[parameters('agentVMSize')]",
"osType": "Linux",
"osSKU": "AzureContainerLinux",
"mode": "System"
}
],
"linuxProfile": {
"adminUsername": "[parameters('linuxAdminUsername')]",
"ssh": {
"publicKeys": [
{
"keyData": "[parameters('sshRSAPublicKey')]"
}
]
}
}
}
}
],
"outputs": {
"controlPlaneFQDN": {
"type": "string",
"value": "[reference(resourceId('Microsoft.ContainerService/managedClusters', parameters('clusterName')), '2026-03-01').fqdn]"
}
}
}
ARM テンプレートで定義されているリソースの種類は Microsoft.ContainerService/managedClusters です。
他の AKS サンプルについては、AKS クイック スタートのテンプレートに関するサイトを参照してください。
テンプレートをデプロイする
[Azure にデプロイ]を選択してサインインし、テンプレートを開きます。
[カスタム デプロイ] ページでテンプレート パラメーターを構成します。 このクイック スタートでは、 OS ディスク サイズ GB、 エージェント数、 エージェント VM サイズ、 OS の種類の既定値のままにします。 次のパラメーターに独自の値を指定します。
- サブスクリプション:Azure サブスクリプションを選択します。
- [リソース グループ] : [新規作成] を選択します。 myResourceGroupなど、リソース グループの一意の名前を入力し、[OK]を選択します。
-
OS SKU: AzureContainerLinux を指定します。 OS SKU を更新しない場合、既定値は
Ubuntu。 - [場所] :場所 (米国東部など) を選択します。
- [クラスター名] : AKS クラスターの一意の名前 (myAKSCluster など) を入力します。
- [DNS プレフィックス] : クラスターの一意の DNS プレフィックス (myakscluster など) を入力します。
- [Linux Admin Username](Linux 管理者ユーザー名) : SSH を使用して接続するためのユーザー名 (azureuser など) を入力します。
- SSH 公開キー ソース: [既存の公開キー 使用] を選択します。
- キー ペア名: SSH キー ペアの パブリック パーツ (既定では、~/.ssh/id_rsa.pub の内容) をコピーして貼り付けます。
[確認および作成]>[作成] の順に選択します。
AKS クラスターの作成には数分かかります。 クラスターが正常にデプロイされるのを待ってから、次の手順に進みます。
クラスターに接続する
Kubernetes クラスターを管理するには、Kubernetes のコマンドライン クライアントである kubectl を使います。 Azure Cloud Shell を使用している場合、kubectl は既にインストールされています。
kubectlをローカルにインストールして実行するには、az aks install-cli コマンドを使用します。
kubectlコマンドを使用して、Kubernetes クラスターに接続するようにaz aks get-credentialsを構成します。 このコマンドは、資格情報をダウンロードし、それを使用するように Kubernetes CLI を構成します。az aks get-credentials \ --resource-group myResourceGroup \ --name myAKSClusterkubectl getコマンドを使用して、ご利用のクラスターへの接続を確認します。 このコマンドでは、クラスター ノードの一覧が返されます。kubectl get nodes次の出力例は、前の手順で作成された 3 つのノードを示しています。 ノードの状態が "準備完了" であることを確認します。
NAME STATUS ROLES AGE VERSION aks-agentpool-12345678-vmss000000 Ready <none> 5m53s v1.32.7 aks-agentpool-12345678-vmss000001 Ready <none> 6m31s v1.32.7 aks-agentpool-12345678-vmss000002 Ready <none> 6m35s v1.32.7
アプリケーションをデプロイする
アプリケーションをデプロイするには、マニフェスト ファイルを使用して、AKS ストア アプリケーションの実行に必要なすべてのオブジェクトを作成します。 Kubernetes のマニフェスト ファイルでは、どのコンテナー イメージを実行するかなど、クラスターの望ましい状態を定義します。 マニフェストには、次の Kubernetes のデプロイとサービスが含まれています。
- ストア フロント: 顧客が製品を表示して注文するための Web アプリケーション。
- 製品サービス: 製品情報を表示します。
- 注文サービス: 注文を行います。
- Rabbit MQ: 注文キュー用のメッセージキュー。
Note
運用用の永続的なストレージを使用せずに、Rabbit MQ などのステートフル コンテナーを実行することはお勧めしません。 ここではわかりやすくするために使用しますが、Azure Cosmos DB や Azure Service Bus などのマネージド サービスを使用することをお勧めします。
aks-store-quickstart.yamlという名前のファイルを作成し、そこに次のマニフェストをコピーします。apiVersion: apps/v1 kind: Deployment metadata: name: rabbitmq spec: replicas: 1 selector: matchLabels: app: rabbitmq template: metadata: labels: app: rabbitmq spec: nodeSelector: "kubernetes.io/os": linux containers: - name: rabbitmq image: mcr.microsoft.com/mirror/docker/library/rabbitmq:3.10-management-alpine ports: - containerPort: 5672 name: rabbitmq-amqp - containerPort: 15672 name: rabbitmq-http env: - name: RABBITMQ_DEFAULT_USER value: "username" - name: RABBITMQ_DEFAULT_PASS value: "password" resources: requests: cpu: 10m memory: 128Mi limits: cpu: 250m memory: 256Mi volumeMounts: - name: rabbitmq-enabled-plugins mountPath: /etc/rabbitmq/enabled_plugins subPath: enabled_plugins volumes: - name: rabbitmq-enabled-plugins configMap: name: rabbitmq-enabled-plugins items: - key: rabbitmq_enabled_plugins path: enabled_plugins --- apiVersion: v1 data: rabbitmq_enabled_plugins: | [rabbitmq_management,rabbitmq_prometheus,rabbitmq_amqp1_0]. kind: ConfigMap metadata: name: rabbitmq-enabled-plugins --- apiVersion: v1 kind: Service metadata: name: rabbitmq spec: selector: app: rabbitmq ports: - name: rabbitmq-amqp port: 5672 targetPort: 5672 - name: rabbitmq-http port: 15672 targetPort: 15672 type: ClusterIP --- apiVersion: apps/v1 kind: Deployment metadata: name: order-service spec: replicas: 1 selector: matchLabels: app: order-service template: metadata: labels: app: order-service spec: nodeSelector: "kubernetes.io/os": linux containers: - name: order-service image: ghcr.io/azure-samples/aks-store-demo/order-service:latest ports: - containerPort: 3000 env: - name: ORDER_QUEUE_HOSTNAME value: "rabbitmq" - name: ORDER_QUEUE_PORT value: "5672" - name: ORDER_QUEUE_USERNAME value: "username" - name: ORDER_QUEUE_PASSWORD value: "password" - name: ORDER_QUEUE_NAME value: "orders" - name: FASTIFY_ADDRESS value: "0.0.0.0" resources: requests: cpu: 1m memory: 50Mi limits: cpu: 75m memory: 128Mi initContainers: - name: wait-for-rabbitmq image: busybox command: ['sh', '-c', 'until nc -zv rabbitmq 5672; do echo waiting for rabbitmq; sleep 2; done;'] resources: requests: cpu: 1m memory: 50Mi limits: cpu: 75m memory: 128Mi --- apiVersion: v1 kind: Service metadata: name: order-service spec: type: ClusterIP ports: - name: http port: 3000 targetPort: 3000 selector: app: order-service --- apiVersion: apps/v1 kind: Deployment metadata: name: product-service spec: replicas: 1 selector: matchLabels: app: product-service template: metadata: labels: app: product-service spec: nodeSelector: "kubernetes.io/os": linux containers: - name: product-service image: ghcr.io/azure-samples/aks-store-demo/product-service:latest ports: - containerPort: 3002 resources: requests: cpu: 1m memory: 1Mi limits: cpu: 1m memory: 7Mi --- apiVersion: v1 kind: Service metadata: name: product-service spec: type: ClusterIP ports: - name: http port: 3002 targetPort: 3002 selector: app: product-service --- apiVersion: apps/v1 kind: Deployment metadata: name: store-front spec: replicas: 1 selector: matchLabels: app: store-front template: metadata: labels: app: store-front spec: nodeSelector: "kubernetes.io/os": linux containers: - name: store-front image: ghcr.io/azure-samples/aks-store-demo/store-front:latest ports: - containerPort: 8080 name: store-front env: - name: VUE_APP_ORDER_SERVICE_URL value: "http://order-service:3000/" - name: VUE_APP_PRODUCT_SERVICE_URL value: "http://product-service:3002/" resources: requests: cpu: 1m memory: 200Mi limits: cpu: 1000m memory: 512Mi --- apiVersion: v1 kind: Service metadata: name: store-front spec: ports: - port: 80 targetPort: 8080 selector: app: store-front type: LoadBalancerYAML マニフェスト ファイルの内訳については、「デプロイと YAML マニフェスト」を参照してください。
YAML ファイルをローカルに作成して保存する場合は、[ファイルのアップロード/ダウンロード] ボタンを選択し、ローカル ファイル システムからファイルを選択することで、CloudShell の既定のディレクトリにマニフェスト ファイルをアップロードできます。
kubectl applyコマンドを使用してアプリケーションをデプロイし、ご利用の YAML マニフェストの名前を指定します。kubectl apply -f aks-store-quickstart.yaml次の出力例は、デプロイとサービスを示しています。
deployment.apps/rabbitmq created service/rabbitmq created deployment.apps/order-service created service/order-service created deployment.apps/product-service created service/product-service created deployment.apps/store-front created service/store-front created
アプリケーションをテストする
kubectl get podsコマンドを使用して、デプロイされたポッドの状態を確認します。 続行する前に、すべてのポッドをRunningの状態にします。kubectl get podsストア フロント アプリケーションのパブリック IP アドレスを確認します。
kubectl get serviceコマンドと--watch引数を使用して、進行状況を監視します。kubectl get service store-front --watchサービスの
store-frontの出力は、最初は pending と表示されます。NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE store-front LoadBalancer 10.0.100.10 <pending> 80:30025/TCP 4h4mEXTERNAL-IP アドレスが保留中から実際のパブリック IP アドレスに変わったら、
CTRL-Cを使用してkubectlウォッチ プロセスを停止します。次の出力例は、サービスに割り当てられている有効なパブリック IP アドレスを示しています。
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE store-front LoadBalancer 10.0.100.10 20.62.159.19 80:30025/TCP 4h5mサービスの外部 IP アドレスに対して Web ブラウザーを開き、Azure Store アプリの動作を確認します。
クラスターを削除する
AKS チュートリアルを実行する予定がない場合は、Azure の料金を回避するために不要なリソースをクリーンアップします。
az group delete コマンドを使用して、リソース グループ、コンテナー サービス、すべての関連リソースを削除します。
az group delete --name myResourceGroup --yes --no-wait
Note
AKS クラスターは、本クイックスタートの既定の ID オプションであるシステム割り当てマネージド ID を使用して作成されています。 この ID はプラットフォームによって管理されるため、手動で削除する必要はありません。
関連するコンテンツ
このクイック スタートでは、ARM テンプレートを使用して AKS 用 ACL を持つ AKS クラスターをデプロイしました。 AKS 向け ACL の詳細については、Azure Kubernetes Service (AKS) 向け Azure Container Linux (ACL) を参照してください。