5.3. vSphere에서 Windows 머신 세트 생성

VMware vSphere의 OpenShift Container Platform 클러스터에서 특정 목적을 수행하기 위해 Windows MachineSet 오브젝트를 생성할 수 있습니다. 예를 들어, 지원되는 워크로드를 새 Windows 머신으로 이동할 수 있도록 인프라 Windows MachineSet 및 관련 머신을 생성할 수 있습니다.

사전 요구 사항

  • OLM(Operator Lifecycle Manager)을 사용하여 WMCO(Windows Machine Config Operator)를 설치했습니다.
  • 지원되는 Windows Server를 운영 체제 이미지로 사용하고 있습니다.

5.3.1. Machine API 개요

Machine API는 업스트림 Cluster API 프로젝트 및 사용자 정의 OpenShift Container Platform 리소스를 기반으로 하는 주요 리소스의 조합입니다.

OpenShift Container Platform 4.12 클러스터의 경우 Machine API는 클러스터 설치가 완료된 후 모든 노드 호스트 프로비저닝 관리 작업을 수행합니다. 이 시스템으로 인해 OpenShift Container Platform 4.12는 퍼블릭 또는 프라이빗 클라우드 인프라에 더하여 탄력적이고 동적인 프로비저닝 방법을 제공합니다.

두 가지 주요 리소스는 다음과 같습니다.

Machine
노드의 호스트를 설명하는 기본 단위입니다. 머신에는 providerSpec 사양이 있으며 이는 다른 클라우드 플랫폼에 제공되는 컴퓨팅 노드 유형을 설명합니다. 예를 들어 컴퓨팅 노드의 머신 유형은 특정 시스템 유형과 필수 메타데이터를 정의할 수 있습니다.
머신 세트

MachineSet 리소스는 컴퓨팅 머신 그룹입니다. 컴퓨팅 머신 세트는 컴퓨팅 머신에 연관되어 있고 복제본 세트는 pod에 연관되어 있습니다. 더 많은 컴퓨팅 머신이 필요하거나 확장해야 하는 경우 컴퓨팅 요구 사항에 맞게 MachineSet 리소스의 replicas 필드를 변경합니다.

주의

컨트롤 플레인 시스템은 컴퓨팅 머신 세트로 관리할 수 없습니다.

컨트롤 플레인 머신 세트는 컴퓨팅 머신에 제공하는 컴퓨팅 머신 세트와 유사한 지원되는 컨트롤 플레인 시스템에 대한 관리 기능을 제공합니다.

자세한 내용은 "컨트롤 플레인 머신 관리"를 참조하십시오.

다음 사용자 지정 리소스는 클러스터에 더 많은 기능을 추가할 수 있습니다.

머신 자동 스케일러

MachineAutoscaler 리소스는 클라우드에서 컴퓨팅 머신을 자동으로 확장합니다. 지정된 컴퓨팅 머신 세트에서 노드의 최소 및 최대 스케일링 경계를 설정할 수 있으며 머신 자동 스케일러는 해당 노드 범위를 유지합니다.

MachineAutoscaler 객체는 ClusterAutoscaler 객체를 설정한 후에 사용할 수 있습니다. ClusterAutoscalerMachineAutoscaler리소스는 모두 ClusterAutoscalerOperator 오브젝트에서 사용 가능합니다.

Cluster autoscaler

이 리소스는 업스트림 클러스터 자동 스케일러 프로젝트를 기반으로 합니다. OpenShift Container Platform 구현에서는 컴퓨팅 머신 세트 API를 확장하여 Machine API와 통합됩니다. 클러스터 자동 스케일러를 사용하여 다음과 같은 방법으로 클러스터를 관리할 수 있습니다.

  • 코어, 노드, 메모리, GPU와 같은 리소스에 대한 클러스터 전체 스케일링 제한을 설정합니다.
  • 중요도가 낮은 Pod에 대해 클러스터가 Pod 및 새 노드가 온라인 상태가 되지 않도록 우선 순위를 설정합니다.
  • 노드를 확장할 수는 있지만 축소할 수 없도록 스케일링 정책을 설정합니다.
머신 상태 점검
MachineHealthCheck 리소스는 머신의 비정상적인 상태를 감지하여 삭제한 후 지원되는 플랫폼에서 새 머신을 생성합니다.

OpenShift Container Platform 버전 3.11에서는 클러스터가 머신 프로비저닝을 관리하지 않았기 때문에 다중 영역 아키텍처를 쉽게 롤아웃할 수 없었습니다. OpenShift Container Platform 버전 4.1부터 이러한 프로세스가 더 쉬워졌습니다. 각 컴퓨팅 머신 세트의 범위는 단일 영역으로 지정되므로 설치 프로그램은 사용자를 대신하여 가용성 영역 전체에 컴퓨팅 머신 세트를 보냅니다. 또한 계산이 동적이고 영역 장애가 발생하여 머신을 재조정해야하는 경우 처리할 수 있는 영역을 확보할 수 있습니다. 여러 가용성 영역이 없는 글로벌 Azure 리전에서는 가용성 세트를 사용하여 고가용성을 보장할 수 있습니다. Autoscaler는 클러스터의 수명 기간 동안 최적의 균형을 유지합니다.

5.3.2. Windows 컨테이너 워크로드를 위한 vSphere 환경 준비

vSphere Windows VM✓ 이미지를 생성하고 WMCO의 내부 API 서버와의 통신을 활성화하여 Windows 컨테이너 워크로드를 위한 vSphere 환경을 준비해야 합니다.

5.3.2.1. vSphere Windows VM 골든 이미지 생성

vSphere Windows VM(가상 머신) 골든 이미지를 생성합니다.

사전 요구 사항

  • OpenSSH 서버에서 키 기반 인증을 구성하는 데 사용되는 개인/공개 키 쌍을 생성했습니다. 개인 키는 WMCO(Windows Machine Config Operator) 네임스페이스에서도 구성해야 합니다. 이는 WMCO가 Windows VM과 통신할 수 있도록 하려면 필요합니다. 자세한 내용은 "Windows Machine Config Operator의 시크릿 구성" 섹션을 참조하십시오.
참고

Windows VM을 만들 때 여러 경우에서 Microsoft PowerShell 명령을 사용해야 합니다. 이 가이드의 PowerShell 명령은 PS C:\> 접두사로 구분됩니다.

절차

  1. 호환되는 Windows Server 버전을 선택합니다. 현재 WMCO(Windows Machine Config Operator) stable 버전은 OS 수준 컨테이너 네트워킹 패치 KB5012637 과 함께 Windows Server 2022 Long-Term Servicing Channel을 지원합니다.
  2. VM 골든 이미지를 호환되는 Windows Server 버전과 함께 사용하여 vSphere 클라이언트에 새 VM을 생성합니다. 호환 버전에 대한 자세한 내용은 "Windows Machine Config Operator 릴리스 노트에 대한 Red Hat OpenShift 지원" 섹션의 "Windows Machine Config Operator 사전 요구 사항" 섹션을 참조하십시오.

    중요

    VM의 가상 하드웨어 버전은 OpenShift Container Platform의 인프라 요구 사항을 충족해야 합니다. 자세한 내용은 OpenShift Container Platform 설명서의 "VMware vSphere 인프라 요구 사항" 섹션을 참조하십시오. 또한 가상 시스템 하드웨어 버전에 대한 VMware 설명서를 참조할 수 있습니다.

  3. Windows VM에서 VMware Tools 버전 11.0.6 이상을 설치 및 구성합니다. 자세한 내용은 VMware Tools 설명서를 참조하십시오.
  4. Windows VM에 VMware Tools를 설치한 후 다음을 확인합니다.

    1. C:\programData\VMware\VMware Tools\tools.conf 파일은 다음 항목과 함께 있습니다.

      exclude-nics=

      tools.conf 파일이 없는 경우 exclude-nics 옵션을 사용하여 주석을 삭제하고 빈 값으로 설정합니다.

      이 항목은 hybrid-overlay에 의해 Windows VM에서 생성된 복제된 vNIC가 무시되지 않습니다.

    2. Windows VM의 vCenter에 유효한 IP 주소가 있습니다.

      C:\> ipconfig
    3. VMTools Windows 서비스가 실행 중입니다.

      PS C:\> Get-Service -Name VMTools | Select Status, StartType
  5. Windows VM에 OpenSSH Server를 설치하고 구성합니다. 자세한 내용은 OpenSSH 설치에 대한 Microsoft 문서를 참조하십시오.
  6. 관리자를 위한 SSH 액세스를 설정합니다. 이 작업을 수행하려면 관리 사용자에 대한 Microsoft 문서를 참조하십시오.

    중요

    명령에 사용된 공개 키는 시크릿을 보유하는 WMCO 네임스페이스에서 나중에 생성하는 개인 키에 대응해야 합니다. 자세한 내용은 "Windows Machine Config Operator의 시크릿 구성" 섹션을 참조하십시오.

  7. 컨테이너 로그에 대해 들어오는 연결을 허용하는 Windows VM에서 새 방화벽 규칙을 생성해야 합니다. 다음 PowerShell 명령을 실행하여 TCP 포트 10250에서 방화벽 규칙을 생성합니다.

    PS C:\> New-NetFirewallRule -DisplayName "ContainerLogsPort" -LocalPort 10250 -Enabled True -Direction Inbound -Protocol TCP -Action Allow -EdgeTraversalPolicy Allow
  8. 재사용 가능한 이미지가 되도록 Windows VM을 복제합니다. 자세한 내용은 기존 가상 시스템을 복제하는 방법에 대한 VMware 문서를 따르십시오.
  9. 복제된 Windows VM에서 Windows Sysprep 도구를 실행합니다.

    C:\> C:\Windows\System32\Sysprep\sysprep.exe /generalize /oobe /shutdown /unattend:<path_to_unattend.xml> 1
    1
    unattend.xml 파일의 경로를 지정합니다.
    참고

    Windows 이미지에서 sysprep 명령을 실행할 수 있는 횟수에는 제한이 있습니다. 자세한 내용은 Microsoft 설명서를 참조하십시오.

    WMCO에 필요한 모든 변경 사항을 유지관리하는 unattend.xml 예시가 제공됩니다. 이 예제를 수정해야 합니다. 직접 사용할 수 없습니다.

    예 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
    Kubernetes의 이름 사양을 따라야 하는 ComputerName 지정합니다. 이러한 사양은 새 VM을 생성하는 동안 결과 템플릿에서 수행된 게스트 OS 사용자 지정에도 적용됩니다.
    2
    부팅 시 Administrator 권한이 있는 열린 터미널을 종료하지 않도록 자동 로그온을 비활성화하십시오. 이는 기본값이며 변경할 수 없습니다.
    3
    MyPassword 자리 표시자를 Administrator 계정의 암호로 바꿉니다. 이렇게 하면 기본적으로 기본 제공 Administrator 계정이 비어 있는 암호를 보유할 수 없습니다. 암호 선택을 위한 Microsoft의 모범 사례를 따르십시오.

    Sysprep 툴이 완료되면 Windows VM의 전원이 꺼집니다. 이 VM에서 더 이상 사용하거나 전원을 켜서는 안 됩니다.

  10. Windows VM을 vCenter의 템플릿으로 변환합니다.
5.3.2.1.1. 추가 리소스

5.3.2.2. vSphere에서 WMCO를 위한 내부 API 서버와의 통신 활성화

WMCO(Windows Machine Config Operator)는 내부 API 서버 끝점에서 Ignition 구성 파일을 다운로드합니다. Windows 가상 머신(VM)이 Ignition 구성 파일을 다운로드할 수 있고 구성된 VM의 kubelet이 내부 API 서버와 통신할 수 있도록 내부 API 서버와의 통신을 활성화해야 합니다.

사전 요구 사항

  • vSphere에 클러스터가 설치되어 있습니다.

절차

  • 외부 API 서버 URL api.<cluster_name>.<base_domain>을 가리키는 api-int.<cluster_name>.<base_domain>에 새로운 DNS 항목을 추가합니다. 이 항목은 CNAME 또는 추가 A 레코드일 수 있습니다.
참고

외부 API 끝점이 이미 vSphere의 초기 클러스터 설치의 일부로 생성되었습니다.

5.3.3. vSphere에서 Windows MachineSet 오브젝트를 위한 샘플 YAML

이 샘플 YAML은 VMware vSphere에서 WMCO(Windows Machine Config Operator)가 응답할 수 있는 Windows MachineSet 오브젝트를 정의합니다.

apiVersion: machine.openshift.io/v1beta1
kind: MachineSet
metadata:
  labels:
    machine.openshift.io/cluster-api-cluster: <infrastructure_id> 1
  name: <windows_machine_set_name> 2
  namespace: openshift-machine-api
spec:
  replicas: 1
  selector:
    matchLabels:
      machine.openshift.io/cluster-api-cluster: <infrastructure_id> 3
      machine.openshift.io/cluster-api-machineset: <windows_machine_set_name> 4
  template:
    metadata:
      labels:
        machine.openshift.io/cluster-api-cluster: <infrastructure_id> 5
        machine.openshift.io/cluster-api-machine-role: worker
        machine.openshift.io/cluster-api-machine-type: worker
        machine.openshift.io/cluster-api-machineset: <windows_machine_set_name> 6
        machine.openshift.io/os-id: Windows 7
    spec:
      metadata:
        labels:
          node-role.kubernetes.io/worker: "" 8
      providerSpec:
        value:
          apiVersion: vsphereprovider.openshift.io/v1beta1
          credentialsSecret:
            name: vsphere-cloud-credentials
          diskGiB: 128 9
          kind: VSphereMachineProviderSpec
          memoryMiB: 16384
          network:
            devices:
            - networkName: "<vm_network_name>" 10
          numCPUs: 4
          numCoresPerSocket: 1
          snapshot: ""
          template: <windows_vm_template_name> 11
          userDataSecret:
            name: windows-user-data 12
          workspace:
             datacenter: <vcenter_datacenter_name> 13
             datastore: <vcenter_datastore_name> 14
             folder: <vcenter_vm_folder_path> 15
             resourcePool: <vsphere_resource_pool> 16
             server: <vcenter_server_ip> 17
1 3 5
클러스터를 프로비저닝할 때 설정한 클러스터 ID를 기반으로 하는 인프라 ID를 지정합니다. 다음 명령을 실행하여 인프라 ID를 가져올 수 있습니다.
$ oc get -o jsonpath='{.status.infrastructureName}{"\n"}' infrastructure cluster
2 4 6
Windows 컴퓨팅 머신 세트 이름을 지정합니다. 컴퓨팅 머신 세트 이름은 vSphere에서 머신 이름이 생성되는 방식으로 인해 9자를 초과할 수 없습니다.
7
컴퓨팅 머신 세트를 Windows 머신으로 구성합니다.
8
Windows 노드를 컴퓨팅 머신으로 구성합니다.
9
vSphere VMI(가상 머신 디스크)의 크기를 지정합니다.
참고

이 매개변수는 Windows 파티션의 크기를 설정하지 않습니다. unattend.xml 파일을 사용하거나 필요한 디스크 크기와 함께 vSphere Windows VM(가상 머신) 골든 이미지를 생성하여 Windows 파티션의 크기를 조정할 수 있습니다.

10
컴퓨팅 머신 세트를 배포할 vSphere VM 네트워크를 지정합니다. 이 VM 네트워크는 다른 Linux 컴퓨팅 시스템이 클러스터에 있는 위치여야 합니다.
11
golden-images/windows-server-template 과 같이 사용할 Windows vSphere VM 템플릿의 전체 경로를 지정합니다. 이름은 고유해야 합니다.
중요

원래 VM 템플릿을 지정하지 마십시오. VM 템플릿은 꺼져 있어야 하며 새 Windows 머신에 대해 복제해야 합니다. VM 템플릿을 시작하면 VM 템플릿이 플랫폼의 VM으로 구성되므로 컴퓨팅 머신 세트에서 구성을 적용할 수 있는 템플릿으로 사용되지 않습니다.

12
Windows-user-data는 첫 번째 Windows 머신이 구성될 때 WMCO에 의해 생성됩니다. 그 후 모든 후속 컴퓨팅 머신 세트에 대해 windows-user-data 를 사용할 수 있습니다.
13
컴퓨팅 머신 세트를 배포할 vCenter Datacenter를 지정합니다.
14
컴퓨팅 머신 세트를 배포할 vCenter Datastore를 지정합니다.
15
vCenter의 vSphere VM 폴더에 경로(예: /dc1/vm/user-inst-5ddjd)를 지정합니다.
16
선택 사항: Windows VM을 위한 vSphere 리소스 풀을 지정합니다.
17
vCenter 서버 IP 또는 정규화된 도메인 이름을 지정합니다.

5.3.4. 컴퓨팅 머신 세트 생성

설치 프로그램에서 생성한 컴퓨팅 머신 세트 외에도 고유한 머신 세트를 생성하여 선택한 특정 워크로드의 머신 컴퓨팅 리소스를 동적으로 관리할 수 있습니다.

사전 요구 사항

  • OpenShift Container Platform 클러스터를 배포합니다.
  • OpenShift CLI(oc)를 설치합니다.
  • cluster-admin 권한이 있는 사용자로 oc에 로그인합니다.

절차

  1. 컴퓨팅 머신 세트 CR(사용자 정의 리소스) 샘플이 포함된 새 YAML 파일을 만들고 < file_name>.yaml 이라는 이름을 지정합니다.

    <clusterID><role> 매개 변수 값을 설정해야 합니다.

  2. 선택 사항: 특정 필드에 설정할 값이 확실하지 않은 경우 클러스터에서 기존 컴퓨팅 머신 세트를 확인할 수 있습니다.

    1. 클러스터의 컴퓨팅 머신 세트를 나열하려면 다음 명령을 실행합니다.

      $ oc get machinesets -n openshift-machine-api

      출력 예

      NAME                                DESIRED   CURRENT   READY   AVAILABLE   AGE
      agl030519-vplxk-worker-us-east-1a   1         1         1       1           55m
      agl030519-vplxk-worker-us-east-1b   1         1         1       1           55m
      agl030519-vplxk-worker-us-east-1c   1         1         1       1           55m
      agl030519-vplxk-worker-us-east-1d   0         0                             55m
      agl030519-vplxk-worker-us-east-1e   0         0                             55m
      agl030519-vplxk-worker-us-east-1f   0         0                             55m

    2. 특정 컴퓨팅 머신 세트 CR(사용자 정의 리소스)의 값을 보려면 다음 명령을 실행합니다.

      $ oc get machineset <machineset_name> \
        -n openshift-machine-api -o yaml

      출력 예

      apiVersion: machine.openshift.io/v1beta1
      kind: MachineSet
      metadata:
        labels:
          machine.openshift.io/cluster-api-cluster: <infrastructure_id> 1
        name: <infrastructure_id>-<role> 2
        namespace: openshift-machine-api
      spec:
        replicas: 1
        selector:
          matchLabels:
            machine.openshift.io/cluster-api-cluster: <infrastructure_id>
            machine.openshift.io/cluster-api-machineset: <infrastructure_id>-<role>
        template:
          metadata:
            labels:
              machine.openshift.io/cluster-api-cluster: <infrastructure_id>
              machine.openshift.io/cluster-api-machine-role: <role>
              machine.openshift.io/cluster-api-machine-type: <role>
              machine.openshift.io/cluster-api-machineset: <infrastructure_id>-<role>
          spec:
            providerSpec: 3
              ...

      1
      클러스터 인프라 ID입니다.
      2
      기본 노드 레이블입니다.
      참고

      사용자 프로비저닝 인프라가 있는 클러스터의 경우 컴퓨팅 머신 세트는 작업자 및 인프라 유형 머신만 생성할 수 있습니다.

      3
      컴퓨팅 머신 세트 CR의 &lt ;providerSpec > 섹션에 있는 값은 플랫폼에 따라 다릅니다. CR의 &lt ;providerSpec > 매개변수에 대한 자세한 내용은 공급자의 샘플 컴퓨팅 머신 세트 CR 구성을 참조하십시오.
  3. 다음 명령을 실행하여 MachineSet CR을 생성합니다.

    $ oc create -f <file_name>.yaml

검증

  • 다음 명령을 실행하여 컴퓨팅 머신 세트 목록을 확인합니다.

    $ oc get machineset -n openshift-machine-api

    출력 예

    NAME                                      DESIRED   CURRENT   READY   AVAILABLE   AGE
    agl030519-vplxk-windows-worker-us-east-1a    1         1         1       1        11m
    agl030519-vplxk-worker-us-east-1a            1         1         1       1        55m
    agl030519-vplxk-worker-us-east-1b            1         1         1       1        55m
    agl030519-vplxk-worker-us-east-1c            1         1         1       1        55m
    agl030519-vplxk-worker-us-east-1d            0         0                          55m
    agl030519-vplxk-worker-us-east-1e            0         0                          55m
    agl030519-vplxk-worker-us-east-1f            0         0                          55m

    새 컴퓨팅 머신 세트를 사용할 수 있으면 DESIREDCURRENT 값이 일치합니다. 컴퓨팅 머신 세트를 사용할 수 없는 경우 몇 분 기다렸다가 명령을 다시 실행합니다.

5.3.5. 추가 리소스