次の方法で共有


クイック スタート: ARM テンプレートを使用して AKS クラスター用の Azure Linux コンテナー ホストをデプロイする

Azure Resource Manager (ARM) テンプレートを使用して Azure Linux コンテナー ホスト クラスターをデプロイすることで、Azure Linux コンテナー ホストの使用を開始します。 前提条件をインストールしたら、SSH キー ペアを作成し、テンプレートを確認し、テンプレートをデプロイして検証してから、アプリケーションをデプロイします。

Azure Resource Manager テンプレートは JavaScript Object Notation (JSON) ファイルであり、プロジェクトのインフラストラクチャと構成が定義されています。 このテンプレートでは、宣言型の構文が使用されています。 デプロイを作成するための一連のプログラミング コマンドを記述しなくても、意図したデプロイを記述できます。

前提条件

  • Azure サブスクリプションをお持ちでない場合は、開始する前に Azure 無料アカウントを作成してください。

  • Azure Cloud Shell で Bash 環境を使用します。 詳細については、Azure Cloud Shell の Bash のクイックスタートに関するページを参照してください。

  • CLI リファレンス コマンドをローカルで実行する場合、Azure CLI をインストールします。 Windows または macOS で実行している場合は、Docker コンテナーで Azure CLI を実行することを検討してください。 詳細については、「Docker コンテナーで Azure CLI を実行する方法」を参照してください。

    • ローカル インストールを使用する場合は、az login コマンドを使用して Azure CLI にサインインします。 認証プロセスを完了するには、ターミナルに表示される手順に従います。 その他のサインイン オプションについては、Azure CLI でのサインインに関するページを参照してください。

    • 初回使用時にインストールを求められたら、Azure CLI 拡張機能をインストールします。 拡張機能の詳細については、Azure CLI で拡張機能を使用する方法に関するページを参照してください。

    • az version を実行し、インストールされているバージョンおよび依存ライブラリを検索します。 最新バージョンにアップグレードするには、az upgrade を実行します。

  • kubectl をまだインストールしていない場合は、Azure CLI の az aks install-cli を使って、またはアップストリームの手順に従って、インストールしてください。

  • Resource Manager テンプレートを使用して AKS クラスターを作成するには、SSH 公開キーを指定します。 このリソースが必要な場合は、後のセクションを参照してください。それ以外の場合は、「テンプレートを確認する」セクションに進んでください。

  • クラスターの作成に使用している ID には、適切な最小限のアクセス許可が与えられています。 AKS のアクセスと ID の情報については、「Azure Kubernetes Service (AKS) でのアクセスと ID オプション」を参照してください。

  • Bicep ファイルまたは ARM テンプレートをデプロイするには、デプロイしているリソースに対する書き込みアクセス権が必要であり、また、Microsoft.Resources/デプロイ リソース タイプにあらゆる操作を実行するアクセス権かの゛必要です。 たとえば、仮想マシンをデプロイするには、Microsoft.Compute/virtualMachines/write と、Microsoft.Resources/deployments/* アクセス許可が必要です。 ロールとアクセス許可の一覧については、Azure の組み込みロールに関するページを参照してください。

SSH キー ペアの作成

AKS ノードにアクセスするには、ssh-keygen コマンドを使用して生成する SSH キーの組 (公開および秘密) を使用して接続します。 既定では、これらのファイルは ~/.ssh ディレクトリに作成されます。 ssh-keygen コマンドを実行すると、指定した場所に同じ名前の SSH キーの組が既に存在する場合は上書きされます。

  1. https://shell.azure.com にアクセスし、お使いのブラウザーで Cloud Shell を開きます。

  2. ssh-keygen コマンドを実行します。 次の例では、RSA 暗号化と 4096 ビット長を使用して SSH キーの組が作成されます。

    ssh-keygen -t rsa -b 4096
    

SSH キーの作成の詳細については、Azure での認証用の SSH キーの作成と管理に関するページを参照してください。

テンプレートを確認する

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

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.1",
  "parameters": {
    "clusterName": {
      "type": "string",
      "defaultValue": "azurelinuxakscluster",
      "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_DS2_v2",
      "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'"
      }
    },
    "osType": {
      "type": "string",
      "defaultValue": "Linux",
      "allowedValues": [
        "Linux"
      ],
      "metadata": {
        "description": "The type of operating system."
      }
    },
    "osSKU": {
      "type": "string",
      "defaultValue": "AzureLinux",
      "allowedValues": [
        "AzureLinux",
        "Ubuntu"
      ],
      "metadata": {
        "description": "The Linux SKU to use."
      }
    }
  },
  "resources": [
    {
      "type": "Microsoft.ContainerService/managedClusters",
      "apiVersion": "2021-03-01",
      "name": "[parameters('clusterName')]",
      "location": "[parameters('location')]",
      "properties": {
        "dnsPrefix": "[parameters('dnsPrefix')]",
        "agentPoolProfiles": [
          {
            "name": "agentpool",
            "mode": "System",
            "osDiskSizeGB": "[parameters('osDiskSizeGB')]",
            "count": "[parameters('agentCount')]",
            "vmSize": "[parameters('agentVMSize')]",
            "osType": "[parameters('osType')]",
            "osSKU": "[parameters('osSKU')]",
            "storageProfile": "ManagedDisks"
          }
        ],
        "linuxProfile": {
          "adminUsername": "[parameters('linuxAdminUsername')]",
          "ssh": {
            "publicKeys": [
              {
                "keyData": "[parameters('sshRSAPublicKey')]"
              }
            ]
          }
        }
      },
      "identity": {
          "type": "SystemAssigned"
      }
    }
  ],
  "outputs": {
    "controlPlaneFQDN": {
      "type": "string",
      "value": "[reference(parameters('clusterName')).fqdn]"
    }
  }
}

既存の ARM テンプレートに Azure Linux を追加するには、"osSKU": "AzureLinux""mode": "System"agentPoolProfiles に追加し、apiVersion を 2021-03-01 以降に設定する必要があります ("apiVersion": "2021-03-01")。

テンプレートのデプロイ

  1. 次のボタンを選択し、Azure にサインインして、テンプレートを開きます。

    Resource Manager テンプレートを Azure にデプロイするボタン。

  2. 次の値を選択または入力します。

    このクイック スタートでは、 [OS ディスク サイズ GB][エージェント数][エージェント VM のサイズ][OS の種類] 、および [Kubernetes バージョン] を既定値のままにしておいてください。 以下のテンプレート パラメーターに、独自の値を指定します。

    • サブスクリプション:Azure サブスクリプションを選択します。
    • [リソース グループ] : [新規作成] を選択します。 リソース グループの一意の名前 (testAzureLinuxResourceGroup など) を入力し、[OK] を選択します。
    • [場所] :場所 (米国東部など) を選択します。
    • クラスター名: AKS クラスターの一意の名前 (testAzureLinuxCluster など) を入力します。
    • DNS プレフィックス: クラスターの一意の DNS プレフィックス (myAzureLinuxCluster など) を入力します。
    • Linux 管理者ユーザー名: SSH を使用して接続するためのユーザー名 (azureUser など) を入力します。
    • [SSH RSA Public Key](SSH RSA 公開キー) : SSH キー ペアの "公開" 部分 (既定では、 ~/.ssh/id_rsa.pub の内容) をコピーして貼り付けます。

    ポータルで Azure Kubernetes Service クラスターを作成するための Resource Manager テンプレートのスクリーンショット。

  3. [確認および作成] を選択します。

Azure Linux コンテナー ホスト クラスターが作成されるのに数分かかります。 クラスターが正常にデプロイされるのを待ってから、次の手順に進みます。

デプロイの検証

クラスターに接続する

Kubernetes クラスターを管理するには、Kubernetes のコマンドライン クライアントである kubectl を使います。

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

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

    az aks get-credentials --resource-group testAzureLinuxResourceGroup --name testAzureLinuxCluster
    
  3. kubectl get コマンドを使用して、ご利用のクラスターへの接続を確認します。 このコマンドでは、クラスター ノードの一覧が返されます。

    kubectl get nodes
    

    次の出力例は、前の手順で作成した 3 つのノードを示しています。 ノードの状態が "準備完了" であることを確認します。

    NAME                       STATUS   ROLES   AGE     VERSION
    aks-agentpool-41324942-0   Ready    agent   6m44s   v1.12.6
    aks-agentpool-41324942-1   Ready    agent   6m46s   v1.12.6
    aks-agentpool-41324942-2   Ready    agent   6m45s   v1.12.6
    

アプリケーションの配置

Kubernetes のマニフェスト ファイルでは、どのコンテナー イメージを実行するかなど、クラスターの望ましい状態を定義します。

このクイックスタートでは、マニフェストを使用して、Azure Vote アプリケーションを実行するために必要なすべてのオブジェクトを作成します。 このマニフェストには、次の 2 つの Kubernetes デプロイが含まれています。

  • サンプルの Azure Vote Python アプリケーション。
  • Redis インスタンス。

次の 2 つの Kubernetes サービスも作成されます。

  • Redis インスタンス用の内部サービス。
  • インターネットから Azure Vote アプリケーションにアクセスするための外部サービス。
  1. azure-vote.yaml という名前でファイルを作成します。

    • Azure Cloud Shell を使用する場合は、仮想システムまたは物理システムで作業するときと同じように、codevinano のいずれかを使用してこのファイルを作成できます。
  2. 次の YAML 定義をコピーします。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: azure-vote-back
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: azure-vote-back
      template:
        metadata:
          labels:
            app: azure-vote-back
        spec:
          nodeSelector:
            "kubernetes.io/os": linux
          containers:
          - name: azure-vote-back
            image: mcr.microsoft.com/oss/bitnami/redis:6.0.8
            env:
            - name: ALLOW_EMPTY_PASSWORD
              value: "yes"
            resources:
              requests:
                cpu: 100m
                memory: 128Mi
              limits:
                cpu: 250m
                memory: 256Mi
            ports:
            - containerPort: 6379
              name: redis
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: azure-vote-back
    spec:
      ports:
      - port: 6379
      selector:
        app: azure-vote-back
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: azure-vote-front
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: azure-vote-front
      template:
        metadata:
          labels:
            app: azure-vote-front
        spec:
          nodeSelector:
            "kubernetes.io/os": linux
          containers:
          - name: azure-vote-front
            image: mcr.microsoft.com/azuredocs/azure-vote-front:v1
            resources:
              requests:
                cpu: 100m
                memory: 128Mi
              limits:
                cpu: 250m
                memory: 256Mi
            ports:
            - containerPort: 80
            env:
            - name: REDIS
              value: "azure-vote-back"
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: azure-vote-front
    spec:
      type: LoadBalancer
      ports:
      - port: 80
      selector:
        app: azure-vote-front
    

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

  3. kubectl apply コマンドを使用してアプリケーションをデプロイし、ご利用の YAML マニフェストの名前を指定します。

    kubectl apply -f azure-vote.yaml
    

    デプロイとサービスが正常に作成されたことを示す出力の例は、次のようになります。

    deployment "azure-vote-back" created
    service "azure-vote-back" created
    deployment "azure-vote-front" created
    service "azure-vote-front" created
    

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

アプリケーションが実行されると、Kubernetes サービスによってアプリケーション フロント エンドがインターネットに公開されます。 このプロセスが完了するまでに数分かかることがあります。

kubectl get service コマンドと --watch 引数を使用して、進行状況を監視します。

kubectl get service azure-vote-front --watch

azure-vote-front サービスの [EXTERNAL-IP] の出力は、最初は pending と表示されます。

NAME               TYPE           CLUSTER-IP   EXTERNAL-IP   PORT(S)        AGE
azure-vote-front   LoadBalancer   10.0.37.27   <pending>     80:30572/TCP   6s

EXTERNAL-IP アドレスが保留中から実際のパブリック IP アドレスに変わったら、CTRL-C を使用して kubectl ウォッチ プロセスを停止します。 次の出力例は、サービスに割り当てられている有効なパブリック IP アドレスを示しています。

azure-vote-front   LoadBalancer   10.0.37.27   52.179.23.131   80:30572/TCP   2m

Azure Vote アプリが動作していることを確認するには、Web ブラウザーを開いてサービスの外部 IP アドレスにアクセスします。

Azure Vote サンプル アプリケーションにブラウザーでアクセスしたスクリーンショット。

クラスターを削除する

以降のチュートリアルを続行しない場合は、Azure の料金が発生しないように、不要なリソースをクリーンアップしてください。 az group delete コマンドを使用して、リソース グループと関連するリソースをすべて削除します。

az group delete --name testAzureLinuxCluster --yes --no-wait

次のステップ

このクイックスタートでは、Azure Linux コンテナー ホスト クラスターをデプロイしました。 Azure Linux コンテナー ホストの詳細を確認し、クラスターのデプロイと管理の詳細な例を確認するには、Azure Linux コンテナー ホストのチュートリアルに進んでください。