Windows 사용자 지정 시스템 이미지

레거시 Windows 구성 요소(예:.NET Framework)를 기반으로 애플리케이션을 구축하고 vSphere Windows 컨테이너를 배포하려는 경우, 다음 절차에 따라 Windows 사용자 지정 시스템 이미지를 구축합니다. 다음 섹션으로 나누어져 있습니다.

참고

Tanzu Kubernetes Grid v1.6에서 실행되는 Windows 워크로드 클러스터는 v2.1로 업그레이드할 수 없습니다. 해결 방법은 TKG v2.1 Release Notes를 참조하십시오.

Windows 이미지 사전 요구 사항

사용자 지정 시스템 이미지를 구축하려면 다음이 필요합니다.

  • vSphere 6.7 업데이트 3 이상.
  • Linux 워크스테이션.
  • Docker 데스크톱. 설치하려면 Docker 제품 다운로드 페이지를 참조하십시오. CLI에서 Docker를 설치하려면 apt 대신 snap을 사용합니다.
  • Tanzu CLI. 설치하려면 독립형 관리 클러스터에서 사용할 Tanzu CLI 및 기타 도구 설치의 Tanzu CLI 및 kubectl 다운로드 및 압축 풀기를 참조하십시오.
  • TKG v2.1 독립형 관리 클러스터.
  • 최신(2021년 4월 최신 버전) Windows Server 2019 ISO 이미지. MSDN(Microsoft Developer Network) 또는 VL(볼륨 라이센싱) 계정을 통해 다운로드합니다. 평가 미디어를 사용하는 것은 지원되지 않거나 권장되지 않습니다.
  • 최신 VMware Tools Windows ISO 이미지. VMware Tools에서 다운로드합니다.
  • 사용자 지정 Windows VM 템플릿을 수용할 수 있는 vCenter의 데이터스토어로, 시작 크기가 10GB(씬 프로비저닝됨)보다 클 수 있습니다.

Windows 이미지 빌드

  1. 다음 단계에 따라 사용자 지정 이미지의 템플릿으로 사용할 Ubuntu 또는 Photon OVA 이미지를 vCenter로 가져옵니다.

    1. https://customerconnect.vmware.com으로 이동한 후 VMware Customer Connect 자격 증명을 사용하여 로그인합니다.
    2. Tanzu Kubernetes Grid 다운로드 페이지로 이동합니다.
    3. VMware Tanzu Kubernetes Grid 행에서 다운로드로 이동(Go to Downloads)을 클릭합니다.
    4. 버전 선택(Select Version) 드롭다운에서 2.1을 선택합니다.
    5. 제품 다운로드(Product Downloads)에서 VMware Tanzu Kubernetes Grid 2.1용 Kubernetes OVA(Kubernetes OVAs for VMware Tanzu Kubernetes Grid 2.1) 섹션으로 스크롤하고, Ubuntu 2004 Kubernetes v1.24.10 OVA 또는 Photon v3 Kubernetes v1.24.10 OVA를 찾은 후 지금 다운로드(Download Now)를 클릭합니다.
    6. vCenter에 로그인합니다.
    7. 호스트 또는 클러스터를 마우스 오른쪽 버튼으로 클릭하고 OVF 템플릿 배포(Deploy OVF Template)…를 클릭하여 이미지를 가져옵니다.
    8. 가져온 이미지를 마우스 오른쪽 버튼으로 클릭하고 템플릿(Template)에 마우스를 놓고 템플릿으로 변환(Convert to Template)을 클릭합니다.
    9. 템플릿을 사용할 준비가 되었는지 확인하려면 호스트 또는 클러스터를 선택하고 VM 탭을 선택한 다음 VM 템플릿(VM Templates)을 선택하여 나열된 템플릿을 확인합니다.
  2. 다음 단계에 따라 Windows Server 2019 ISO 및 VMware Tools Windows ISO 이미지를 데이터스토어로 가져옵니다.

    1. vCenter에 로그인합니다.
    2. 데이터스토어로 이동하고 파일(Files) 탭을 클릭합니다.
    3. iso 폴더를 열거나 폴더가 없으면 새 폴더(New Folder)를 클릭하여 생성합니다.
    4. 두 ISO 파일을 iso 폴더에 업로드합니다.
  3. 다음 구성으로 builder.yaml YAML 파일을 생성합니다.

    apiVersion: v1
    kind: Namespace
    metadata:
     name: imagebuilder
    ---
    apiVersion: v1
    kind: Service
    metadata:
     name: imagebuilder-wrs
     namespace: imagebuilder
    spec:
     selector:
       app: image-builder-resource-kit
     type: NodePort
     ports:
     - port: 3000
       targetPort: 3000
       nodePort: 30008
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
     name: image-builder-resource-kit
     namespace: imagebuilder
    spec:
     selector:
       matchLabels:
         app: image-builder-resource-kit
     template:
       metadata:
         labels:
           app: image-builder-resource-kit
       spec:
         nodeSelector:
           kubernetes.io/os: linux
         containers:
         - name: windows-imagebuilder-resourcekit
           image: projects.registry.vmware.com/tkg/windows-resource-bundle:v1.24.10_vmware.1-tkg.2
           imagePullPolicy: Always
           ports:
             - containerPort: 3000
    
  4. 다음을 실행하여 Kubernetes CLI를 관리 클러스터에 연결합니다.

    kubectl config use-context MY-MGMT-CLUSTER-admin@MY-MGMT-CLUSTER
    

    여기서 MY-MGMT-CLUSTER는 관리 클러스터의 이름입니다.

  5. builder.yaml 구성 파일을 적용합니다.

    kubectl apply -f ./builder.yaml
    

    이렇게 하면 시스템이 이미지 빌드 프로세스 동안 HTTP 위치에서 필요한 파일을 검색할 수 있는 컨테이너가 배포됩니다. 출력은 다음과 비슷합니다.

    namespace/imagebuilder created
    service/imagebuilder-wrs created
    deployment.apps/image-builder-resource-kit created
    
  6. 컨테이너가 실행 중인지 확인하려면 다음을 실행합니다.

    kubectl get pods -n imagebuilder
    

    출력은 다음과 비슷합니다.

    NAME                                          READY   STATUS    RESTARTS   AGE
    image-builder-resource-kit-756ccdc4ff-rcxpq   1/1     Running   0          4m16s
    
  7. 관리 클러스터의 제어부 IP 주소를 검색합니다.

    1. wide 출력을 사용하여 클러스터의 노드를 나열합니다.

      kubectl get nodes -o wide
      
    2. 출력에서 control-plane로 나열된 ROLE이 있는 노드의 INTERNAL-IP 값을 기록합니다.

  8. 다음 구성을 사용하여 windows.json이라는 빈 폴더에 JSON 파일을 생성합니다.

    {
      "additional_executables_destination_path": "C:\\ProgramData\\Temp",
      "additional_executables_list": "http://CONTROLPLANE-IP:30008/files/antrea-windows/antrea-windows-advanced.zip,http://CONTROLPLANE-IP:30008/files/kubernetes/kube-proxy.exe",
      "additional_executables": "true",
      "additional_prepull_images": "mcr.microsoft.com/windows/servercore:ltsc2019",
      "build_version": "windows-2019-kube-v1.24.10",
      "cloudbase_init_url": "http://CONTROLPLANE-IP:30008/files/cloudbase_init/CloudbaseInitSetup_1_1_4_x64.msi",
      "cluster": "VSPHERE-CLUSTER-NAME",
      "containerd_sha256_windows": "d29f5276584e869a5933db668fd6f17b7417c48ac04dd1c2a2c7f412f948f89c",
      "containerd_url": "http://CONTROLPLANE-IP:30008/files/containerd/cri-containerd-v1.6.6+vmware.3.windows-amd64.tar",
      "containerd_version": "v1.6.6",
      "convert_to_template": "true",
      "create_snapshot": "false",
      "datacenter": "DATACENTER-NAME",
      "datastore": "DATASTORE-NAME",
      "disable_hypervisor": "false",
      "disk_size": "40960",
      "goss_inspect_mode": "true",
      "goss_url": "http://CONTROLPLANE-IP:30008/files/goss/goss-alpha-windows-amd64.exe",
      "insecure_connection": "true",
      "kubernetes_base_url": "http://CONTROLPLANE-IP:30008/files/kubernetes/",
      "kubernetes_semver": "v1.24.10+vmware.1",
      "kubernetes_series": "v1.24.10",
      "linked_clone": "false",
      "load_additional_components": "true",
      "netbios_host_name_compatibility": "false",
      "network": "NETWORK",
      "nssm_url": "http://CONTROLPLANE-IP:30008/files/nssm/nssm.exe",
      "os_iso_path": "OS-ISO-PATH",
      "password": "VCENTER-PASSWORD",
      "pause_image": "mcr.microsoft.com/oss/kubernetes/pause:3.6",
      "prepull": "false",
      "resource_pool": "",
      "runtime": "containerd",
      "template": "",
      "unattend_timezone": "WINDOWS-TIMEZONE",
      "username": "VCENTER-USERNAME",
      "vcenter_server": "VCENTER-IP",
      "vmtools_iso_path": "VMTOOLS-ISO-PATH",
      "windows_updates_categories": "CriticalUpdates SecurityUpdates UpdateRollups",
      "windows_updates_kbs": "",
      "wins_url": "http://CONTROLPLANE-IP:30008/files/wins/wins.exe",
      "wins_version": "v0.4.11"
    }
    

    형식 설명:

    • WINDOWS-TIMEZONE은 환경의 Windows 표준 시간대입니다. 예: GMT Standard Time.
    • VSPHERE-CLUSTER-NAME은 vSphere 클러스터의 이름입니다. 예: VSAN-Cluster.
    • VCENTER-PASSWORD는 vCenter 암호입니다.
    • VCENTER-USERNAME은 사용자의 vCenter 사용자 이름입니다.
    • DATASTORE-NAME은 vCenter에 표시되는 데이터스토어의 이름입니다. 예: vsanDatastore.
    • DATACENTER-NAME은 vCenter에 표시되는 데이터 센터의 이름입니다. 예: VSAN-DC.
    • VMTOOLS-ISO-PATH는 다음과 같이 구조화된 VMware Tools ISO 파일의 경로입니다. [DATASTORE-NAME] iso/VMware-tools-windows-11.2.5-17337674.iso.
    • NETWORK vCenter 메뉴(Menu) > 네트워킹(Networking) > 네트워크(Networks)에 표시되는 네트워크 또는 포트 그룹의 이름입니다 예: VM Network.
    • OS-ISO-PATH는 다음과 같이 구조화된 Windows Server 2019 ISO 파일의 경로입니다. [DATASTORE-NAME] iso/en-us_windows_server_2019_updated_aug_2022_x64_dvd_a6431a28.iso.
    • VCENTER-IP는 vCenter Server의 IP 주소 또는 FQDN입니다.
    • CONTROLPLANE-IP는 위에서 검색된 관리 클러스터 IP 주소입니다.
    • CONTAINERD-URLCONTAINERD-SHA는 위에서 검색된 containerd.pathcontainerd.sha256 값입니다.
  9. 제어부의 nodePort 끝점에서 Windows 리소스 번들을 쿼리하고 기존 파일 경로를 확인합니다.

    curl http://CONTROLPLANE-IP:30008

  10. 다음 단계에 따라 Windows 설정이 포함된 XML 파일을 추가합니다.

    1. VMware {code} Sample Exchange에서 autounattend.xml 파일로 이동합니다.
    2. 다운로드(Download)를 선택합니다.
    3. Windows Server 2019 평가판 버전을 사용하는 경우 <ProductKey>...</ProductKey>를 제거합니다.
    4. autounattend.xml 파일 이름을 지정합니다.
    5. 동일한 폴더에 있는 파일을 windows.json 파일로 저장합니다.
  11. windows.jsonautounattend.xml 파일이 있는 폴더에서 다음을 실행하여 사용자 지정 이미지를 빌드합니다.

    docker run -it --rm --mount type=bind,source=$(pwd)/windows.json,target=/windows.json --mount type=bind,source=$(pwd)/autounattend.xml,target=/home/imagebuilder/packer/ova/windows/windows-2019/autounattend.xml -e PACKER_VAR_FILES="/windows.json" -e IB_OVFTOOL=1 -e IB_OVFTOOL_ARGS='--skipManifestCheck' -e PACKER_FLAGS='-force -on-error=ask' -t projects.registry.vmware.com/tkg/image-builder:v0.1.13_vmware.2 build-node-ova-vsphere-windows-2019
    

    오류가 표시되거나 빌드가 중단되면 워크스테이션의 Packer 로그를 참조하여 windows.json 구성 파일의 문제를 해결합니다. 또한 콘솔에서 자세한 로깅을 수신하려면 위의 명령줄에 -e PACKER_LOG=1을 추가할 수 있습니다.

  12. Windows 이미지를 사용할 준비가 되었는지 확인하려면 vCenter에서 호스트 또는 클러스터를 선택하고 VM 탭을 선택한 다음 Windows(Windows)을 선택하여 나열된 Windows 이미지를 확인합니다.

워크로드 클러스터에 Windows 이미지 사용

이 절차에 따라 Windows 워크로드 클러스터의 구성 파일을 생성하고, 구성 파일에서 Windows 이미지를 참조한 다음, Tanzu CLI를 사용하여 워크로드 클러스터를 생성합니다.

  1. 관리 클러스터 구성 파일을 복사하고 독립형 관리 클러스터가 있는 vSphere 구성 파일 절차에 따라 새 이름으로 저장합니다.

  2. 새 구성 파일에서 다음을 추가하거나 수정합니다.

    IS_WINDOWS_WORKLOAD_CLUSTER: "true"
    
  3. 워크로드 클러스터 생성에 설명된 대로 워크로드 클러스터를 배포합니다.

check-circle-line exclamation-circle-line close-line
Scroll to top icon