クイック スタート: Azure portal を使用して Azure Kubernetes Service (AKS) クラスターをデプロイする
Azure Kubernetes Service (AKS) は、クラスターをすばやくデプロイおよび管理することができる、マネージド Kubernetes サービスです。 このクイック スタートでは次の作業を行います。
- Azure portal を使用して AKS クラスターをデプロイします。
- 小売シナリオをシミュレートするマイクロサービスのグループと、Web フロントエンドを使用して、サンプルのマルチコンテナー アプリケーションを実行します。
Note
このサンプル アプリケーションはデモ用であり、Kubernetes アプリケーションのすべてのベスト プラクティスを表しているわけではありません。
開始する前に
このクイックスタートは、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)] を選択します。
[基本] タブで次のオプションを構成します。
- [プロジェクトの詳細] で 次の手順を実行します。
- Azure のサブスクリプションを選択します
- Azure リソース グループを作成します (myResourceGroup など)。 既存のリソース グループを選択することもできますが、テストまたは評価目的の場合は、これらのリソースを一時的にホストし、運用ワークロードや開発ワークロードに影響を与えないようにリソース グループを作成することをお勧めします。
- [クラスターの詳細] で 、次の手順を実行します。
クラスター プリセット構成を Dev/Test に設定します。 プリセットの構成の詳細については、Azure portal の「クラスター構成プリセット」を参照してください。
Kubernetes クラスター名 (たとえば、myAKSCluster) を入力します。
AKS クラスターの [リージョン] を選択します。
[可用性ゾーン] 設定を [なし] に設定します。
AKS 価格レベルを Free に設定します。
Kubernetes バージョンは既定値を選択したままにします。
[自動アップグレード] 設定は、推奨される値 (パッチで有効) のままにします。
[認証と承認] 設定は、Kubernetes RBAC を使用するローカル アカウントに設定したままにします。
- [プロジェクトの詳細] で 次の手順を実行します。
[次へ] を選択します。 [ノード プール] タブで、新しいノード プールを追加します。
[ノード プールの追加] を選択します。
nplinux などのノード プール名を入力します。
[モード] で [ユーザー] を選択します。
OS SKU の場合は、Ubuntu Linux を選択します。
[可用性ゾーン] 設定を [なし] に設定します。
[Enable Azure Spot instances]\(Azure スポット インスタンスを有効にする\) チェックボックスはチェックのままにします。
[ノード サイズ] で、[サイズの選択] を選択します。 [VM サイズの選択] ページで、D2s_v3選択し、[選択] ボタンを選択します。
[スケール] メソッドの設定は [自動スケール] のままにします。
[最小ノード数] フィールドと [最大ノード数] フィールドは既定の設定のままにします。
他のタブのすべての設定は既定値のままにします。
[確認と作成] を選択して、クラスター構成で検証を実行します。 検証が完了したら、[作成] を選択して AKS クラスターを作成します。
AKS クラスターの作成には数分かかります。 デプロイが完了したら、次のいずれかの方法でリソースに移動します。
- [リソースに移動] を選択します。
- AKS クラスター リソース グループを参照し、AKS リソースを選択します。 この例では、myResourceGroup を参照し、リソース myAKSCluster を選択します。
クラスターに接続する
Kubernetes クラスターを管理するには、Kubernetes のコマンドライン クライアントである kubectl を使います。 Azure Cloud Shell を使用している場合、kubectl
は既にインストールされています。 Cloud Shell について初めて学ぶ場合は、「Azure Cloud Shell の概要」を確認してください。
Azure portal の上部にある
>_
ボタンを使用して Cloud Shell を開きます。Note
ローカル インストールのシェルでこれらの操作を実行するには、次のようにします。
- Azure CLI または Azure PowerShell がインストールされていることを確認します。
az login
またはConnect-AzAccount
のコマンドを使用して 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
の状態にします。ストア フロント アプリケーションのパブリック 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 アドレスにアクセスします。
クラスターを削除する
この後のチュートリアルを実行しない場合は、Azure の課金を回避するために不要なリソースをクリーンアップします。
Azure portal で、AKS クラスター リソース グループに移動します。
[リソース グループの削除] を選択します。
削除するリソース グループの名前を入力し、[削除>] を選択します。
Note
AKS クラスターは、システム割り当てマネージド ID を使用して作成されました。 この ID はプラットフォームによって管理され、削除は必要ありません。
次のステップ
このクイック スタートでは、Kubernetes クラスターをデプロイし、シンプルな複数コンテナー アプリケーションをそこにデプロイしました。
AKS の詳細を確認し、完全なコードからデプロイの例までを確認するには、Kubernetes クラスターのチュートリアルに進んでください。