仮想ノード 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 以上
-
kubectl1.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/archbeta.kubernetes.io/instance-typebeta.kubernetes.io/osfailure-domain.beta.kubernetes.io/regionfailure-domain.beta.kubernetes.io/zonekubernetes.io/archkubernetes.io/hostnamekubernetes.io/osnode.kubernetes.io/instance-typetopology.kubernetes.io/regiontopology.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>