このクイック スタートでは、Azure CLIを使用して、ノード オペレーティング システム (OS) として Container Linux (ACL) Azure実行するAzure Kubernetes Service (AKS) クラスターを作成します。 クラスターをデプロイした後、 kubectl を使用してクラスターに接続し、ACL ノードが想定どおりに実行されていることを確認します。
考慮事項と制限事項
開始する前に、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
Note
Azure Cloud ShellまたはAzure CLIのローカル インストールを使用して、このクイック スタートのコマンドを実行できます。
- Azure CLIをローカルで実行している場合は、 Azure CLIをインストールします。 Windows または macOS で実行している場合は、Docker コンテナーで Azure CLI を実行することを検討してください。 詳細については、「Docker コンテナーで Azure CLI を実行する方法」を参照してください。
- ローカル インストールを使用している場合は、
az loginコマンドを使用してAzure CLIにサインインします。 認証プロセスを完了するには、ターミナルに表示される手順に従います。 その他のサインイン オプションについては、Azure CLI でのサインインに関するページを参照してください。 - 初回使用時にインストールを求められたら、Azure CLI 拡張機能をインストールします。 拡張機能の詳細については、Azure CLI で拡張機能を使用する方法に関するページを参照してください。
-
az versionコマンドを使用して、インストールされているAzure CLIバージョンと依存ライブラリを検索します。 Azure Container Linux には、バージョン 2.86.0 以降Azure CLI必要です。 最新バージョンにアップグレードするには、az upgradeコマンドを使用します。 - 必要に応じて、Azure サブスクリプションで Microsoft.ContainerService リソース プロバイダーを登録します。
Microsoft.ContainerService リソース プロバイダーを登録する
Azure サブスクリプションにリソース プロバイダーを登録することが必要な場合があります。
az provider show コマンドを使用して登録の状態を確認します。
az provider show --namespace Microsoft.ContainerService --query registrationState
必要に応じて、 az provider register コマンドを使用してリソース プロバイダーを登録します。
az provider register --namespace Microsoft.ContainerService
リソース グループを作成します
Azure リソース グループは、Azure リソースが展開され管理される論理グループです。 リソース グループを作成する際は、場所を指定する必要があります。 この場所は次のとおりです。
- リソース グループ メタデータのストレージの場所。
- リソースの作成時に別のリージョンを指定しない場合に、Azure でリソースが実行される場所です。
az group create コマンドを使用して、リソース グループを作成します。 次の例では、リソース グループ名、リージョン、および AKS クラスター名の環境変数を設定し、指定した場所にリソース グループを作成します。 環境変数の値は、独自の優先する名前とリージョンに置き換えることができます。
export MY_RESOURCE_GROUP_NAME="myACLResourceGroup"
export REGION="westus"
export MY_AKS_CLUSTER_NAME="myACLCluster"
az group create --name $MY_RESOURCE_GROUP_NAME --location $REGION
出力例:
{
"id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myACLResourceGroup",
"location": "westus",
"managedBy": null,
"name": "myACLResourceGroup",
"properties": {
"provisioningState": "Succeeded"
},
"tags": null,
"type": "Microsoft.Resources/resourceGroups"
}
ACL クラスターを作成する
az aks create パラメーターを指定して --os-sku AzureContainerLinux コマンドを使用して AKS クラスターを作成し、ACL イメージを使用して AKS クラスターをプロビジョニングします。
az aks create \
--resource-group $MY_RESOURCE_GROUP_NAME \
--name $MY_AKS_CLUSTER_NAME \
--os-sku AzureContainerLinux \
--node-count 3 \
--generate-ssh-keys
数分後、コマンドが完了し、クラスターに関する情報が JSON 形式で返されます。
クラスターに接続する
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 $MY_RESOURCE_GROUP_NAME --name $MY_AKS_CLUSTER_NAMEkubectl getコマンドを使用して、ご利用のクラスターへの接続を確認します。 このコマンドでは、クラスター ノードの一覧が返されます。kubectl get nodes
アプリケーションをデプロイする
アプリケーションをデプロイするには、マニフェスト ファイルを使用して、AKS ストア アプリケーションの実行に必要なすべてのオブジェクトを作成します。 Kubernetes のマニフェスト ファイルでは、どのコンテナー イメージを実行するかなど、クラスターの望ましい状態を定義します。 マニフェストには、次の Kubernetes のデプロイとサービスが含まれています。
- ストア フロント: 顧客が製品を表示して注文するための Web アプリケーション。
- 製品サービス: 製品情報を表示します。
- 注文サービス: 注文を行います。
- Rabbit MQ: 注文キュー用のメッセージキュー。
Note
運用用の永続的なストレージを使用せずに、Rabbit MQ などのステートフル コンテナーを実行することはお勧めしません。 ここではわかりやすくするために使用しますが、Azure Cosmos DB や Azure Service Bus などのマネージド サービスを使用することをお勧めします。
aks-store-quickstart.yamlという名前のファイルを作成し、そこに次のマニフェストをコピーします。apiVersion: apps/v1 kind: StatefulSet metadata: name: rabbitmq spec: serviceName: rabbitmq 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 --- 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: LoadBalancerkubectl applyコマンドを使用してアプリケーションをデプロイし、ご利用の YAML マニフェストの名前を指定します。kubectl apply -f aks-store-quickstart.yaml
アプリケーションをテストする
パブリック IP アドレスまたはアプリケーション URL にアクセスすることで、アプリケーションが実行されていることを確認できます。
以下のコマンドを使用してアプリケーション URL を取得します。
runtime="5 minutes"
endtime=$(date -ud "$runtime" +%s)
while [[ $(date -u +%s) -le $endtime ]]
do
STATUS=$(kubectl get pods -l app=store-front -o 'jsonpath={..status.conditions[?(@.type=="Ready")].status}')
echo "Status: $STATUS"
if [ "$STATUS" == 'True' ]
then
export IP_ADDRESS=$(kubectl get service store-front --output 'jsonpath={..status.loadBalancer.ingress[0].ip}')
echo "Service IP Address: $IP_ADDRESS"
break
else
sleep 10
fi
done
echo "http://$IP_ADDRESS"
クラスターを削除する
チュートリアルを進める予定がない場合は、不要なリソースをクリーンアップして、Azure料金を回避します。
az group delete コマンドを使用して、リソース グループ、コンテナー サービス、すべての関連リソースを削除します。
az group delete --name $MY_RESOURCE_GROUP_NAME --yes --no-wait
関連するコンテンツ
AKS 向け ACL の詳細については、Azure Kubernetes Service (AKS) 向け Azure Container Linux (ACL) とは?を参照してください。