クイック スタート: 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 キーの組が既に存在する場合は上書きされます。
https://shell.azure.com にアクセスし、お使いのブラウザーで Cloud Shell を開きます。
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"
)。
テンプレートのデプロイ
次のボタンを選択し、Azure にサインインして、テンプレートを開きます。
次の値を選択または入力します。
このクイック スタートでは、 [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 Linux コンテナー ホスト クラスターが作成されるのに数分かかります。 クラスターが正常にデプロイされるのを待ってから、次の手順に進みます。
デプロイの検証
クラスターに接続する
Kubernetes クラスターを管理するには、Kubernetes のコマンドライン クライアントである kubectl を使います。
az aks install-cli
コマンドを使用して、kubectl
をローカルにインストールします。az aks install-cli
az aks get-credentials
コマンドを使用して、Kubernetes クラスターに接続するようにkubectl
を構成します。 このコマンドは、資格情報をダウンロードし、それを使用するように Kubernetes CLI を構成します。az aks get-credentials --resource-group testAzureLinuxResourceGroup --name testAzureLinuxCluster
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 アプリケーションにアクセスするための外部サービス。
azure-vote.yaml
という名前でファイルを作成します。- Azure Cloud Shell を使用する場合は、仮想システムまたは物理システムで作業するときと同じように、
code
、vi
、nano
のいずれかを使用してこのファイルを作成できます。
- Azure Cloud Shell を使用する場合は、仮想システムまたは物理システムで作業するときと同じように、
次の 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 マニフェスト」を参照してください。
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 の料金が発生しないように、不要なリソースをクリーンアップしてください。 az group delete
コマンドを使用して、リソース グループと関連するリソースをすべて削除します。
az group delete --name testAzureLinuxCluster --yes --no-wait
次のステップ
このクイックスタートでは、Azure Linux コンテナー ホスト クラスターをデプロイしました。 Azure Linux コンテナー ホストの詳細を確認し、クラスターのデプロイと管理の詳細な例を確認するには、Azure Linux コンテナー ホストのチュートリアルに進んでください。