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 クラスターを作成する
- Azure portal のホーム ページに移動します。
- [リソースの作成]>[コンテナー] を選択します。
- [Azure Kubernetes Service (AKS)] リソースの [作成] を選択します。
- [基本] ページで、次のオプションを構成します。
- [プロジェクトの詳細]: Azure サブスクリプションを選択し、Azure リソース グループ (たとえば "myResourceGroup") を選択または作成します。
- クラスターの詳細:Kubernetes クラスター名 (たとえば、myAKSCluster) を入力します。 AKS クラスターのリージョンと Kubernetes バージョンを選択します。
- [次へ: ノード プール] を選択し、*[仮想ノードを有効にする] を選択します。
- [Review + create](レビュー + 作成) を選択します。
- 検証が完了したら、[作成] を選択します。
既定では、このプロセスによって、他の Azure サービスとのクラスター通信および統合に使用されるマネージド クラスター ID が作成されます。 詳細については、マネージド ID の使用に関するページを参照してください。 また、サービス プリンシパルをクラスター ID として使用することもできます。
このプロセスでは、高度なネットワーク用にクラスターを構成し、独自の Azure 仮想ネットワーク サブネットを使用するように仮想ノードを構成します。 このサブネットには、Azure リソースと AKS クラスター間を接続するための、委任されたアクセス許可があります。 委任されたサブネットがまだない場合は、Azure portal によって、仮想ノードでの Azure 仮想ネットワークとサブネットの作成と構成が行われます。
クラスターに接続する
Azure Cloud Shell は、この記事の手順を実行するために使用できる無料の対話型シェルです。 一般的な Azure ツールが事前にインストールされており、アカウントで使用できるように構成されています。 Kubernetes クラスターを管理するには、Kubernetes のコマンドライン クライアントである kubectl を使用します。 kubectl
クライアントは Azure Cloud Shell に事前にインストールされています。
az aks get-credentials
コマンドを使用して、Kubernetes クラスターに接続するようにkubectl
を構成します。 次の例では、myResourceGroup という名前のリソース グループの myAKSCluster という名前のクラスターの資格情報を取得します。az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
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
サンプル アプリのデプロイ
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 は、nodeSelector と toleration を定義します。これにより、仮想ノードでポッドをスケジュールできるようになります。 ポッドには、仮想ノードで使用するために委任された Azure 仮想ネットワーク サブネットからの内部 IP アドレスが割り当てられます。
kubectl apply
コマンドを使用して、アプリケーションを実行します。kubectl apply -f virtual-node.yaml
-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 クラスターの別のポッドから接続を簡単にテストできます。
次の
kubectl run
コマンドを使用して、テスト ポッドを作成し、それにターミナル セッションをアタッチします。kubectl run -it --rm virtual-node-test --image=mcr.microsoft.com/dotnet/runtime-deps:6.0
次の
apt-get
コマンドを使用して、ポッドにcurl
をインストールします。apt-get update && apt-get install -y curl
次の
curl
コマンドを使用し、内部 IP アドレスを指定して、ポッドのアドレスにアクセスします。curl -L http://10.241.0.4
次の短縮された出力例は、デモ アプリケーションを示しています。
<html> <head> <title>Welcome to Azure Container Instances!</title> </head> [...]
exit
を使用して、テスト ポッドへのターミナル セッションを終了します。これにより、ポッドの削除も行われます。exit
次のステップ
この記事では、仮想ノードでポッドをスケジュールし、プライベートの内部 IP アドレスを割り当てました。 必要に応じて、代わりにサービスのデプロイを作成し、ロード バランサーまたはイングレス コントローラーを介してポッドにトラフィックをルーティングすることもできます。 詳細は、AKS での基本的なイングレス コント ローラーの作成を参照してください。
仮想ノードは、AKS のスケーリング ソリューションの 1 つのコンポーネントです。 スケーリング ソリューションの詳細については、次の記事を参照してください。
Azure Kubernetes Service