Azure portal で仮想ノードを使用する Azure Kubernetes Service (AKS) クラスターを作成して構成するCreate and configure an Azure Kubernetes Services (AKS) cluster to use virtual nodes in the Azure portal

Azure Kubernetes Service (AKS) クラスターでワークロードをすばやくデプロイするには、仮想ノードを使用します。To quickly deploy workloads in an Azure Kubernetes Service (AKS) cluster, you can use virtual nodes. 仮想ノードを使用すると、ポッドを短時間でプロビジョニングできるため、ポッドの実行時間に対して秒単位の支払いだけで済みます。With virtual nodes, you have fast provisioning of pods, and only pay per second for their execution time. スケーリング シナリオでは、Kubernetes クラスターのオートスケーラーが VM コンピューティング ノードをデプロイして追加のポッドを実行するのを待つ必要はありません。In a scaling scenario, you don't need to wait for the Kubernetes cluster autoscaler to deploy VM compute nodes to run the additional pods. 仮想ノードは、Linux のポッドとノードでのみサポートされます。Virtual nodes are only supported with Linux pods and nodes.

この記事では、仮想ノードを有効にして、仮想ネットワーク リソースと AKS クラスターを作成して構成する方法を示します。This article shows you how to create and configure the virtual network resources and an AKS cluster with virtual nodes enabled.

開始する前にBefore you begin

仮想ノードを使用すると、ACI および AKS クラスターで実行されているポッド間でのネットワーク通信が可能になります。Virtual nodes enable network communication between pods that run in ACI and the AKS cluster. この通信を可能にするために、仮想ネットワーク サブネットが作成され、委任されたアクセス許可が割り当てられます。To provide this communication, a virtual network subnet is created and delegated permissions are assigned. 仮想ノードは、"高度" ネットワークを使用して作成された AKS クラスターに対してのみ機能します。Virtual nodes only work with AKS clusters created using advanced networking. 既定では、AKS クラスターは "基本" ネットワークを使用して作成されます。By default, AKS clusters are created with basic networking. この記事では、仮想ネットワークとサブネットを作成した後、高度ネットワークを使用した AKS クラスターをデプロイする方法について説明します。This article shows you how to create a virtual network and subnets, then deploy an AKS cluster that uses advanced networking.

以前に ACI を使用していない場合は、ご使用のサブスクリプションでサービス プロバイダーを登録します。If you have not previously used ACI, register the service provider with your subscription. ACI プロバイダーの状態は、次の例で示すように az provider list コマンドを使用して確認できます。You can check the status of the ACI provider registration using the az provider list command, as shown in the following example:

az provider list --query "[?contains(namespace,'Microsoft.ContainerInstance')]" -o table

Microsoft.ContainerInstance プロバイダーは、次の出力の例で示すように Registered としてレポートします。The Microsoft.ContainerInstance provider should report as Registered, as shown in the following example output:

Namespace                    RegistrationState
---------------------------  -------------------
Microsoft.ContainerInstance  Registered

プロバイダーが NotRegistered として示される場合は、次の例で示すように [az provider register][az-provider-register] を使用してプロバイダーを登録します。If the provider shows as NotRegistered, register the provider using the [az provider register][az-provider-register] as shown in the following example:

az provider register --namespace Microsoft.ContainerInstance

リージョン別の提供状況Regional availability

仮想ノードのデプロイでは、次のリージョンがサポートされています。The following regions are supported for virtual node deployments:

  • オーストラリア東部 (australiaeast)Australia East (australiaeast)
  • 米国中部 (centralus)Central US (centralus)
  • 米国東部 (eastus)East US (eastus)
  • 米国東部 2 (eastus2)East US 2 (eastus2)
  • 東日本 (japaneast)Japan East (japaneast)
  • 北ヨーロッパ (northeurope)North Europe (northeurope)
  • 東南アジア (southeastasia)Southeast Asia (southeastasia)
  • 米国中西部 (westcentralus)West Central US (westcentralus)
  • 西ヨーロッパ (westeurope)West Europe (westeurope)
  • 米国西部 (westus)West US (westus)
  • 米国西部 2 (westus2)West US 2 (westus2)

既知の制限事項Known limitations

仮想ノードの機能は、ACI の機能セットに大きく依存します。Virtual Nodes functionality is heavily dependent on ACI's feature set. 次のシナリオは、仮想ノードではまだサポートされていませんThe following scenarios are not yet supported with Virtual Nodes

Azure へのサインインSign in to Azure

Azure Portal ( https://portal.azure.com ) にサインインします。Sign in to the Azure portal at https://portal.azure.com.

AKS クラスターの作成Create an AKS cluster

Azure portal の左上隅で、 [リソースの作成] > [Kubernetes Service] を選択します。In the top left-hand corner of the Azure portal, select Create a resource > Kubernetes Service.

[基本] ページで、次のオプションを構成します。On the Basics page, configure the following options:

  • プロジェクトの詳細:サブスクリプションを選択し、Azure リソース グループ (たとえば、myResourceGroup) を選択または作成します。PROJECT DETAILS: Select an Azure subscription, then select or create an Azure resource group, such as myResourceGroup. Kubernetes クラスター名 (たとえば、myAKSCluster) を入力します。Enter a Kubernetes cluster name, such as myAKSCluster.
  • クラスターの詳細:AKS クラスターのリージョン、Kubernetes バージョン、および DNS 名プレフィックスを選択します。CLUSTER DETAILS: Select a region, Kubernetes version, and DNS name prefix for the AKS cluster.
  • プライマリ ノード プール:AKS ノードの VM サイズを選択します。PRIMARY NODE POOL: Select a VM size for the AKS nodes. AKS クラスターがデプロイされた後に、VM サイズを変更することはできませんThe VM size cannot be changed once an AKS cluster has been deployed.
    • クラスターにデプロイするノードの数を選択します。Select the number of nodes to deploy into the cluster. この記事では、 [ノード数]1 に設定します。For this article, set Node count to 1. ノード数は、クラスターをデプロイした後に調整できますNode count can be adjusted after the cluster has been deployed.

[次へ: スケール] をクリックします。Click Next: Scale.

[スケール] ページの [仮想ノード][有効] を選択します。On the Scale page, select Enabled under Virtual nodes.

AKS クラスターを作成し、仮想ノードを有効にする

既定では、Azure Active Directory サービス プリンシパルが作成されます。By default, an Azure Active Directory service principal is created. このサービス プリンシパルは、クラスター通信と他の Azure サービスとの統合に使用されます。This service principal is used for cluster communication and integration with other Azure services.

このクラスターは高度なネットワークに対しても構成されます。The cluster is also configured for advanced networking. 仮想ノードは、独自の Azure 仮想ネットワーク サブネットを使用するように構成されます。The virtual nodes are configured to use their own Azure virtual network subnet. このサブネットには、Azure リソースと AKS クラスター間を接続するための委任されたアクセス許可があります。This subnet has delegated permissions to connect Azure resources between the AKS cluster. 委任されたサブネットがまだない場合、Azure portal によって仮想ノードで使用するための Azure 仮想ネットワークとサブネットが作成および構成されます。If you don't already have delegated subnet, the Azure portal creates and configures the Azure virtual network and subnet for use with the virtual nodes.

[Review + create](レビュー + 作成) を選択します。Select Review + create. 検証が完了したら、 [作成] を選択します。After the validation is complete, select Create.

AKS クラスターを作成して、使用準備が完了するのには数分かかります。It takes a few minutes to create the AKS cluster and to be ready for use.

クラスターへの接続Connect to the cluster

Azure Cloud Shell は無料のインタラクティブ シェルです。この記事の手順は、Azure Cloud Shell を使って実行することができます。The Azure Cloud Shell is a free interactive shell that you can use to run the steps in this article. 一般的な Azure ツールが事前にインストールされており、アカウントで使用できるように構成されています。It has common Azure tools preinstalled and configured to use with your account. Kubernetes クラスターを管理するには、Kubernetes のコマンドライン クライアントである kubectl を使います。To manage a Kubernetes cluster, use kubectl, the Kubernetes command-line client. kubectl クライアントは Azure Cloud Shell に事前にインストールされています。The kubectl client is pre-installed in the Azure Cloud Shell.

Cloud Shell を開くには、コード ブロックの右上隅にある [使ってみる] を選択します。To open the Cloud Shell, select Try it from the upper right corner of a code block. https://shell.azure.com/bash に移動して、別のブラウザー タブで Cloud Shell を起動することもできます。You can also launch Cloud Shell in a separate browser tab by going to https://shell.azure.com/bash. [コピー] を選択してコードのブロックをコピーし、Cloud Shell に貼り付けてから、Enter キーを押して実行します。Select Copy to copy the blocks of code, paste it into the Cloud Shell, and press enter to run it.

Kubernetes クラスターに接続するように kubectl を構成するには、az aks get-credentials コマンドを実行します。Use the az aks get-credentials command to configure kubectl to connect to your Kubernetes cluster. 次の例では、myResourceGroup という名前のリソース グループの myAKSCluster という名前のクラスターの資格情報を取得します。The following example gets credentials for the cluster name myAKSCluster in the resource group named myResourceGroup:

az aks get-credentials --resource-group myResourceGroup --name myAKSCluster

クラスターへの接続を確認するには、kubectl get コマンドを使って、クラスター ノードの一覧を取得します。To verify the connection to your cluster, use the kubectl get command to return a list of the cluster nodes.

kubectl get nodes

次の出力例は、単一の VM ノードが作成されてから、Linux 用の仮想ノード、virtual-node-aci-linuxが作成されることを示しています。The following example output shows the single VM node created and then the virtual node for Linux, virtual-node-aci-linux:

$ kubectl get nodes

NAME                           STATUS    ROLES     AGE       VERSION
virtual-node-aci-linux         Ready     agent     28m       v1.11.2
aks-agentpool-14693408-0       Ready     agent     32m       v1.11.2

サンプル アプリのデプロイDeploy a sample app

Azure Cloud Shell で、virtual-node.yaml という名前のファイルを作成し、そこに以下の YAML をコピーします。In the Azure Cloud Shell, create a file named virtual-node.yaml and copy in the following YAML. ノード上のコンテナーをスケジュールするため、nodeSelectortoleration が定義されます。To schedule the container on the node, a nodeSelector and toleration are defined. これらの設定により、仮想ノードでポッドがスケジュール設定され、機能が正常に有効化されていることを確認できます。These settings allow the pod to be scheduled on the virtual node and confirm that the feature is successfully enabled.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: aci-helloworld
spec:
  replicas: 1
  selector:
    matchLabels:
      app: aci-helloworld
  template:
    metadata:
      labels:
        app: aci-helloworld
    spec:
      containers:
      - name: aci-helloworld
        image: microsoft/aci-helloworld
        ports:
        - containerPort: 80
      nodeSelector:
        kubernetes.io/role: agent
        beta.kubernetes.io/os: linux
        type: virtual-kubelet
      tolerations:
      - key: virtual-kubelet.io/provider
        operator: Exists
      - key: azure.com/aci
        effect: NoSchedule

kubectl apply コマンドを使用してアプリケーションを実行します。Run the application with the kubectl apply command.

kubectl apply -f virtual-node.yaml

-o wide 引数を指定して kubectl get pods コマンドを使用し、ポッドの一覧とスケジュールされたノードを出力します。Use the kubectl get pods command with the -o wide argument to output a list of pods and the scheduled node. virtual-node-helloworld ポッドは virtual-node-linux ノードでスケジュールされています。Notice that the virtual-node-helloworld pod has been scheduled on the virtual-node-linux node.

$ kubectl get pods -o wide

NAME                                     READY     STATUS    RESTARTS   AGE       IP           NODE
virtual-node-helloworld-9b55975f-bnmfl   1/1       Running   0          4m        10.241.0.4   virtual-node-aci-linux

ポッドには、仮想ノードで使用するために委任された Azure 仮想ネットワーク サブネットからの内部 IP アドレスが割り当てられます。The pod is assigned an internal IP address from the Azure virtual network subnet delegated for use with virtual nodes.

注意

Azure Container Registry に格納されているイメージを使用する場合、Kubernetes シークレットを構成して使用しますIf you use images stored in Azure Container Registry, configure and use a Kubernetes secret. 仮想ノードの現在の制限は、Azure AD サービス プリンシパル統合認証を使用できないことです。A current limitation of virtual nodes is that you can't use integrated Azure AD service principal authentication. シークレットを使用しない場合、仮想ノードでスケジュールされたポッドの開始に失敗し、エラー HTTP response status code 400 error code "InaccessibleImage" が報告されます。If you don't use a secret, pods scheduled on virtual nodes fail to start and report the error HTTP response status code 400 error code "InaccessibleImage".

仮想ノード ポッドのテストTest the virtual node pod

仮想ノードで実行されているポッドをテストするには、Web クライアントでデモ アプリケーションを参照します。To test the pod running on the virtual node, browse to the demo application with a web client. ポッドには内部 IP アドレスが割り当てられているため、AKS クラスターの別のポッドからこの接続をすばやくテストできます。As the pod is assigned an internal IP address, you can quickly test this connectivity from another pod on the AKS cluster. テスト ポッドを作成し、それにターミナル セッションをアタッチします。Create a test pod and attach a terminal session to it:

kubectl run -it --rm virtual-node-test --image=debian

apt-get を使用して、curl をポッドにインストールします。Install curl in the pod using apt-get:

apt-get update && apt-get install -y curl

次に、curl ( http://10.241.0.4 など) を使用して、ポッドのアドレスにアクセスします。Now access the address of your pod using curl, such as http://10.241.0.4. 前の kubectl get pods コマンドで示された独自の内部 IP アドレスを入力します。Provide your own internal IP address shown in the previous kubectl get pods command:

curl -L http://10.241.0.4

次の簡約された出力例に示されているように、デモ アプリケーションが表示されます。The demo application is displayed, as shown in the following condensed example output:

$ curl -L 10.241.0.4

<html>
<head>
  <title>Welcome to Azure Container Instances!</title>
</head>
[...]

exit を使用してテスト ポッドへのターミナル セッションを閉じます。Close the terminal session to your test pod with exit. セッションが終了すると、ポッドが削除されます。When your session is ended, the pod is the deleted.

次の手順Next steps

この記事では、ポッドを仮想ノードでスケジュールし、プライベートの内部 IP アドレスを割り当てました。In this article, a pod was scheduled on the virtual node and assigned a private, internal IP address. 代わりに、サービスのデプロイを作成して、ロード バランサーまたはイングレス コントローラーを使用してトラフィックを自分のポッドにルーティングすることもできます。You could instead create a service deployment and route traffic to your pod through a load balancer or ingress controller. 詳細は、AKS での基本的なイングレス コント ローラーの作成を参照してください。For more information, see Create a basic ingress controller in AKS.

仮想ノードは、AKS のスケーリング ソリューションの 1 つのコンポーネントです。Virtual nodes are one component of a scaling solution in AKS. スケーリング ソリューションの詳細については、次の記事を参照してください。For more information on scaling solutions, see the following articles: