クイック スタート: ARM テンプレートを使用して AKS クラスター用の Azure Container Linux (ACL) をデプロイする

Azure Resource Manager (ARM) テンプレート を使用して AKS クラスターをデプロイすることで、AKS 用の Azure Container Linux (ACL) の使用を開始>します。

このクイック スタートでは、次の方法について説明します。

  • AKS の ACL を使用して AKS クラスターを作成します。
  • ARM テンプレートを使用してクラスターをデプロイします。
  • マイクロサービスのグループと、小売シナリオをシミュレートする Web フロントエンドを使用して、サンプルのマルチコンテナー アプリケーションを実行します。

Note

AKS クラスターの迅速なプロビジョニングを開始するため、この記事には、評価のみを目的とした既定の設定でクラスターをデプロイする手順が含まれています。 運用環境に対応したクラスターをデプロイする前に、ベースライン参照アーキテクチャを理解して、ビジネス要件にどの程度合致しているかを検討することをお勧めします。

Important

AKS で Azure Container Linux (ACL) を使用している場合は、次の考慮事項と制限事項を確認してください。

Prerequisites

  • この記事では、Kubernetes の基本的な概念を理解していることを前提としています。 詳細については、Azure Kubernetes Service (AKS) の Kubernetes のコア概念を参照してください。
  • Azure アカウントをお持ちでない場合は、開始する前に 無料アカウント を作成してください。
  • クラスターの作成に使用する ID に、適切な最小限のアクセス許可が付与されていることを確認してください。 AKS のアクセスと ID の詳細については、「Azure Kubernetes Service (AKS) でのアクセスと ID オプション」を参照してください。
  • ARM テンプレートをデプロイするには、デプロイするリソースに対する書き込みアクセス権と、Microsoft.Resources/deployments リソースの種類に対するすべての操作にアクセスする必要があります。 たとえば、仮想マシンをデプロイするには、Microsoft.Compute/virtualMachines/writeMicrosoft.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 キーの作成と管理に関するページを参照してください。

  1. https://shell.azure.com に移動して、ブラウザーでCloud Shellを開きます。

  2. az group create コマンドを使用して、リソース グループを作成します。 次の例では、 myResourceGroup という名前のリソース グループを 米国東部 リージョンに作成します。

    az group create \
      --name myResourceGroup \
      --location eastus
    
  3. az sshkey create コマンドまたは ssh-keygen コマンドを使用して SSH キー ペアを作成します。

    az sshkey create --name mySSHKey --resource-group myResourceGroup
    

    または、 ssh-keygenを使用して SSH キー ペアを作成します。

    ssh-keygen -t rsa -b 4096
    
  4. テンプレートをデプロイするには、SSH ペアから公開キーを指定する必要があります。 az sshkey show コマンドを使用して公開キーを取得します。

    az sshkey show --name mySSHKey --resource-group myResourceGroup --query publicKey
    

テンプレートを確認する

次のデプロイでは、Azureクイック スタート テンプレートを使用します。

{
  "$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 クイック スタートのテンプレートに関するサイトを参照してください。

テンプレートをデプロイする

  1. [Azure にデプロイ]を選択してサインインし、テンプレートを開きます。

    Resource Manager テンプレートを Azure に配置するボタン。

  2. [カスタム デプロイ] ページでテンプレート パラメーターを構成します。 このクイック スタートでは、 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 の内容) をコピーして貼り付けます。
  3. [確認および作成]>[作成] の順に選択します。

AKS クラスターの作成には数分かかります。 クラスターが正常にデプロイされるのを待ってから、次の手順に進みます。

クラスターに接続する

Kubernetes クラスターを管理するには、Kubernetes のコマンドライン クライアントである kubectl を使います。 Azure Cloud Shell を使用している場合、kubectl は既にインストールされています。

kubectlをローカルにインストールして実行するには、az aks install-cli コマンドを使用します。

  1. kubectl コマンドを使用して、Kubernetes クラスターに接続するように az aks get-credentials を構成します。 このコマンドは、資格情報をダウンロードし、それを使用するように Kubernetes CLI を構成します。

    az aks get-credentials \
      --resource-group myResourceGroup \
      --name myAKSCluster
    
  2. kubectl 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 のデプロイとサービスが含まれています。

 Azure Store サンプル アーキテクチャのスクリーンショット.

  • ストア フロント: 顧客が製品を表示して注文するための Web アプリケーション。
  • 製品サービス: 製品情報を表示します。
  • 注文サービス: 注文を行います。
  • Rabbit MQ: 注文キュー用のメッセージキュー。

Note

運用用の永続的なストレージを使用せずに、Rabbit MQ などのステートフル コンテナーを実行することはお勧めしません。 ここではわかりやすくするために使用しますが、Azure Cosmos DB や Azure Service Bus などのマネージド サービスを使用することをお勧めします。

  1. 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: LoadBalancer
    

    YAML マニフェスト ファイルの内訳については、「デプロイと YAML マニフェスト」を参照してください。

    YAML ファイルをローカルに作成して保存する場合は、[ファイルのアップロード/ダウンロード] ボタンを選択し、ローカル ファイル システムからファイルを選択することで、CloudShell の既定のディレクトリにマニフェスト ファイルをアップロードできます。

  2. 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
    

アプリケーションをテストする

  1. kubectl get pods コマンドを使用して、デプロイされたポッドの状態を確認します。 続行する前に、すべてのポッドを Running の状態にします。

    kubectl get pods
    
  2. ストア フロント アプリケーションのパブリック 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   4h4m
    
  3. EXTERNAL-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
    
  4. サービスの外部 IP アドレスに対して Web ブラウザーを開き、Azure Store アプリの動作を確認します。

    AKS ストア サンプル アプリケーションのスクリーンショット。

クラスターを削除する

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) を参照してください。