为 AKS Edge Essentials 准备嵌套虚拟化环境

本文介绍如何设置嵌套虚拟化环境以部署 Azure Kubernetes 服务 (AKS) Edge Essentials 群集。

注意

支持在 VMware ESXi 上的嵌套虚拟化环境之上部署 AKS Edge Essentials。 生产方案不支持其他嵌套虚拟化部署,并且仅限于开发人员目的。 本指南假定你使用的是 Hyper-V 虚拟机监控程序。 不支持使用非Microsoft虚拟机监控程序,例如 KVM。

先决条件

在 VMware ESXi 上的 Windows VM 上进行部署

VMware ESXi 7.08.0 版本可以在 Windows 虚拟机上托管 AKS Edge Essentials。

若要在 VMware ESXi Windows 虚拟机上设置 AKS Edge Essentials,请使用以下步骤:

  1. 在 VMware ESXi 主机上创建 Windows 虚拟机。 有关 VMware VM 部署的详细信息,请参阅 VMware - 部署虚拟机

注意

如果要创建 Windows 11 虚拟机,请确保它满足运行 Windows 11 所需的最低要求Microsoft。 有关 Windows 11 VM VMware 支持的详细信息,请参阅在 VMware 上安装 Windows 11 作为来宾 OS

  1. 关闭在上一步中创建的虚拟机。
  2. 选择 Windows 虚拟机,然后选择“编辑设置”。
  3. 搜索硬件虚拟化并打开“向来宾 OS 公开硬件辅助虚拟化”。
  4. 选择“保存”并重启虚拟机。
  5. 安装 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 地址分配的示例。 可以根据网络环境和要求使用自己的分配。 还建议虚拟机和虚拟硬件分配的命名约定,但可以使用自己的配置。

  1. 打开提升的 PowerShell 会话。

  2. 创建内部虚拟交换机:

    New-VMSwitch -Name "AKS-Int" -SwitchType Internal
    

    如果正确创建了开关,应会看到类似于以下输出的内容:

    Name    SwitchType NetAdapterInterfaceDescription
    ----    ---------- ------------------------------
    AKS-Int Internal
    
  3. 将 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
    
  4. 创建 NAT 表,用于将内部虚拟交换机和内部网络连接的设备连接到外部/Internet 网络:

     New-NetNat -Name "AKS-EE-Int-Network" -InternalIPInterfaceAddressPrefix "172.20.1.0/24"
    
  5. 使用 Hyper-V 管理器创建第一个 Windows 虚拟机并将其命名为 Windows-VM-1。 有关虚拟机创建的详细信息,请参阅 Windows Server 虚拟化。 在 VM 配置期间,请确保正确设置以下参数:

    • 处理器:虚拟处理器数:4
    • 内存:RAM:8192 MB
    • 网络适配器:虚拟交换机: AKS-Int
  6. Windows 设置和配置完成后,关闭 Windows-VM-1 虚拟机。

  7. Windows-VM-1 启用嵌套虚拟化。 有关嵌套虚拟化的详细信息,请参阅 使用嵌套虚拟化在虚拟机中运行 Hyper-V:

    Set-VMProcessor -VMName <windows-vm-name> -ExposeVirtualizationExtensions $true
    
  8. Windows-VM-1 启用 MAC 欺骗:

    Get-VMNetworkAdapter -VMName <windows-vm-name> | Set-VMNetworkAdapter -MacAddressSpoofing On
    
  9. 打开 Windows-VM-1 虚拟机并使用 Hyper-V 连接选项进行连接

  10. 在 Windows-VM-1 虚拟机中,打开提升的 PowerShell 会话。

  11. 检查连接到虚拟机的适配器。 查找连接的以太网适配器<名称>。 例如, 以太网 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 . . . . . . . . . :
    
  12. 获取具有上一步骤中名称的以太网适配器的 ifIndex

    $ifIndex = (Get-NetAdapter -Name "<name>").ifIndex
    
  13. 配置静态 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"
    
  14. 按照为 AKS Edge Essentials 过程准备计算机,设置 Windows-VM-1 虚拟机。

  15. 安装 Windows-VM-1 虚拟机的所有 AKS Edge Essentials 先决条件。 有关先决条件的详细信息,请参阅 AKS Edge Essentials 要求和支持矩阵

    Install-AksEdgeHostFeatures
    
  16. 创建 AKS Edge Essentials 全面部署配置文件。 创建 JSON 后,添加所需的参数。 请确保更改用于外部虚拟交换机创建、DNS 服务器、分配的内存和正确的静态 IP 地址的网络适配器。 有关详细信息,请参阅 AKS Edge Essentials 中的完整 Kubernetes 部署:

    New-AksEdgeConfig -NodeType Linux -DeploymentType ScalableCluster
    
  17. 使用在上一步中创建的配置 JSON 文件部署 AKS Edge Essentials 全面部署:

    New-AksEdgeDeployment -JsonConfigFilePath .\AksEdgeDeployConfigTemplate.json
    
  18. 在 AKS-Edge-VM-1 虚拟机上启用 ICMP 流量 ping:

    Invoke-AksEdgeNodeCommand -NodeType "Linux" -command "sudo iptables -A INPUT -p ICMP -j ACCEPT"
    
  19. 从 Windows-VM-1 虚拟机 Ping AKS-Edge-VM-1

    ping 172.20.1.4
    
  20. Windows 主机 OS Ping AKS-Edge-VM-1

    ping 172.20.1.4
    

    警告

    如果对 AKS-Edge-VM-1 VM 的 ping 请求失败,请查看 IP 配置并排查网络连接问题。

  21. 在 Windows-VM-1 中,获取要在 Windows-VM-2 中使用的 scaleConfig JSON 文件:

     New-AksEdgeScaleConfig -NodeType Linux -ScaleType AddMachine -LinuxNodeIp <VM2-Linux-Node-IP>
    
  22. 创建 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
  23. 测试从 Windows-VM-2AKS-Edge-VM-1 的 ping:

    ping 172.20.1.4
    

    警告

    如果对 AKS-Edge-VM-1 的 ping 请求失败,请查看 IP 配置并排查网络连接问题。

  24. 按照为 AKS Edge Essentials 过程准备计算机,设置 Windows-VM-2 虚拟机。

  25. 安装 Windows-VM-2 虚拟机的所有 AKS Edge Essentials 先决条件。 有关先决条件的详细信息,请参阅 AKS Edge Essentials 要求和支持矩阵

    Install-AksEdgeHostFeatures
    
  26. 连接到 Windows-VM-1 虚拟机并使用提升的 PowerShell 会话获取 AKS Edge 群集加入配置:

    New-AksEdgeScaleConfig -NodeType Linux -ScaleType AddMachine -LinuxNodeIp <AKS-Edge-Linux-VM-2>
    
  27. 从 Windows-VM-1 复制 AKS Edge Essentials 缩放配置文件,并使用相应的参数对其进行修改。 有关详细信息,请参阅 在多台计算机上横向扩展。

  28. 使用上一步中的缩放配置 JSON 文件在 Window-VM-2部署 AKS-Edge-VM-2

    New-AksEdgeDeployment -JsonConfigFilePath <scale-config-json>
    
  29. 验证节点是否已添加到群集。 在群集中的任何节点上,运行以下 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 中的表。

后续步骤