Azure portal で仮想ノードを使用する Azure Kubernetes Service (AKS) クラスターを作成して構成する

仮想ノードを使用すると、Azure Container Instances (ACI) および Azure Kubernetes Service (AKS) クラスターで実行されているポッド間でのネットワーク通信が可能になります。 この通信を可能にするために、仮想ネットワーク サブネットが作成され、委任されたアクセス許可が割り当てられます。 仮想ノードは、"高度" ネットワーク (Azure CNI) を使用して作成された AKS クラスターに対してのみ機能します。 既定では、AKS クラスターは "基本" ネットワーク (kubenet) を使用して作成されます。

この記事では、Azure portal を使用して、仮想ネットワークとサブネットを作成し、高度なネットワークを使用した AKS クラスターをデプロイする方法について説明します。

Note

仮想ノードのリージョンの提供状況と制限の概要については、AKS での仮想ノードの使用に関する記事を参照してください。

開始する前に

ご利用のサブスクリプションに登録されている ACI サービス プロバイダーが必要です。

  • az provider list コマンドを使用して、ACI プロバイダーの登録の状態を確認します。

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

    次の出力例では、"Microsoft.ContainerInstance" プロバイダーが "Registered" であることが示されています。

    Namespace                    RegistrationState    RegistrationPolicy
    ---------------------------  -------------------  --------------------
    Microsoft.ContainerInstance  Registered           RegistrationRequired
    
  • プロバイダーが "NotRegistered" の場合は、az provider register コマンドを使用して登録します。

    az provider register --namespace Microsoft.ContainerInstance
    

AKS クラスターを作成する

  1. Azure portal のホーム ページに移動します。
  2. [リソースの作成]>[コンテナー] を選択します。
  3. [Azure Kubernetes Service (AKS)] リソースの [作成] を選択します。
  4. [基本] ページで、次のオプションを構成します。
    • [プロジェクトの詳細]: Azure サブスクリプションを選択し、Azure リソース グループ (たとえば "myResourceGroup") を選択または作成します。
    • クラスターの詳細:Kubernetes クラスター名 (たとえば、myAKSCluster) を入力します。 AKS クラスターのリージョンと Kubernetes バージョンを選択します。
  5. [次へ: ノード プール] を選択し、*[仮想ノードを有効にする] を選択します。 Screenshot that shows creating a cluster with virtual nodes enabled on the Azure portal. The option 'Enable virtual nodes' is highlighted.
  6. [Review + create](レビュー + 作成) を選択します。
  7. 検証が完了したら、[作成] を選択します。

既定では、このプロセスによって、他の Azure サービスとのクラスター通信および統合に使用されるマネージド クラスター ID が作成されます。 詳細については、マネージド ID の使用に関するページを参照してください。 また、サービス プリンシパルをクラスター ID として使用することもできます。

このプロセスでは、高度なネットワーク用にクラスターを構成し、独自の Azure 仮想ネットワーク サブネットを使用するように仮想ノードを構成します。 このサブネットには、Azure リソースと AKS クラスター間を接続するための、委任されたアクセス許可があります。 委任されたサブネットがまだない場合は、Azure portal によって、仮想ノードでの Azure 仮想ネットワークとサブネットの作成と構成が行われます。

クラスターに接続する

Azure Cloud Shell は、この記事の手順を実行するために使用できる無料の対話型シェルです。 一般的な Azure ツールが事前にインストールされており、アカウントで使用できるように構成されています。 Kubernetes クラスターを管理するには、Kubernetes のコマンドライン クライアントである kubectl を使用します。 kubectl クライアントは Azure Cloud Shell に事前にインストールされています。

  1. az aks get-credentials コマンドを使用して、Kubernetes クラスターに接続するように kubectl を構成します。 次の例では、myResourceGroup という名前のリソース グループの myAKSCluster という名前のクラスターの資格情報を取得します。

    az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
    
  2. kubectl get nodes を使用して、クラスターへの接続を確認します。

    kubectl get nodes
    

    次の出力例は、単一の VM ノードの作成と、"virtual-node-aci-linux" という名前の仮想 Linux ノードを示しています。

    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
    

サンプル アプリのデプロイ

  1. Azure Cloud Shell で、virtual-node.yaml という名前のファイルを作成し、次の YAML をコピーします。

    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: mcr.microsoft.com/azuredocs/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
    

    この YAML は、nodeSelectortoleration を定義します。これにより、仮想ノードでポッドをスケジュールできるようになります。 ポッドには、仮想ノードで使用するために委任された Azure 仮想ネットワーク サブネットからの内部 IP アドレスが割り当てられます。

  2. kubectl apply コマンドを使用して、アプリケーションを実行します。

    kubectl apply -f virtual-node.yaml
    
  3. -o wide 引数を指定した kubectl get pods コマンドを使用して、ノードでスケジュールされているポッドを表示します。

    kubectl get pods -o wide
    

    次の出力例は、virtual-node-linux ノードでスケジュールされている virtual-node-helloworld ポッドを示しています。

    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
    

Note

Azure Container Registry に格納されているイメージを使用する場合、Kubernetes シークレットを構成して使用します。 仮想ノードには、Microsoft Entra サービス プリンシパル統合認証を使用できないという制限があります。 シークレットを使用しない場合、仮想ノードでスケジュールされたポッドの開始に失敗し、エラー HTTP response status code 400 error code "InaccessibleImage" が報告されます。

仮想ノード ポッドのテスト

仮想ノードで実行されているポッドをテストするには、Web クライアントでデモ アプリケーションを参照します。 ポッドには内部 IP アドレスが割り当てられているため、AKS クラスターの別のポッドから接続を簡単にテストできます。

  1. 次の kubectl run コマンドを使用して、テスト ポッドを作成し、それにターミナル セッションをアタッチします。

    kubectl run -it --rm virtual-node-test --image=mcr.microsoft.com/dotnet/runtime-deps:6.0
    
  2. 次の apt-get コマンドを使用して、ポッドに curl をインストールします。

    apt-get update && apt-get install -y curl
    
  3. 次の curl コマンドを使用し、内部 IP アドレスを指定して、ポッドのアドレスにアクセスします。

    curl -L http://10.241.0.4
    

    次の短縮された出力例は、デモ アプリケーションを示しています。

    <html>
    <head>
      <title>Welcome to Azure Container Instances!</title>
    </head>
    [...]
    
  4. exit を使用して、テスト ポッドへのターミナル セッションを終了します。これにより、ポッドの削除も行われます。

    exit
    

次のステップ

この記事では、仮想ノードでポッドをスケジュールし、プライベートの内部 IP アドレスを割り当てました。 必要に応じて、代わりにサービスのデプロイを作成し、ロード バランサーまたはイングレス コントローラーを介してポッドにトラフィックをルーティングすることもできます。 詳細は、AKS での基本的なイングレス コント ローラーの作成を参照してください。

仮想ノードは、AKS のスケーリング ソリューションの 1 つのコンポーネントです。 スケーリング ソリューションの詳細については、次の記事を参照してください。