Azure CLI を使用して AKS クラスター用の Azure Linux コンテナー ホストをデプロイすることで、Azure Linux コンテナー ホストの使用を開始します。
このクイック スタートでは、次の方法について説明します。
- Kubernetes CLI、
kubectlをインストールします。 - Azure リソース グループを作成します。
- Azure Linux コンテナー ホスト クラスターを作成してデプロイする。
- Azure Linux コンテナー ホスト クラスターに接続するように
kubectlを構成する。 - サンプルのマルチコンテナー アプリケーションをクラスターにデプロイします。
Prerequisites
-
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を実行します。
- ローカル インストールを使用している場合は、
環境変数の設定
デプロイごとに一意のリソース名を作成するには、次の環境変数を設定します。
export RESOURCE_GROUP="<your-resource-group-name>"
export REGION="<your-region>"
export CLUSTER_NAME="<your-cluster-name>"
リソース グループを作成します
Azure リソース グループは、Azure リソースが展開され管理される論理グループです。 Azureでリソース グループを作成する場合は、場所を指定する必要があります。 この場所は、リソース グループ メタデータのストレージの場所であり、リソースの作成時に別のリージョンを指定しない場合はAzureでリソースが実行されます。
az group create コマンドを使用して、リソース グループを作成します。
az group create --name $RESOURCE_GROUP --location $REGION
出力例:
{
"id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/$RESOURCE_GROUP",
"location": "$REGION",
"managedBy": null,
"name": "$RESOURCE_GROUP",
"properties": {
"provisioningState": "Succeeded"
},
"tags": null,
"type": "Microsoft.Resources/resourceGroups"
}
Azure Linux コンテナー ホスト クラスターを作成する。
az aks create パラメーターを --os-sku に設定して、AzureLinux コマンドを使用して、Azure Linux コンテナー ホスト AKS クラスターを作成します。
az aks create --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP --os-sku AzureLinux
数分後、コマンドが完了し、クラスターに関する情報が 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 $RESOURCE_GROUP --name $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 startupProbe: httpGet: path: /health port: 3000 failureThreshold: 5 initialDelaySeconds: 20 periodSeconds: 10 readinessProbe: httpGet: path: /health port: 3000 failureThreshold: 3 initialDelaySeconds: 3 periodSeconds: 5 livenessProbe: httpGet: path: /health port: 3000 failureThreshold: 5 initialDelaySeconds: 3 periodSeconds: 3 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 env: - name: AI_SERVICE_URL value: "http://ai-service:5001/" resources: requests: cpu: 1m memory: 1Mi limits: cpu: 2m memory: 20Mi readinessProbe: httpGet: path: /health port: 3002 failureThreshold: 3 initialDelaySeconds: 3 periodSeconds: 5 livenessProbe: httpGet: path: /health port: 3002 failureThreshold: 5 initialDelaySeconds: 3 periodSeconds: 3 --- 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 startupProbe: httpGet: path: /health port: 8080 failureThreshold: 3 initialDelaySeconds: 5 periodSeconds: 5 readinessProbe: httpGet: path: /health port: 8080 failureThreshold: 3 initialDelaySeconds: 3 periodSeconds: 3 livenessProbe: httpGet: path: /health port: 8080 failureThreshold: 5 initialDelaySeconds: 3 periodSeconds: 3 --- apiVersion: v1 kind: Service metadata: name: store-front spec: ports: - port: 80 targetPort: 8080 selector: app: store-front type: LoadBalancerYAML ファイルをローカルに作成して保存する場合は、[ファイルのアップロード/ダウンロード] ボタンを選択し、ローカル ファイル システムからファイルを選択することで、CloudShell の既定のディレクトリにマニフェスト ファイルをアップロードできます。
kubectl 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
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
curl $IP_ADDRESS
結果:
<!doctype html>
<html lang="">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width,initial-scale=1">
<link rel="icon" href="/favicon.ico">
<title>store-front</title>
<script defer="defer" src="/js/chunk-vendors.df69ae47.js"></script>
<script defer="defer" src="/js/app.7e8cfbb2.js"></script>
<link href="/css/app.a5dc49f6.css" rel="stylesheet">
</head>
<body>
<div id="app"></div>
</body>
</html>
echo "You can now visit your web server at $IP_ADDRESS"
クラスターを削除する
必要がなくなれば、不要なリソースをクリーンアップして、Azure の料金を抑えることができます。
az group delete コマンドを使用して、Azure リソース グループとすべての関連リソースを削除します。
az group delete --name $RESOURCE_GROUP --yes --no-wait
関連するコンテンツ
このクイックスタートでは、Azure Linux コンテナー ホスト クラスターをデプロイしました。 Azure Linux コンテナー ホストの詳細については、次のリソースを参照してください。
- Azure Linux Container Host チュートリアル シリーズ: パート 1
Azure Kubernetes Service (AKS)