为 AKS Edge Essentials 准备嵌套虚拟化环境
本文介绍如何设置嵌套虚拟化环境以部署 Azure Kubernetes 服务 (AKS) Edge Essentials 群集。
注意
支持在 VMware ESXi 上的嵌套虚拟化环境之上部署 AKS Edge Essentials。 生产方案不支持其他嵌套虚拟化部署,并且仅限于开发人员目的。 本指南假定你使用的是 Hyper-V 虚拟机监控程序。 不支持使用非Microsoft虚拟机监控程序,例如 KVM。
先决条件
- 请参阅系统要求。
- OS 要求:在计算机上安装 Windows 10/11 IoT 企业版/企业版/专业版并激活 Windows。 建议使用最新的客户端版本 22H2(OS 内部版本 19045)或 Server 2022(OS 内部版本 20348)。 可以 在此处 下载 Windows 10 版本或 此处的 Windows 11。
在 VMware ESXi 上的 Windows VM 上进行部署
VMware ESXi 7.0 和 8.0 版本可以在 Windows 虚拟机上托管 AKS Edge Essentials。
若要在 VMware ESXi Windows 虚拟机上设置 AKS Edge Essentials,请使用以下步骤:
- 在 VMware ESXi 主机上创建 Windows 虚拟机。 有关 VMware VM 部署的详细信息,请参阅 VMware - 部署虚拟机。
注意
如果要创建 Windows 11 虚拟机,请确保它满足运行 Windows 11 所需的最低要求Microsoft。 有关 Windows 11 VM VMware 支持的详细信息,请参阅在 VMware 上安装 Windows 11 作为来宾 OS。
- 关闭在上一步中创建的虚拟机。
- 选择 Windows 虚拟机,然后选择“编辑设置”。
- 搜索硬件虚拟化并打开“向来宾 OS 公开硬件辅助虚拟化”。
- 选择“保存”并重启虚拟机。
- 安装 Hyper-V 虚拟机监控程序。 如果使用 Windows 客户端,请确保在 Windows 10 上安装 Hyper-V。 如果使用的是 Windows Server,请确保安装 Hyper-V 角色。
在 Azure 虚拟机上进行部署
如果在 Azure VM 上运行 AKS Edge Essentials,请确保使用支持嵌套虚拟化的 Azure 计算单元(ACU)。 有关详细信息,请参阅 Azure 计算单元(ACU)。 此外,Azure VM 不支持使用外部虚拟交换机,因此,VM 主机 OS 上的 AKS Edge Essentials 部署仅限于单机群集。
部署环境
本部分介绍嵌套体系结构,重点介绍所需的主要组件和配置。 本文后面介绍的虚拟化级别如下:
- L0 主机 OS:Windows 主机操作系统。 此 OS 可以裸机运行,也可以作为虚拟机运行,但在本文中, L0 主机 OS 是创建嵌套 Windows L1 VM 的 OS 。
- L1 虚拟机:在 L0 Windows 主机 OS 上运行的 Windows VM。 此 VM 安装了 AKS Edge Essentials。
- L2 虚拟机:在 L1 Windows 虚拟机上运行的 AKS Edge Essentials 嵌套 VM(Linux 或 Windows)。
可以使用内部或外部虚拟交换机设置嵌套环境。 但是,本文假定你使用的是内部虚拟交换机。 L0 Windows 计算机和 L1/L2 虚拟机的 IP 地址可能会根据网络方案而更改。 本文假定你使用的是 172.20.1.0/24 IP 地址系列。
此外,部署 AKS Edge Essentials Windows 节点是可选的,会影响分配的内存要求。 本文介绍仅限 Linux 的部署,但可以通过将适当的配置添加到部署 JSON 文件来添加 Windows 节点。
提示
如果使用外部虚拟交换机进行部署,请确保使用正确的网络适配器和 IP 地址分配。
上图显示了此嵌套体系结构的不同虚拟机和组件。
设备/VM | 操作系统 | Level | Parent | 内存 | IP 地址 |
---|---|---|---|---|---|
Windows 主机 OS | Windows | L0 | - | 32/64 GB | 172.20.1.1 |
Windows-VM-1 | Windows | L1 | Windows 主机 OS | 8/16 GB | 172.20.1.2 |
Windows-VM-2 | Windows | L1 | Windows 主机 OS | 8/16 GB | 172.20.1.3 |
AKS-Edge-Linux-VM-1 | CBL-Mariner | L2 | Windows-VM-1 | 4 GB | 172.20.1.4 |
AKS-Edge-Windows-VM-1 (可选) | Windows | L2 | Windows-VM-1 | 4 GB | 172.20.1.5 |
AKS-Edge-Linux-VM-2 | CBL-Mariner | L2 | Windows-VM-2 | 4 GB | 172.20.1.6 |
AKS-Edge-Windows-VM-2 (可选) | Windows | L2 | Windows-VM-2 | 4 GB | 172.20.1.7 |
设置嵌套虚拟机
以下指南是 IP 地址分配的示例。 可以根据网络环境和要求使用自己的分配。 还建议虚拟机和虚拟硬件分配的命名约定,但可以使用自己的配置。
打开提升的 PowerShell 会话。
创建内部虚拟交换机:
New-VMSwitch -Name "AKS-Int" -SwitchType Internal
如果正确创建了开关,应会看到类似于以下输出的内容:
Name SwitchType NetAdapterInterfaceDescription ---- ---------- ------------------------------ AKS-Int Internal
将 IP 地址分配给 AKS-Int 虚拟交换机。 此示例使用 172.20.1.0/24 网络。 Windows 主机 OS 使用此虚拟交换机 IP 地址与其他虚拟机和 AKS Edge Essentials 节点通信:
$ifIndex = (Get-NetAdapter -Name "vEthernet (AKS-Int)").ifIndex New-NetIPAddress –IPAddress "172.20.1.1" -PrefixLength "24" -InterfaceIndex $ifIndex
创建 NAT 表,用于将内部虚拟交换机和内部网络连接的设备连接到外部/Internet 网络:
New-NetNat -Name "AKS-EE-Int-Network" -InternalIPInterfaceAddressPrefix "172.20.1.0/24"
使用 Hyper-V 管理器创建第一个 Windows 虚拟机并将其命名为 Windows-VM-1。 有关虚拟机创建的详细信息,请参阅 Windows Server 虚拟化。 在 VM 配置期间,请确保正确设置以下参数:
- 处理器:虚拟处理器数:4
- 内存:RAM:8192 MB
- 网络适配器:虚拟交换机: AKS-Int
Windows 设置和配置完成后,关闭 Windows-VM-1 虚拟机。
为 Windows-VM-1 启用嵌套虚拟化。 有关嵌套虚拟化的详细信息,请参阅 使用嵌套虚拟化在虚拟机中运行 Hyper-V:
Set-VMProcessor -VMName <windows-vm-name> -ExposeVirtualizationExtensions $true
为 Windows-VM-1 启用 MAC 欺骗:
Get-VMNetworkAdapter -VMName <windows-vm-name> | Set-VMNetworkAdapter -MacAddressSpoofing On
打开 Windows-VM-1 虚拟机并使用 Hyper-V 连接选项进行连接 。
在 Windows-VM-1 虚拟机中,打开提升的 PowerShell 会话。
检查连接到虚拟机的适配器。 查找连接的以太网适配器<名称>。 例如, 以太网 2:
ipconfig
应会看到类似于下面的信息:
PS C:\Windows\system32> ipconfig Windows IP Configuration Ethernet adapter Ethernet 2: Connection-specific DNS Suffix . : mshome.net Link-local IPv6 Address . . . . . : fe80::f4b3:63b3:20d0:2e60%12 Autoconfiguration IPv4 Address. . : 169.254.233.233 Subnet Mask . . . . . . . . . . . : 255.255.0.0 Default Gateway . . . . . . . . . : Ethernet adapter vEthernet (Default Switch): Connection-specific DNS Suffix . : Link-local IPv6 Address . . . . . : fe80::545e:7d5:812b:c17b%18 IPv4 Address. . . . . . . . . . . : 172.21.144.1 Subnet Mask . . . . . . . . . . . : 255.255.240.0 Default Gateway . . . . . . . . . :
获取具有上一步骤中名称的以太网适配器的 ifIndex:
$ifIndex = (Get-NetAdapter -Name "<name>").ifIndex
配置静态 IP 172.20.1.2 和网关 IP 172.20.1.1 和 DNS 服务器 172.20.1.1:
提示
如果使用 Azure VM,请使用 Windows 主机 OS (L0) DNS 服务器。
ipconfig /all
使用命令获取 DNS 服务器地址。 检查是否能够使用 Web 浏览器获取 Internet 访问权限。 如果没有访问权限,请检查 DNS 服务器是否已正确配置:New-NetIPAddress –IPAddress "172.20.1.2" -DefaultGateway "172.20.1.1" -PrefixLength "24" -InterfaceIndex $ifIndex Set-DNSClientServerAddress –InterfaceIndex $ifIndex –ServerAddresses "172.20.1.1"
按照为 AKS Edge Essentials 过程准备计算机,设置 Windows-VM-1 虚拟机。
安装 Windows-VM-1 虚拟机的所有 AKS Edge Essentials 先决条件。 有关先决条件的详细信息,请参阅 AKS Edge Essentials 要求和支持矩阵:
Install-AksEdgeHostFeatures
创建 AKS Edge Essentials 全面部署配置文件。 创建 JSON 后,添加所需的参数。 请确保更改用于外部虚拟交换机创建、DNS 服务器、分配的内存和正确的静态 IP 地址的网络适配器。 有关详细信息,请参阅 AKS Edge Essentials 中的完整 Kubernetes 部署:
New-AksEdgeConfig -NodeType Linux -DeploymentType ScalableCluster
使用在上一步中创建的配置 JSON 文件部署 AKS Edge Essentials 全面部署:
New-AksEdgeDeployment -JsonConfigFilePath .\AksEdgeDeployConfigTemplate.json
在 AKS-Edge-VM-1 虚拟机上启用 ICMP 流量 ping:
Invoke-AksEdgeNodeCommand -NodeType "Linux" -command "sudo iptables -A INPUT -p ICMP -j ACCEPT"
从 Windows-VM-1 虚拟机 Ping AKS-Edge-VM-1:
ping 172.20.1.4
从 Windows 主机 OS Ping AKS-Edge-VM-1:
ping 172.20.1.4
警告
如果对 AKS-Edge-VM-1 VM 的 ping 请求失败,请查看 IP 配置并排查网络连接问题。
在 Windows-VM-1 中,获取要在 Windows-VM-2 中使用的 scaleConfig JSON 文件:
New-AksEdgeScaleConfig -NodeType Linux -ScaleType AddMachine -LinuxNodeIp <VM2-Linux-Node-IP>
创建 Windows-VM-2 虚拟机。 使用新的 Windows-VM-2 参数重复步骤 4 到 14:
- 虚拟机名称: Windows-VM-2
- IP 地址: 172.20.1.3
- 处理器:虚拟处理器数: 4
- 内存: 8192 MB
- 网络适配器(虚拟交换机): AKS-Int
- IP 网关地址: 172.20.1.1
- DNS 服务器地址: 172.20.1.1
测试从 Windows-VM-2 到 AKS-Edge-VM-1 的 ping:
ping 172.20.1.4
警告
如果对 AKS-Edge-VM-1 的 ping 请求失败,请查看 IP 配置并排查网络连接问题。
按照为 AKS Edge Essentials 过程准备计算机,设置 Windows-VM-2 虚拟机。
安装 Windows-VM-2 虚拟机的所有 AKS Edge Essentials 先决条件。 有关先决条件的详细信息,请参阅 AKS Edge Essentials 要求和支持矩阵:
Install-AksEdgeHostFeatures
连接到 Windows-VM-1 虚拟机并使用提升的 PowerShell 会话获取 AKS Edge 群集加入配置:
New-AksEdgeScaleConfig -NodeType Linux -ScaleType AddMachine -LinuxNodeIp <AKS-Edge-Linux-VM-2>
从 Windows-VM-1 复制 AKS Edge Essentials 缩放配置文件,并使用相应的参数对其进行修改。 有关详细信息,请参阅 在多台计算机上横向扩展。
使用上一步中的缩放配置 JSON 文件在 Window-VM-2 上部署 AKS-Edge-VM-2:
New-AksEdgeDeployment -JsonConfigFilePath <scale-config-json>
验证节点是否已添加到群集。 在群集中的任何节点上,运行以下 cmdlet:
kubectl get nodes
如果所有内容都已正确设置,则应看到两个 Linux 节点都在群集中运行:
PS C:\> kubectl get nodes NAME STATUS ROLES AGE VERSION windows-vm1-ledge Ready control-plane,etcd,master 3m45s v1.24.3+k3s- windows-vm2-ledge Ready control-plane,etcd,master 10m25s v1.24.3+k3s-
注意
有关 K3s 和 K8 上当前支持的 Kubernetes 版本的列表,请参阅下载 AKS Edge Essentials 中的表。