虛擬節點 v2 是改良的虛擬節點堆疊,其藉由在 Azure 容器執行個體(ACI) 中的無伺服器計算上執行 Pod,將 AKS 延伸至以 VM 為基礎的節點之外。 工作負載會在幾秒內爆量至 ACI,無須等待新節點佈建完成,而且您只需為 Pod 執行期間所使用的計算付費。 Virtual Nodes v2 是以 AKS 叢集擴充套件的形式提供。
Important
AKS 預覽功能以自助方式提供,並採選擇加入制。 預覽版本係依「現狀」及「可用情況」提供,且不適用於服務等級協定與有限保固。 客戶支援部門會盡最大努力,部分支援 AKS 預覽。 因此,這些功能不適合實際執行用途。 如需詳細資訊,請參閱下列支援文章:
支援
- 初始容器
- 主機別名
- 容器生命週期掛鉤 (
postStart和preStop) -
kubectl exec搭配引數 - 永續性磁碟區和 PVC (僅限 Azure 檔案儲存體)
- VNet 對等互連
- 受 NSG 控制的輸出
- 用於輸出的 NAT 閘道器
- 機密容器
- 每個虛擬節點最多可有 200 個 Pod
Limitations
不支援下列功能:
- Windows 容器
- DaemonSets
- 埠轉發
- IPv6
- API 伺服器授權的IP範圍
- Azure CNI 覆蓋層
- Cilium 或 NPM 作為網路原則
- 自備 (BYO) 虛擬網路
- 每個叢集中可有多個擴充功能執行個體
- 待命集區
資源可用性和配額限制
虛擬節點 v2 已在所有 Azure 公用雲端區域中推出,只要 Azure 容器執行個體支援 VNet SKU 即可使用。 如需詳細資訊,請參閱ACI 的資源可用性&與配額限制。
Prerequisites
- 節點子網路模式中的 Azure CNI
- Calico 或無作為網路原則
- 工作負載身分識別已啟用
- 至少一個節點集區,其 VM 大小為 4+ 個 vCPUs 和 16+ GiB 的記憶體。 每個虛擬節點會在叢集中的 AKS 節點上保留約 3 個 vCPUs 和 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 |
准入控制器 Pod 的數目。 |
podAnnotations |
以索引鍵-值對應形式新增至基礎結構 Pod 的註解。 |
nodeSelector |
用來選取託管基礎結構和准入控制器 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 Container Registry 存取
若要從私人的 Azure Container Registry (ACR) 提取映像,請使用擴充功能的受控識別或 Kubernetes 映像提取祕密。
使用擴充功能受控身分識別
將AcrPull角色授與為擴充功能產生的受控身分識別。 此角色會授與在擴充功能虛擬節點上執行的所有 Pod 存取權,使其無須額外的 Pod 設定,即可從登錄提取映像。 您必須具備在登錄上建立角色指派的權限。
取得擴充功能受控身分識別的主體識別碼:
$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
取得容器登錄的資源識別碼:
$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 認證。
將工作負載部署至虛擬節點 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
確認 Pod 正在執行。
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>