5.3.2. 为 Windows 容器工作负载准备 vSphere 环境

您必须通过创建 vSphere Windows VM 金级镜像并启用与 WMCO 的内部 API 服务器通信来为 Windows 容器工作负载准备 vSphere 环境。

5.3.2.1. 创建 vSphere Windows 虚拟机金级镜像

创建 vSphere Windows 虚拟机(VM)金级镜像。

先决条件

  • 您已创建了私钥/公钥对,用于在 OpenSSH 服务器中配置基于密钥的身份验证。还必须在 Windows Machine Config Operator (WMCO) 命名空间中配置私钥。这需要允许 WMCO 与 Windows 虚拟机进行通信。如需了解更多详细信息,请参阅"为 Windows Machine Config Operator 配置 secret" 部分。
注意

在创建 Windows 虚拟机的多个情形中,您必须使用 Microsoft PowerShell 命令。本指南中的 PowerShell 命令由 PS C:\> 前缀区分。

流程

  1. 使用 Windows Server Semi-Annual Channel(SAC)在 vSphere 客户端中创建一个新虚拟机:Windows Server 20H2 ISO 镜像,其中包含 Microsoft patch KB4565351。需要这个补丁来设置在 vSphere 上安装的集群所需的 VXLAN UDP 端口。如需更多信息,请参阅 VMware 文档
  2. 在 Windows 虚拟机上安装和配置 VMware Tools 版本 11.0.6 或更高版本。如需更多信息,参阅 VMware Tools 文档
  3. 在 Windows 虚拟机上安装了 VMware Tools 后,请验证以下内容:

    1. The C:\ProgramData\VMware\VMware Tools\tools.conf 文件存在,并带有以下条目:

      exclude-nics=

      如果 tools.conf 文件不存在,则使用 exclude-nics 选项取消注释并设置为空值创建该文件。

      此条目确保通过混合覆盖在 Windows 虚拟机上生成的克隆 vNIC 不被忽略。

    2. Windows 虚拟机在 vCenter 中有一个有效的 IP 地址:

      C:\> ipconfig
    3. VMTools Windows 服务正在运行:

      PS C:\> Get-Service -Name VMTools | Select Status, StartType
  4. 在 Windows 虚拟机上安装和配置 OpenSSH 服务器。如需了解更多详细信息,请参阅 Microsoft 的有关安装 OpenSSH 的文档。
  5. 为管理用户设置 SSH 访问权限。详情请参阅 Microsoft 文档的管理员用户

    重要

    指令中使用的公钥必须与稍后在 WMCO 命名空间中创建的私钥对应,后者包含您的 secret。如需了解更多详细信息,请参阅"为 Windows Machine Config Operator 配置 secret" 部分。

  6. 按照 Microsoft 文档 在 Windows 虚拟机上安装 docker 容器运行时。
  7. 您必须在 Windows 虚拟机中创建新的防火墙规则,以允许进入连接的容器日志。运行以下命令,在 TCP 端口 10250 中创建防火墙规则:

    PS C:\> New-NetFirewallRule -DisplayName "ContainerLogsPort" -LocalPort 10250 -Enabled True -Direction Inbound -Protocol TCP -Action Allow -EdgeTraversalPolicy Allow
  8. 克隆 Windows 虚拟机,使其成为可重复利用的镜像。遵循 VMware 文档来了解如何克隆现有虚拟机以了解更多详细信息。
  9. 在克隆的 Windows 虚拟机上,运行 Windows Sysprep 工具

    C:\> C:\Windows\System32\Sysprep\sysprep.exe /generalize /oobe /shutdown /unattend:<path_to_unattend.xml> 1
    1
    指定 unattend.xml 文件的路径。
    注意

    对于您可以在 Windows 镜像中运行 sysprep 命令的次数有一个限制。如需更多信息,请参阅 Microsoft 文档

    提供了 unattend.xml 示例,它维护 WMCO 所需的所有更改。您必须修改这个示例,它不能直接使用。

    例 5.1. unattend.xml 示例

    <?xml version="1.0" encoding="UTF-8"?>
    <unattend xmlns="urn:schemas-microsoft-com:unattend">
       <settings pass="specialize">
          <component xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="Microsoft-Windows-International-Core" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
             <InputLocale>0409:00000409</InputLocale>
             <SystemLocale>en-US</SystemLocale>
             <UILanguage>en-US</UILanguage>
             <UILanguageFallback>en-US</UILanguageFallback>
             <UserLocale>en-US</UserLocale>
          </component>
          <component xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="Microsoft-Windows-Security-SPP-UX" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
             <SkipAutoActivation>true</SkipAutoActivation>
          </component>
          <component xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="Microsoft-Windows-SQMApi" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
             <CEIPEnabled>0</CEIPEnabled>
          </component>
          <component xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
             <ComputerName>winhost</ComputerName> 1
          </component>
       </settings>
       <settings pass="oobeSystem">
          <component xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
             <AutoLogon>
                <Enabled>false</Enabled> 2
             </AutoLogon>
             <OOBE>
                <HideEULAPage>true</HideEULAPage>
                <HideLocalAccountScreen>true</HideLocalAccountScreen>
                <HideOEMRegistrationScreen>true</HideOEMRegistrationScreen>
                <HideOnlineAccountScreens>true</HideOnlineAccountScreens>
                <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE>
                <NetworkLocation>Work</NetworkLocation>
                <ProtectYourPC>1</ProtectYourPC>
                <SkipMachineOOBE>true</SkipMachineOOBE>
                <SkipUserOOBE>true</SkipUserOOBE>
             </OOBE>
             <RegisteredOrganization>Organization</RegisteredOrganization>
             <RegisteredOwner>Owner</RegisteredOwner>
             <DisableAutoDaylightTimeSet>false</DisableAutoDaylightTimeSet>
             <TimeZone>Eastern Standard Time</TimeZone>
             <UserAccounts>
                <AdministratorPassword>
                   <Value>MyPassword</Value> 3
                   <PlainText>true</PlainText>
                </AdministratorPassword>
             </UserAccounts>
          </component>
       </settings>
    </unattend>
    1
    指定 ComputerName,它必须遵循 Kubernetes 名称规格。这些规格也适用于在创建新虚拟机时在生成的模板中执行的 Guest OS 自定义。
    2
    禁用自动登录,以避免在启动时使用管理员特权打开终端的安全问题。这是默认值,不得更改。
    3
    MyPassword 占位符替换为 Administrator 帐户的密码。这可防止内置的 Administrator 帐户默认拥有空白密码。遵循 Microsoft 选择密码的最佳实践

    Sysprep 工具完成后,Windows 虚拟机将关闭。您不得再使用此虚拟机或打开此虚拟机。

  10. 将 Windows 虚拟机转换为 vCenter 中的模板
5.3.2.1.1. 其他资源