你当前正在访问 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 门户主页上,选择“创建资源”。
选择“网络”>“虚拟网络”。
在“基本信息”页上,选择订阅并输入以下值:
- 资源组:“新建”>
virtualnodesresourcegroup
- 虚拟网络名称:
myvirtualnetwork
- 区域:
East US
在“IP 地址”页,配置以下地址空间和子网:
- 10.0.0.0/16:
default
子网,大小 /24 - 10.1.0.0/16:
aks
子网,大小 /16 - 10.2.0.0/16:
cg
子网,大小 /16cg
子网必须具有Microsoft.ContainerInstance/containerGroups
的子网委派。- 如果虚拟节点中运行的 Pod 需要出站网络,则必须设置 NAT 网关并配置
cg
子网以使用它。 有关此设置的说明,请参阅为来自容器组的出站流量配置 NAT 网关静态 IP 地址。
将其他所有设置保留为默认设置,然后选择“查看 + 创建”。
完成验证后,将显示虚拟网络的设置摘要。 选择“创建”提交虚拟网络部署请求。
当部署启动时,会显示一个通知,指示正在进行部署。 部署了虚拟网络后,会显示另一个通知。
创建 AKS 群集
在 Azure 门户主页上,选择“创建资源”。
选择“容器”>“Azure Kubernetes 服务 (AKS)”。
在“基本信息”页上,选择用于创建虚拟网络的同一订阅,并输入以下值:
- 资源组:
virtualnodesresourcegroup
- 群集预设配置:
Dev/Test
- Kubernetes 群集名称:
virtualnodescluster
- 区域:
East US
- Kubernetes 版本:从
1.29.
开始的任何版本 - 例如,1.29.10
- 自动升级:
Enabled with patch
在“节点池”页上,为 agentpool
节点池选择至少具有 4 个 vCPU 和 16 GB RAM 的任何 VM SKU。 这些节点将用于托管虚拟节点基础结构。 请勿选择 Enable virtual nodes
- 这指的是 AKS 之前的虚拟节点产品/服务。
在“网络”页,输入以下值:
- 网络配置:
Azure CNI Node Subnet
- 自带 Azure 虚拟网络:
Enabled
- 虚拟网络:
myvirtualnetwork
- 群集子网:
aks
- Kubernetes 服务地址范围:
10.4.0.0/16
- Kubernetes DNS 服务 IP 地址:
10.4.0.10
- 网络策略:
Calico
将其他所有设置保留为默认设置,然后选择“查看 + 创建”。
完成验证后,将显示 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 容器组注入到在此资源组中创建的虚拟网络中。
使用 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
将第一个 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),我们拥有最佳做法和建议。