Virtual Nodes v2 是一個改良版的虛擬節點堆疊,透過在 Azure 容器執行個體(ACI)中以無伺服器運算方式執行 pod,將 AKS 擴展至虛擬機基礎節點之外。 工作負載能在幾秒內爆發到 ACI,無需等待新節點配置,且你只需支付在 pod 運行時使用的運算費用。 Virtual Nodes v2 是以 AKS 叢集擴充套件的形式提供。
Important
AKS 預覽功能以自助方式提供,並採選擇加入制。 預覽版本係依「現狀」及「可用情況」提供,且不適用於服務等級協定與有限保固。 客戶支援部門會盡最大努力,部分支援 AKS 預覽。 因此,這些功能不適合實際執行用途。 如需詳細資訊,請參閱下列支援文章:
支援
- 初始容器
- 宿主別名
- 容器生命週期掛鉤 (
postStart和preStop) -
kubectl exec有論證 - 持久磁碟與PVC(僅限Azure 檔案儲存體)
- VNet 對等互連
- NSG控制的出口
- NAT 閘道器用於出口
- 機密容器
- 每個虛擬節點最多可有 200 個 Pod
Limitations
不支援下列功能:
- Windows 容器
- DaemonSet
- 埠轉發
- IPv6
- API 伺服器授權的IP範圍
- Azure CNI 覆蓋層
- Cilium 或 NPM 作為網路政策
- 自帶(BYO)虛擬網路
- 每個叢集中可有多個擴充功能執行個體
- 待命集區
資源可用性與配額限制
在 Azure 容器執行個體 支援 VNet SKU 的所有 Azure 公有雲區域中,皆可使用 Virtual Nodes v2。 欲了解更多資訊,請參閱 ACI的資源可用性與配額限制。
Prerequisites
- Azure CNI in node-subnet mode
- 網路政策是用 Calico 還是不做
- 啟用工作負載身份
- 至少有一個節點池,VM 大小為 4+ vCPU 和 16+ GiB 記憶體。 每個虛擬節點在叢集中的 AKS 節點上保留約 3 顆 vCPU 和 12 GiB 記憶體,確保節點有足夠的資源。
- K8S擴充版 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 |
准入控制器 Pod 的數量。 |
podAnnotations |
作為鍵值映射,新增於基礎設施莢艙上的註解。 |
nodeSelector |
用於選取裝載基礎結構 Pod 和准入控制器 Pod 的 AKS 節點標籤。 |
tolerations |
套用於基礎架構和准入控制器 Pod 的容忍。 |
affinity |
額外的親和性設定會與必要的 AKS 親和性規則合併。 |
zones |
部署 Pod 的可用區,以分號分隔。 |
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 幾分鐘。
確認擴充功能 Pod 是否在 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 容器登錄存取
若要從私人 Azure Container Registry (ACR) 提取映像,請使用擴充功能受控識別或 Kubernetes 映像提取密碼。
使用擴充功能受控識別
將該角色授予 AcrPull 為擴充功能產生的管理身份。 此角色允許所有在擴充功能虛擬節點上運行的 pod 能夠從登錄檔拉取映像檔,無需額外配置 pod。 您必須獲得權限才能在登錄上建立角色指派。
取得擴充管理身份的主 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
在登錄範圍內將角色指派 AcrPull 給擴充管理身份:
az role assignment create --assignee-object-id $extensionPrincipalId --assignee-principal-type ServicePrincipal --role AcrPull --scope $acrId
等幾分鐘讓角色指派傳播完畢,再部署從登錄檔拉映像的工作負載。
使用圖片拉取秘密
相關說明請參見 Kubernetes Pull Secret for ACR 認證。
將工作負載部署到 Virtual Nodes v2
利用 virtualization: virtualnode2 節點選擇器和 virtual-kubelet.io/provider 容忍度在虛擬節點上排程 pod:
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 容器執行個體 容器群組的連結。 為避免孤兒實例持續執行並產生費用,請在停用擴充功能前刪除虛擬節點上正在運行的工作負載。
刪除擴充功能並清理虛擬節點資源。
az k8s-extension delete \
--name <extension-name> \
--cluster-name <cluster-name> \
--resource-group <resource-group> \
--cluster-type managedClusters
kubectl delete node <virtual-node-name>