你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

教程:在 Azure Kubernetes 服务群集中的 Azure 容器实例上部署虚拟节点

本教程使用 Azure 门户部署 Azure Kubernetes 服务 (AKS) 群集。 部署 AKS 群集后,可以使用 Helm 图表在 Azure 容器实例上部署虚拟节点。

先决条件

本教程假定已安装以下工具:

  • Azure CLI
  • kubectl(版本 1.29+)
  • Helm
  • Git

登录 Azure

登录到 Azure 门户 (https://portal.azure.com)

如果没有 Azure 订阅,请在开始之前创建一个免费帐户

为 AKS 群集创建虚拟网络

在 Azure 门户主页上,选择“创建资源”。

显示如何开始在 Azure 门户中创建新虚拟网络的屏幕截图。

选择“网络”>“虚拟网络”。

显示如何选择要在 Azure 门户中创建的新虚拟网络的屏幕截图。

在“基本信息”页上,选择订阅并输入以下值:

  • 资源组:“新建”>virtualnodesresourcegroup
  • 虚拟网络名称:myvirtualnetwork
  • 区域:East US

显示如何在 Azure 门户中配置虚拟网络创建的“基本信息”页的屏幕截图。

在“IP 地址”页,配置以下地址空间和子网:

  • 10.0.0.0/16:default 子网,大小 /24
  • 10.1.0.0/16:aks 子网,大小 /16
  • 10.2.0.0/16:cg 子网,大小 /16

显示如何在 Azure 门户中配置虚拟网络创建的“IP 地址”页的屏幕截图。

将其他所有设置保留为默认设置,然后选择“查看 + 创建”。

完成验证后,将显示虚拟网络的设置摘要。 选择“创建”提交虚拟网络部署请求。

当部署启动时,会显示一个通知,指示正在进行部署。 部署了虚拟网络后,会显示另一个通知。

创建 AKS 群集

在 Azure 门户主页上,选择“创建资源”。

显示如何开始在 Azure 门户中创建新虚拟网络的屏幕截图。

选择“容器”>“Azure Kubernetes 服务 (AKS)”。

显示如何选择要在 Azure 门户中创建的新 AKS 群集的屏幕截图。

在“基本信息”页上,选择用于创建虚拟网络的同一订阅,并输入以下值:

  • 资源组:virtualnodesresourcegroup
  • 群集预设配置:Dev/Test
  • Kubernetes 群集名称:virtualnodescluster
  • 区域:East US
  • Kubernetes 版本:从 1.29. 开始的任何版本 - 例如,1.29.10
  • 自动升级:Enabled with patch

显示如何在 Azure 门户中配置 AKS 群集创建的“基本信息”页的屏幕截图。

在“节点池”页上,为 agentpool 节点池选择至少具有 4 个 vCPU 和 16 GB RAM 的任何 VM SKU。 这些节点将用于托管虚拟节点基础结构。 请勿选择 Enable virtual nodes - 这指的是 AKS 之前的虚拟节点产品/服务。

显示如何在 Azure 门户中配置 AKS 群集创建的“节点池”页的屏幕截图。

在“网络”页,输入以下值

  • 网络配置:Azure CNI Node Subnet
  • 自带 Azure 虚拟网络:Enabled
  • 虚拟网络:myvirtualnetwork
  • 群集子网:aks
  • Kubernetes 服务地址范围:10.4.0.0/16
  • Kubernetes DNS 服务 IP 地址:10.4.0.10
  • 网络策略:Calico

显示如何在 Azure 门户中配置 AKS 群集创建的“网络”页的屏幕截图。

将其他所有设置保留为默认设置,然后选择“查看 + 创建”。

完成验证后,将显示 AKS 群集的设置摘要。 选择“创建”提交 AKS 群集部署请求。

当部署启动时,会显示一个通知,指示正在进行部署。 部署了 AKS 群集后,会显示另一个通知。

为 AKS 群集托管身份分配权限

部署 AKS 群集时,AKS 在同一订阅中创建节点资源组来托管群集基础结构。 默认情况下,此资源组使用类似于 MC_<resource group>_<AKS cluster>_<region> 的名称。 在本教程中,节点资源组的名称应为 MC_virtualnodesresourcegroup_virtualnodescluster_eastus

在节点资源组中创建的资源之一是名称为 virtualnodescluster_agentpool 的托管标识。 转到此托管标识,然后选择“Azure 角色分配”。 然后添加以下两个角色分配:

  • 范围:Resource group
  • 订阅:<your subscription name>
  • 资源组:MC_virtualnodesresourcegroup_virtualnodescluster_eastus
  • 角色:Contributor

此角色分配允许在节点资源组中创建 ACI 容器组。

  • 范围:Resource group
  • 订阅:<your subscription name>
  • 资源组:virtualnodesresourcegroup
  • 角色:Contributor

此角色分配允许将 ACI 容器组注入到在此资源组中创建的虚拟网络中。

显示添加到 AKS 托管标识的角色分配的屏幕截图。

使用 Helm 图表在 Azure 容器实例上安装虚拟节点

使用 Azure CLI 拉取所创建的 AKS 群集的配置和凭据。 这将为 AKS 群集配置 kubectl。

az login

az account set --subscription <your subscription ID>

az aks get-credentials --name virtualnodescluster --resource-group virtualnodesresourcegroup

此外,我们将在订阅上注册 ACI 资源提供程序,以便可以部署容器组。

az provider register -n Microsoft.ContainerInstance

克隆 virtualnodesOnAzureContainerInstances GitHub 存储库。 用于在 Azure 容器实例上安装虚拟节点的 Helm 图表位于 Helm/virtualnode 文件夹中。

使用以下命令安装 Helm 图表:

helm install virtualnode <cloned repository location>\Helm\virtualnode

一分钟内就可在 AKS 群集中注册新的虚拟节点并处于“就绪”状态。 可以使用 kubectl 检查 AKS 群集节点的状态。

kubectl get nodes

显示 kubectl 获取节点命令的输出的屏幕截图,其中虚拟节点处于“就绪”状态。

将第一个 Pod 部署到虚拟节点

可以像任何其他 Kubernetes 节点一样与虚拟节点进行交互。 例如,下面的示例 YAML 将 Pod 部署到 AKS 群集中的虚拟节点上 - 请注意使用节点选择器和容忍来恰当地放置 Pod。 可以使用 kubectl 应用部署 YAML。

apiVersion: v1
kind: Pod
metadata:
  annotations:    
  name: demo-pod
spec:
  containers:
  - command:
    - /bin/bash
    - -c
    - 'counter=1; while true; do echo "Hello, World! Counter: $counter"; counter=$((counter+1)); sleep 1; done'
    image: mcr.microsoft.com/azure-cli
    name: hello-world-counter
    resources:
      limits:
        cpu: 2250m
        memory: 2256Mi
      requests:
        cpu: 100m
        memory: 128Mi
  nodeSelector:
    virtualization: virtualnode2
  tolerations:
  - effect: NoSchedule
    key: virtual-kubelet.io/provider
    operator: Exists

部署 Pod 后,可以像与“普通”Kubernetes Pod 一样与它进行交互。

例如,若要查看 Pod 状态和事件(可用于查找错误!):

kubectl describe pods demo-pod

若要查看 Pod 的日志,请执行以下操作:

kubectl logs demo-pod

若要获取 Pod 的 shell,请执行以下操作:

kubectl exec demo-pod -it -- /bin/bash

后续步骤

在本教程中,你在 Azure 门户中创建了 AKS 群集,使用 Helm 图表在 Azure 容器实例上部署了虚拟节点,并将 Pod 部署到虚拟节点上。 现在,你已基本熟悉如何在虚拟节点上运行 Kubernetes Pod,并且可以立即利用这些 Pod 上的大多数 Kubernetes 功能和构造!

如果要为 Pod 利用专用虚拟节点功能或行为,请参阅 Pod 自定义

如果要自定义虚拟节点安装,请参阅节点自定义

如果计划在虚拟节点上部署大规模工作负载(每分钟数千个 Pod),我们拥有最佳做法和建议