クイック スタート: Azure portal を使用して Azure Kubernetes Service (AKS) クラスターをデプロイする
Azure Kubernetes Service (AKS) は、クラスターをすばやくデプロイおよび管理することができる、マネージド Kubernetes サービスです。 このクイック スタートでは次の作業を行います。
- Azure portal を使用して AKS クラスターをデプロイします。
- 小売シナリオをシミュレートするマイクロサービスのグループと、Web フロントエンドを使用して、サンプルのマルチコンテナー アプリケーションを実行します。
Note
AKS クラスターの迅速なプロビジョニングを開始するため、この記事には、評価のみを目的とした既定の設定でクラスターをデプロイする手順が含まれています。 運用環境に対応したクラスターをデプロイする前に、ベースライン参照アーキテクチャを理解して、ビジネス要件にどの程度合致しているかを検討することをお勧めします。
開始する前に
このクイックスタートは、Kubernetes の基本的な概念を理解していることを前提としています。 詳細については、「Azure Kubernetes Services (AKS) における Kubernetes の中心概念」を参照してください。
- Azure サブスクリプションをお持ちでない場合は、開始する前に Azure 無料アカウントを作成してください。
- Cloud Shell について初めて学ぶ場合は、「Azure Cloud Shell の概要」を確認してください。
- クラスターの作成に使用する ID に、適切な最小限のアクセス許可が付与されていることを確認してください。 AKS のアクセスと ID の詳細については、「Azure Kubernetes Service (AKS) でのアクセスと ID オプション」を参照してください。
Note
Azure Linux ノード プールが一般提供 (GA) になりました。 利点とデプロイの手順については、AKS 用 Azure Linux コンテナー ホストの概要に関する記事を参照してください。
AKS クラスターを作成する
Azure portal にサインインします。
Azure portal のホーム ページで [リソースの作成] を選択します。
[カテゴリ] セクションで、[コンテナー]>[Azure Kubernetes Service (AKS)] を選択します。
[基本] タブで次の設定を構成します。
- [プロジェクトの詳細] で:
- サブスクリプション: この AKS クラスターで使用したい Azure サブスクリプションを選択します。
- リソース グループ: [新規作成] を選択し、myResourceGroup などのリソース グループ名を入力した後、[OK] を選択します。 既存のリソース グループを選択することもできますが、テストまたは評価目的の場合は、これらのリソースを一時的にホストし、運用ワークロードや開発ワークロードに影響を与えないようにリソース グループを作成することをお勧めします。
- [クラスターの詳細] で、次のようにします。
クラスター プリセット構成: [Dev/Test] を選択します。 プリセットの構成の詳細については、Azure portal の「クラスター構成プリセット」を参照してください。
Kubernetes クラスター名: myAKSCluster などのクラスター名を入力します。
リージョン: "米国東部 2" などのリージョンを選択します。
可用性ゾーン: [なし] を選択します。
AKS 価格レベル: [Free] を選択します。
残りの設定は既定値のままにして、[次へ] を選択します。
- [プロジェクトの詳細] で:
[ノード プール] タブで、以下の設定を構成します。
[確認と作成] を選択して、クラスター構成で検証を実行します。 検証が完了した後、 [作成] を選択します。
AKS クラスターの作成には数分かかります。 デプロイが完了したら、[リソースに移動] を選択するか、AKS クラスター リソース グループを参照して AKS リソースを選択することで、リソースに移動します。
クラスターに接続する
Kubernetes コマンドライン クライアントである kubectl を使用することで、Kubernetes クラスターを管理します。 Azure Cloud Shell を使用している場合、kubectl
は既にインストールされています。 Cloud Shell について初めて学ぶ場合は、「Azure Cloud Shell の概要」を確認してください。
Cloud Shell を使っている場合は、Azure portal の上部にある >_
ボタンを使って開きます。 PowerShell をローカルで使っている場合は、Connect-AzAccount
コマンドを使って Azure に接続します。 Azure CLI をローカルで使っている場合は、az login
コマンドを使って Azure に接続します。
az aks get-credentials
コマンドを使用して、Kubernetes クラスターに接続するようにkubectl
を構成します。 このコマンドは、資格情報をダウンロードし、それを使用するように Kubernetes CLI を構成します。az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
クラスター ノードの一覧を返す
kubectl get
を使用して、クラスターへの接続を確認します。kubectl get nodes
次の出力例は、前の手順で作成した単一ノードを示しています。 ノードの状態が [Ready] であることを確認してください。
NAME STATUS ROLES AGE VERSION aks-nodepool1-31718369-0 Ready agent 6m44s v1.15.10
アプリケーションの配置
マニフェスト ファイルを使用することで、AKS ストア アプリケーションの実行に必要なすべてのオブジェクトを作成します。 Kubernetes のマニフェスト ファイルでは、どのコンテナー イメージを実行するかなど、クラスターの望ましい状態を定義します。 マニフェストには、次の Kubernetes のデプロイとサービスが含まれています。
- ネットショップ: 顧客が製品を見て注文するための Web アプリケーション。
- 製品サービス: 製品情報が表示されます。
- 注文サービス: 注文を行います。
- Rabbit MQ: 注文キューのメッセージ キュー。
Note
運用環境の永続ストレージを使用せずに Rabbit MQ などのステートフル コンテナーを実行することはお勧めしません。 これらはわかりやすくするためにここで使用しますが、Azure CosmosDB や Azure Service Bus などのマネージド サービスを使用することをお勧めします。
Cloud Shell でエディターを開き、
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 の既定のディレクトリにマニフェスト ファイルをアップロードできます。
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
アプリケーションをテストする
アプリケーションが実行されると、Kubernetes サービスによってアプリケーション フロント エンドがインターネットに公開されます。 このプロセスが完了するまでに数分かかることがあります。
kubectl get pods
コマンドを使用して、デプロイされたポッドの状態を確認します。 続行する前に、すべてのポッドをRunning
の状態にします。kubectl get pods
store-front
アプリケーションのパブリック IP アドレスを確認します。kubectl get service
コマンドと--watch
引数を使用して、進行状況を監視します。kubectl get service store-front --watch
store-front
サービスの [EXTERNAL-IP] の出力は、最初は pending と表示されます。NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE store-front LoadBalancer 10.0.100.10 <pending> 80:30025/TCP 4h4m
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
Azure Store アプリが動作していることを確認するには、Web ブラウザーを開いてサービスの外部 IP アドレスにアクセスします。
クラスターを削除する
「AKS チュートリアル シリーズ」を実行する予定がない場合は、Azure の課金を回避するために不要なリソースをクリーンアップします。
Azure portal で、ご使用の AKS クラスター リソース グループに移動します。
[リソース グループの削除] を選択します。
削除するリソース グループの名前を入力し、[削除]>[削除] を選択します。
Note
AKS クラスターは、システム割り当てマネージド ID を使用して作成されました。 この ID はプラットフォームによって管理され、削除は必要ありません。
次のステップ
このクイックスタートでは、Kubernetes クラスターをデプロイした後、それにシンプルなマルチコンテナー アプリケーションをデプロイしました。 このサンプル アプリケーションはデモ専用であり、Kubernetes アプリケーションのすべてのベスト プラクティスを表すわけではありません。 実稼動用に AKS を使用した完全なソリューションを作成するうえでのガイダンスについては、AKS ソリューション ガイダンスに関する記事を参照してください。
AKS の詳細を知り、コードからデプロイまでの完全な例を確認するには、Kubernetes クラスター チュートリアル シリーズに進んでください。
Azure Kubernetes Service