共用方式為


在 Azure 入口網站中建立和設定 Azure Kubernetes Service (AKS) 叢集以使用虛擬節點

虛擬節點能在於 Azure 容器執行個體 (ACI) 與 Azure Kubernetes Service (AKS) 叢集中執行的 Pod 之間啟用網路通訊。 為了提供此通訊功能,需要建立虛擬網路子網路並指派委派權限。 虛擬節點僅適用於使用「進階」網路 (Azure CNI) 建立的 AKS 叢集。 根據預設,AKS 叢集是使用「基本」網路 (kubenet) 所建立。

本文說明如何建立虛擬網路和子網路,然後使用 Azure 入口網站部署使用進階網路的 AKS 叢集。

注意

如需虛擬節點區域可用性和限制的概觀,請參閱在 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 叢集

  1. 瀏覽至 Azure 入口網站首頁。
  2. 選取 [建立資源] > [容器]。
  3. 在 [Azure Kubernetes Service (AKS)] 資源上,選取 [建立]。
  4. 在 [基本資料] 頁面上設定下列選項:
    • 專案詳細資料:選取 Azure 訂用帳戶,然後選取或建立 Azure 資源群組,例如 myResourceGroup
    • 叢集詳細資料:輸入 Kubernetes 叢集名稱,例如 myAKSCluster。 選取 AKS 叢集的區域和 Kubernetes 版本。
  5. 選取 [下一步: 節點集區],並核取 *[啟用虛擬節點]。 Screenshot that shows creating a cluster with virtual nodes enabled on the Azure portal. The option 'Enable virtual nodes' is highlighted.
  6. 選取 [檢閱 + 建立]。
  7. 驗證完成後,選取 [建立]

根據預設,此程序會建立受控叢集身分識別,用於叢集通訊與其他 Azure 服務整合。 如需詳細資訊,請參閱使用受控識別。 您也可以使用服務主體做為叢集身分識別。

此程序會將叢集設定為進階網路和虛擬節點,以使用自己的 Azure 虛擬網路子網路。 此子網路具有委派的權限,可連接 AKS 叢集之間的 Azure 資源。 如果您還沒有委派的子網路,Azure 入口網站會建立並設定 Azure 虛擬網路和子網路,以搭配虛擬節點使用。

連線至叢集

Azure Cloud Shell 是免費的互動式 Shell,可讓您用來執行本文中的步驟。 它具有預先安裝和設定的共用 Azure 工具,可與您的帳戶搭配使用。 若要管理 Kubernetes 叢集,請使用 Kubernetes 命令列用戶端:kubectlkubectl 用戶端會預先安裝在 Azure Cloud Shell 中。

  1. 使用 az aks get-credentials 命令,設定 kubectl 連線到 Kubernetes 叢集。 下列範例會針對 myResourceGroup 資源群組中的叢集名稱 myAKSCluster 取得認證:

    az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
    
  2. 使用 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
    

部署範例應用程式

  1. 在 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 會定義 nodeSelectortoleration,將允許 Pod 在虛擬節點上進行排程。 Pod 會從 Azure 虛擬網路的子網路 (為搭配使用虛擬節點而委派) 獲派內部 IP 位址。

  2. 使用 kubectl apply 命令執行應用程式。

    kubectl apply -f virtual-node.yaml
    
  3. 使用具有 -o wide 引數的 kubectl get pods 命令,檢視節點上的 Pod 排程。

    kubectl get pods -o wide
    

    下列範例輸出顯示在 virtual-node-linux 節點上的 virtual-node-helloworld Pod 排程。

    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
    

注意

如果您使用儲存在 Azure Container Registry 中的映像,請設定並使用 Kubernetes 祕密。 虛擬節點的限制是您無法使用整合式 Microsoft Entra 服務主體驗證。 如果您未使用祕密,已在虛擬節點上排程的 Pod 就無法啟動並會回報錯誤 HTTP response status code 400 error code "InaccessibleImage"

測試虛擬節點 Pod

若要測試虛擬節點上執行的 Pod,請瀏覽至搭配 Web 用戶端的示範應用程式。 Pod 會得到指派內部 IP 位址,因此您可以輕鬆從 AKS 叢集上的其他 Pod 測試此連線。

  1. 使用下列 kubectl run 命令建立測試 Pod,並將終端機工作階段與它連結。

    kubectl run -it --rm virtual-node-test --image=mcr.microsoft.com/dotnet/runtime-deps:6.0
    
  2. 使用下列 apt-get 命令,在 Pod 中安裝 curl

    apt-get update && apt-get install -y curl
    
  3. 使用下列 curl 命令存取 Pod 的位址,並提供內部 IP 位址。

    curl -L http://10.241.0.4
    

    下列簡化的範例輸出顯示示範應用程式。

    <html>
    <head>
      <title>Welcome to Azure Container Instances!</title>
    </head>
    [...]
    
  4. 使用 exit 來關閉測試 Pod 的終端機工作階段,同時將刪除 Pod。

    exit
    

下一步

在本文中,您已在虛擬節點上進行 Pod 排程,並得到指派私人的內部 IP 位址。 如果需要,您可以改為建立服務部署,並透過負載平衡器或輸入控制器將流量路由到您的 Pod。 如需詳細資訊,請參閱在 AKS 中建立基本的連入控制器

虛擬節點是 AKS 中調整解決方案的一個元件。 如需有關調整解決方案的詳細資訊,請參閱下列文章: