이 항목에서는 다운로드한 OVA 파일에서 개인 Harbor 이미지 레지스트리를 업그레이드하여 오프라인 vSphere 환경에서 TKG(Tanzu Kubernetes Grid)를 업그레이드하는 방법을 설명합니다. 이 Harbor 레지스트리는 TKG와 별도로 실행되고 TKG에서 사용되는 구성 요소 이미지를 저장하고 관리합니다.
이 VM 기반 Harbor 배포는 인터넷 제한 또는 에어갭 환경에서 TKG 시스템 이미지를 호스팅하는 경우에만 지원됩니다. 운영 환경에서 호스팅된 애플리케이션에 대해 많은 수의 이미지를 관리할 수 있는 확장 가능하고 고가용성 Harbor를 배포하려면 Tanzu CLI를 사용하여 TKG 2.1 워크로드 클러스터 생성 및 관리의 서비스 레지스트리용 Harbor 설치에 설명된 대로 TKG 클러스터에 Harbor 패키지를 배포합니다.
오프라인 Harbor 레지스트리를 백업하고 복원하려면 vSphere에서 오프라인 Harbor 레지스트리 백업 및 복원을 참조하십시오.
다음 단계에서는 두 개의 OVA를 사용하여 vSphere에서 실행되는 Harbor 인스턴스를 업그레이드합니다.
OVA 1의 데이터 디스크에는 이미지, 사용자, 프로젝트, 암호를 포함하여 Harbor에서 현재 사용하는 모든 데이터가 포함됩니다. 업그레이드를 수행하려면 OVA 1 데이터 디스크를 기존 디스크로 OVA 2에 추가한 다음 해당 컨텐츠를 복사하여 데이터를 마이그레이션합니다.
참고OVA 업그레이드 프로세스는 템플릿 사용자 지정(Administrator Password) > Harbor 구성 아래의 관리자 암호(Administrator Password) 및 데이터베이스 암호(Database Password) 설정을 OVA 1의 암호 설정으로 덮어씁니다.
Tanzu Kubernetes Grid 다운로드 페이지에서 새 Harbor OVA를 다운로드하고 vSphere에서 오프라인 Harbor 레지스트리 배포 절차에 따라 vSphere에 배포합니다.
OVA 1의 전원을 끕니다.
vSphere 인벤토리에서 OVA 1을 마우스 오른쪽 버튼으로 클릭하고 전원(Power) > 게스트 운영 체제 종료(Shut Down Guest OS)를 선택합니다.
OVA 1(Harbor v2.6.3)의 스냅샷을 생성합니다.
이 백업에서 복원하려면 vSphere에서 오프라인 Harbor 레지스트리 백업 및 복원을 참조하십시오.
OVA 1 디스크 파일 위치를 검색합니다. 인벤토리에서 OVA 1을 마우스 오른쪽 버튼으로 클릭하고 설정 편집(Edit Setting) > 디스크 파일(Disk File)을 선택한 후 값을 기록합니다.
업그레이드 프로세스 동안 OVA 1의 전원을 다시 켜지 마십시오.
ssh
를 사용하여 OVA 2에 로그인합니다.
ssh root@OVA2-IP
OVA 2에서 Harbor를 중지합니다.
Harbor가 실행 중인지 확인합니다.
docker ps
Harbor 프로세스를 중지합니다.
systemctl stop harbor
Harbor가 중지되고 실행되고 있지 않은지 확인합니다.
docker ps
OVA 1 데이터 디스크를 OVA 2에 "기존 디스크"로 추가합니다.
vSphere에서 OVA 2 VM을 마우스 오른쪽 버튼으로 클릭하고 설정 편집(Edit Settings)을 선택합니다.
새 창이 나타납니다. 오른쪽 위에 있는 새 디바이스 추가(ADD NEW DEVICE) 드롭다운에서 기존 하드 디스크(Existing Hard Disk)를 선택합니다.
파일 선택(Select File)에서 OVA 1 데이터스토어(예: vsanDatastore) 및 이전에 기록된 디스크 파일 위치를 선택합니다. 파일 위치는 .vmdk
로 끝납니다. 확인(OK)을 클릭합니다.
새 하드 디스크(New Hard Disk) 목록이 설정 편집(Edit Settings) > 가상 설정(Virtual Settings) 탭에 추가됩니다. 확인(OK)을 클릭합니다.
아래의 최근 작업(Recent Tasks) 표시줄에서 새 디스크 추가가 완료될 때까지 기다립니다.
가상 하드 디스크의 설정을 더 편집하려면 이름을 변경하려면 해당 목록을 다시 마우스 오른쪽 버튼으로 클릭합니다.
OVA 1 데이터가 포함된 디스크를 OVA 2 파일 시스템에 마운트합니다.
ssh
를 통해 OVA 2에 로그인한 명령 프롬프트에서 lsblk
를 실행하여 새로 추가된 디스크가 추가된 블록 디바이스를 확인합니다.
mkdir -p /ova263
을 실행하여 OVA 2 파일 시스템에서 새 디스크에 대한 마운트 지점을 생성합니다.
mount
명령을 실행하여 블록 디바이스를 파일 시스템의 최상위 수준인 마운트 지점에 마운트합니다. 예를 들면 다음과 같습니다.
mount DEVICE /ova263
여기서 DEVICE
는 lsblk
에 의해 나열된 새 디바이스입니다(예: /dev/sdc1
).
harbor.yml
파일을 OVA 2 Harbor 버전을 나타내는 파일 이름으로 백업합니다. 예:
mv /etc/goharbor/harbor/harbor.yml /etc/goharbor/harbor/harbor271.origin.yml
마이그레이션된 OVA 1 데이터 디스크의 harbor.yml
파일을 OVA 2 Harbor 디렉토리로 복사합니다. 예:
cp -pr /ova263/harbor.yml /etc/goharbor/harbor/harbor.yml
OVA 2에 동적으로 할당된 IP 주소 또는 OVA 1의 다른 고정 IP 또는 FQDN이 있는 경우 그에 따라 /etc/goharbor/harbor/harbor.yml
파일에서 hostname
설정을 업데이트해야 할 수 있습니다. OVA 1에서 복사한 hostname
값이 OVA 2에 대해 올바르지 않으면 OVA 2의 올바른 주소 또는 FQDN으로 변경합니다.
참고인증서를 OVA 1에서 OVA 2로 복사할 필요가 없습니다. 네트워크 관리에 따라 OVA 2의 인증서는 새 인증서이거나 OVA 1 인증서와 동일하지만 어느 쪽이든 작동합니다.
OVA 2에서 다음 디렉토리를 제거합니다.
rm -rf /storage/data/!(ca_download)
rm -rf /storage/log/*
데이터 디렉토리를 OVA 1 데이터 디스크에서 OVA 2로 복사합니다.
cp -pr /ova263/data/!(ca_download) /storage/data
Harbor 로그 디렉토리를 OVA 1 데이터 디스크에서 OVA 2로 복사합니다.
cp -pr /ova263/log/* /storage/log
OVA 2에서 OVA 1 디스크를 마운트 해제합니다.
umount /ova263
OVA 2에서 OVA 1 데이터 디스크를 제거합니다. OVA 2의 vCenter 가상 하드웨어(Virtual Hardware) > 설정 편집(Edit Settings)에서, 추가된 OVA 1 하드 디스크가 나열된 줄에서 X 버튼을 클릭합니다. 데이터스토어에서 파일 삭제(Delete files from datastore) 확인란을 활성화하지 말고 확인(OK)을 클릭하여 확인합니다.
Harbor 컨테이너에서 harbor.yml
를 실행하여 복사한 migrate
파일을 업그레이드합니다.
cd /etc/goharbor/harbor && docker run -it --rm -v /:/hostfs vmware.io/goharbor/prepare:vOVA-2-VERSION_vmware.1 migrate -i /etc/goharbor/harbor/harbor.yml
여기서 OVA-2-VERSION
은 OVA 2의 Harbor 버전입니다(예: 2.7.1
).
새 OVA 2 버전 Harbor harbor.yml
을 /storage/harbor.yml
로 복사합니다.
cp -pr /etc/goharbor/harbor/harbor.yml /storage/harbor.yml
OVA 2에서 Harbor prepare
스크립트를 실행합니다. OVA 1에서 Harbor 기본 스캐너를 사용하도록 설정했는지 여부에 따라 --with-trivy
플래그를 추가해야 할 수 있습니다.
스캐너 사용하지 않음:
cd /etc/goharbor/harbor && /etc/goharbor/harbor/prepare
스캐너 사용:
cd /etc/goharbor/harbor && /etc/goharbor/harbor/prepare --with-trivy
Harbor 서비스를 시작합니다.
systemctl start harbor