Azure Kubernetes Service (AKS)で仮想ノード v2 を使用する (プレビュー)

仮想ノード v2 は、Azure Container Instances (ACI) のサーバーレス コンピューティングでポッドを実行することで、VM ベースのノードを超えて AKS を拡張する強化された仮想ノード スタックです。 ワークロードは、新しいノードがプロビジョニングされるのを待たずに数秒で ACI にバーストし、ポッドの実行中に使用したコンピューティングに対してのみ課金されます。 Virtual Nodes v2 は、AKS クラスターの拡張機能として提供されます。

Important

AKS のプレビュー機能は、セルフサービスのオプトイン単位で利用できます。 プレビューは、"現状有姿のまま" および "利用可能な限度" で提供され、サービス レベル アグリーメントおよび限定保証から除外されるものとします。 AKS プレビューは、ベストエフォート ベースでカスタマー サポートによって部分的にカバーされます。 そのため、これらの機能は運用環境での使用を目的としていません。 詳細については、次のサポート記事を参照してください。

サポートされている

  • Init コンテナー
  • ホストのエイリアス
  • コンテナー ライフサイクル フック (postStart と preStop)
  • kubectl exec 引数付き
  • 永続ボリュームと PVC (Azure Filesのみ)
  • 仮想ネットワーク ピアリング
  • NSG で制御されるエグレス
  • エグレス用 NAT Gateway
  • 機密コンテナー
  • 仮想ノードあたり最大 200 のポッド

Limitations

次の機能はまだサポートされていません。

  • Windows コンテナー
  • DaemonSets
  • ポート転送設定
  • IPv6
  • API サーバーの認可された IP 範囲
  • Azure CNI オーバーレイ
  • ネットワーク ポリシーとしての Cilium または NPM
  • 持ち込み (BYO) Virtual Network
  • クラスターごとの複数の拡張インスタンス
  • スタンバイ プール

リソースの利用可能性とクオータ上限

Virtual Nodes v2 は、Azure Container Instances が VNet SKU をサポートしているすべての Azure パブリック クラウド リージョンで利用可能です。 詳細については、ACI のリソース利用可能とクオータの制限を参照してください。

Prerequisites

  • ノード サブネット モードの Azure CNI
  • ネットワーク ポリシーに「Calico またはなし」
  • ワークロード ID が有効になっている
  • VM サイズが vCPU 4 以上かつメモリが 16 GiB 以上のノードプールが 1 つ以上。 各仮想ノードは、クラスター内の AKS ノード上で約 3 vCPU と 12 GiB のメモリを割り当てられるため、ノードに十分なリソースが確保されていることを確認します。
  • k8s-extension バージョン 1.8 以上
  • kubectl 1.30 以降

ACI リソース プロバイダーを登録します。

az provider register --namespace Microsoft.ContainerInstance

Note

拡張機能の有効化プロセスのいずれかの段階でエラーが発生した場合は、次のコマンドを実行してください。

az provider register --namespace Microsoft.KubernetesConfig

仮想ノード v2 を有効にする

拡張機能をインストールします。

az k8s-extension create \
    --name <extension-name> \
    --extension-type Microsoft.virtualnodes \
    --cluster-name <cluster-name> \
    --resource-group <resource-group> \
    --cluster-type managedClusters \
    --configuration-settings replicaCount=1   # specifies number of virtual nodes - optional

拡張機能の設定を構成する

作成と更新の操作では、以下の構成設定がサポートされています。

構成設定 Description
replicaCount 仮想ノードの数。
admissionControllerReplicaCount アドミッション コントローラー ポッドの数。
podAnnotations インフラストラクチャ ポッドに、キーと値マッピングとして注釈が追加されました。
nodeSelector インフラストラクチャとアドミッション コントローラーのポッドをホストする AKS ノードを選択するラベル。
tolerations インフラストラクチャとアドミッション コントローラー ポッドに適用される許容値。
affinity 追加のアフィニティ設定が、必須の AKS アフィニティ ルールと統合されました。
zones ポッドがデプロイされる、セミコロンで区切られた可用性ゾーン。
nodeLabels 仮想ノードに追加されたラベルは、カンマ区切りの key=value ペアとして指定されます。

許可されている kubernetes.io ラベルは以下の通りです:

  • beta.kubernetes.io/arch
  • beta.kubernetes.io/instance-type
  • beta.kubernetes.io/os
  • failure-domain.beta.kubernetes.io/region
  • failure-domain.beta.kubernetes.io/zone
  • kubernetes.io/arch
  • kubernetes.io/hostname
  • kubernetes.io/os
  • node.kubernetes.io/instance-type
  • topology.kubernetes.io/region
  • topology.kubernetes.io/zone

拡張機能の確認:

az k8s-extension show \
    --name <extension-name> \
    --cluster-type managedClusters \
    --cluster-name <cluster-name> \
    --resource-group <resource-group>

provisioningStateがSucceededされていることを確認します。 数分間は Pending のままで維持できます。

拡張機能ポッドが vn-system 名前空間で実行されていることを確認します。

kubectl get pods --namespace vn-system

拡張機能を更新する

az k8s-extension update --name <extension-name> --cluster-name <aks-cluster-name> --resource-group <aks-resource-group> --cluster-type managedClusters

Note

--auto-upgrade-mode パラメーターは none、patch、compatible をサポートしています --version を使用して特定の拡張機能のバージョンを固定するには、--auto-upgrade-mode を none に設定します。

Azure Container Registry へのアクセス

非公開の Azure Container Registry (ACR) からイメージを取得するには、拡張機能のマネージド ID または Kubernetes のイメージ取得シークレットを使用します。

拡張機能のマネージド IDを使用する

拡張機能用に生成されたマネージド IDに、AcrPull のロールを付与します。 このロールにより、拡張機能の仮想ノード上で実行されるすべてのポッドは、ポッド側で追加の構成を行わなくても、レジストリからイメージをプルできるようになります。 レジストリ上でロールの割り当てを作成するには、アクセス許可が必要です。

拡張機能のマネージド ID のプリンシパル ID を取得します。

$extensionPrincipalId = az k8s-extension show --name <extension-name> --cluster-name <aks-cluster-name> --resource-group <aks-resource-group> --cluster-type managedClusters --query aksAssignedIdentity.principalId --output tsv

コンテナー レジストリのリソース ID を取得します。

$acrId = az acr show --name <acr-name> --resource-group <acr-resource-group> --query id --output tsv

レジストリ スコープで拡張機能マネージド ID に AcrPull ロールを割り当てます。

az role assignment create --assignee-object-id $extensionPrincipalId --assignee-principal-type ServicePrincipal --role AcrPull --scope $acrId

レジストリからイメージをプルするワークロードをデプロイする前に、ロールの割り当てが反映されるまで数分待ちます。

イメージのプル シークレットを使用する

手順については、ACR 認証の Kubernetes プル シークレットを参照してください。

仮想ノード v2 にワークロードをデプロイする

virtualization: virtualnode2 ノード セレクタと virtual-kubelet.io/providery 許容範囲を使用して、仮想ノード上でポッドをスケジューリングします:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: demo
spec:
  replicas: 3
  selector:
    matchLabels:
      app: demo
  template:
    metadata:
      labels:
        app: demo
    spec:
      containers:
        - name: hello
          image: mcr.microsoft.com/azuredocs/aci-helloworld
          resources:
            requests:
              cpu: 100m
              memory: 128Mi
            limits:
              cpu: "1"
              memory: 1Gi
      nodeSelector:
        virtualization: virtualnode2
        kubernetes.io/os: linux
      tolerations:
        - key: virtual-kubelet.io/provider
          operator: Exists
          effect: NoSchedule

マニフェストを demo.yamlとして保存し、それを適用します。

kubectl apply -f demo.yaml

ポッドが実行されていることを確認します。

kubectl get pods -l app=demo -o wide

仮想ノード v2 を無効にする

Warning

仮想ノード拡張機能を無効にすると、AKS クラスターはバッキング Azure Container Instances コンテナー グループから切断されます。 実行され続け、料金が発生し続ける「孤立したインスタンス」を防ぐため、拡張機能を無効にする前に、仮想ノード上で実行中のワークロードをすべて削除してください。

拡張機能を削除し、仮想ノードのリソースをクリーンアップします。

az k8s-extension delete \
    --name <extension-name> \
    --cluster-name <cluster-name> \
    --resource-group <resource-group> \
    --cluster-type managedClusters
kubectl delete node <virtual-node-name>

次のステップ