이 항목에서는 TKG(Tanzu Kubernetes Grid)가 Windows Worker 노드에서 Windows 기반 워크로드를 실행하는 워크로드 클러스터를 생성하고 관리하는 데 사용할 수 있는 Windows 사용자 지정 시스템 이미지를 생성하는 방법을 설명합니다.
레거시 Windows 구성 요소(예:.NET Framework)를 기반으로 애플리케이션을 구축하고 vSphere Windows 컨테이너를 배포하려는 경우, 다음 절차에 따라 Windows 사용자 지정 시스템 이미지를 구축합니다. 다음 섹션으로 나누어져 있습니다.
참고VMware는 프록시 또는 에어갭 환경에서 Windows Worker 노드가 있는 TKG 워크로드 클러스터를 지원하지 않습니다.
사용자 지정 시스템 이미지를 구축하려면 다음이 필요합니다.
Linux 워크스테이션.
참고Kubernetes 사용하는 오픈 소스
packer
유틸리티의 문제로 인해 MacOS 시스템에서 Windows 시스템 이미지를 빌드할 수 없습니다.
apt
대신 snap
을 사용합니다.kubectl
다운로드 및 압축 풀기를 참조하십시오.다음 단계에 따라 사용자 지정 이미지의 템플릿으로 사용할 Ubuntu 또는 Photon OVA 이미지를 vCenter로 가져옵니다.
다음 단계에 따라 Windows Server 2019 ISO 및 VMware Tools Windows ISO 이미지를 데이터스토어로 가져옵니다.
iso
폴더를 열거나 폴더가 없으면 새 폴더(New Folder)를 클릭하여 생성합니다.iso
폴더에 업로드합니다.다음 구성으로 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.25.7_vmware.2-tkg.1
imagePullPolicy: Always
ports:
- containerPort: 3000
다음을 실행하여 Kubernetes CLI를 관리 클러스터에 연결합니다.
kubectl config use-context MY-MGMT-CLUSTER-admin@MY-MGMT-CLUSTER
여기서 MY-MGMT-CLUSTER
는 관리 클러스터의 이름입니다.
builder.yaml
구성 파일을 적용합니다.
kubectl apply -f ./builder.yaml
이렇게 하면 시스템이 이미지 빌드 프로세스 동안 HTTP 위치에서 필요한 파일을 검색할 수 있는 컨테이너가 배포됩니다. 출력은 다음과 비슷합니다.
namespace/imagebuilder created
service/imagebuilder-wrs created
deployment.apps/image-builder-resource-kit created
컨테이너가 실행 중인지 확인하려면 다음을 실행합니다.
kubectl get pods -n imagebuilder
출력은 다음과 비슷합니다.
NAME READY STATUS RESTARTS AGE
image-builder-resource-kit-756ccdc4ff-rcxpq 1/1 Running 0 4m16s
관리 클러스터의 제어부 IP 주소를 검색합니다.
wide
출력을 사용하여 클러스터의 노드를 나열합니다.
kubectl get nodes -o wide
출력에서 control-plane
로 나열된 ROLE
이 있는 노드의 INTERNAL-IP
값을 기록합니다.
다음 구성을 사용하여 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.25.7",
"cloudbase_init_url": "http://CONTROLPLANE-IP:30008/files/cloudbase_init/CloudbaseInitSetup_1_1_4_x64.msi",
"cluster": "VSPHERE-CLUSTER-NAME",
"containerd_sha256_windows": "2e0332aa57ebcb6c839a8ec807780d662973a15754573630bea249760cdccf2a",
"containerd_url": "http://CONTROLPLANE-IP:30008/files/containerd/cri-containerd-v1.6.18+vmware.1.windows-amd64.tar",
"containerd_version": "v1.6.18",
"convert_to_template": "true",
"create_snapshot": "false",
"datacenter": "DATACENTER-NAME",
"datastore": "DATASTORE-NAME",
"disable_hypervisor": "false",
"disk_size": "40960",
"goss_inspect_mode": "true",
"insecure_connection": "true",
"kubernetes_base_url": "http://CONTROLPLANE-IP:30008/files/kubernetes/",
"kubernetes_semver": "v1.25.7+vmware.2",
"kubernetes_series": "v1.25.7",
"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_version": ""
}
형식 설명:
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-URL
및 CONTAINERD-SHA
는 위에서 검색된 containerd.path
및 containerd.sha256
값입니다.제어부의 nodePort
끝점에서 Windows 리소스 번들을 쿼리하고 기존 파일 경로를 확인합니다.
curl http://CONTROLPLANE-IP:30008
다음 단계에 따라 Windows 설정이 포함된 XML 파일을 추가합니다.
autounattend.xml
파일로 이동합니다.<ProductKey>...</ProductKey>
를 제거합니다.autounattend.xml
파일 이름을 지정합니다.windows.json
파일로 저장합니다.windows.json
및 autounattend.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.3 build-node-ova-vsphere-windows-2019
오류가 표시되거나 빌드가 중단되면 워크스테이션의 Packer 로그를 참조하여 windows.json
구성 파일의 문제를 해결합니다. 또한 콘솔에서 자세한 로깅을 수신하려면 위의 명령줄에 -e PACKER_LOG=1
을 추가할 수 있습니다.
Windows 이미지를 사용할 준비가 되었는지 확인하려면 vCenter에서 호스트 또는 클러스터를 선택하고 VM 탭을 선택한 다음 Windows(Windows)을 선택하여 나열된 Windows 이미지를 확인합니다.
이 절차에 따라 Windows 워크로드 클러스터의 구성 파일을 생성하고, 구성 파일에서 Windows 이미지를 참조한 다음, Tanzu CLI를 사용하여 워크로드 클러스터를 생성합니다.
관리 클러스터 구성 파일을 복사하고 독립형 관리 클러스터가 있는 vSphere 구성 파일 절차에 따라 새 이름으로 저장합니다.
새 구성 파일에서 다음을 추가하거나 수정합니다.
IS_WINDOWS_WORKLOAD_CLUSTER: "true"
워크로드 클러스터 생성에 설명된 대로 워크로드 클러스터를 배포합니다.