13.7. 레지스트리 하드 정리
OpenShift Container Registry는 OpenShift Container Platform 클러스터의 etcd에서 참조하지 않는 Blob을 누적할 수 있습니다. 따라서 기본 이미지 정리 절차를 수행할 수 없습니다. 이를 고립된 Blob이라고 합니다.
고립된 Blob은 다음과 같은 시나리오에서 발생할 수 있습니다.
- 
						etcd의 이미지만 제거하고 레지스트리 스토리지의 이미지는 제거하지 않는 oc delete image <sha256:image-id>명령을 사용하여 이미지를 수동으로 삭제합니다.
- 데몬 오류로 인해 시작된 레지스트리로 내보내서 일부 Blob은 업로드되지만 (최종 구성 요소로 업로드되는) 이미지 매니페스트는 업로드되지 않습니다. 모든 고유 이미지 Blob이 고립됩니다.
- OpenShift Container Platform에서 할당량 제한 때문에 이미지를 거부합니다.
- 표준 이미지 정리기에서 이미지 매니페스트를 삭제하지만 관련 Blob을 삭제하기 전에 중단됩니다.
- 의도한 Blob을 제거하지 못하는 레지스트리 정리기 버그로 인해 해당 Blob을 참조하는 이미지 오브젝트가 제거되고 Blob이 고립됩니다.
기본 이미지 정리와 별도의 절차인 레지스트리 하드 정리를 수행하면 클러스터 관리자가 고립된 Blob을 제거할 수 있습니다. OpenShift Container Registry의 스토리지 공간이 부족하고 고립된 Blob이 있다고 생각되면 하드 정리를 수행해야 합니다.
이 작업은 드물게 수행해야 하며 상당한 수의 고립이 새롭게 생성되었다는 증거가 있는 경우에만 필요합니다. 이러한 경우가 아니라면 생성되는 이미지 수에 따라 하루에 한 번과 같이 일정한 간격으로 표준 이미지를 정리하면 됩니다.
프로세스
레지스트리에서 고립된 Blob을 하드 정리하려면 다음을 수행합니다.
- 로그인합니다. - CLI를 사용하여 - kubeadmin또는- openshift-image-registry네임스페이스에 액세스할 수 있는 권한이 있는 다른 사용자로 클러스터에 로그인합니다.
- 기본 이미지 정리를 실행합니다. - 기본 이미지 정리에서는 더 이상 필요하지 않은 추가 이미지를 제거합니다. 하드 정리는 이미지를 자체적으로 제거하지 않습니다. 레지스트리 스토리지에 저장된 Blob만 제거합니다. 따라서 하드 정리 전에 기본 이미지 정리를 실행해야 합니다. 
- 레지스트리를 읽기 전용 모드로 전환합니다. - 레지스트리가 읽기 전용 모드로 실행되지 않는 경우 정리 작업과 동시에 발생하는 모든 내보내기 작업에서 다음 중 하나를 수행합니다. - 실패 및 새로운 고립 발생
- 이미지를 가져올 수 없지만 성공(참조된 Blob 중 일부가 삭제되었기 때문에)
 - 내보내기 작업은 레지스트리가 다시 읽기-쓰기 모드로 전환될 때까지 실패합니다. 따라서 하드 정리는 신중하게 계획해야 합니다. - 레지스트리를 읽기 전용 모드로 전환하려면 다음을 수행합니다. - configs.imageregistry.operator.openshift.io/cluster에서- spec.readOnly를- true로 설정합니다.- oc patch configs.imageregistry.operator.openshift.io/cluster -p '{"spec":{"readOnly":true}}' --type=merge- $ oc patch configs.imageregistry.operator.openshift.io/cluster -p '{"spec":{"readOnly":true}}' --type=merge- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
 
- system:image-pruner역할을 추가합니다.- 일부 리소스를 나열하는 데에는 레지스트리 인스턴스를 실행하는 데 사용하는 서비스 계정에 추가 권한이 필요합니다. - 서비스 계정 이름을 가져옵니다. - service_account=$(oc get -n openshift-image-registry \ -o jsonpath='{.spec.template.spec.serviceAccountName}' deploy/image-registry)- $ service_account=$(oc get -n openshift-image-registry \ -o jsonpath='{.spec.template.spec.serviceAccountName}' deploy/image-registry)- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- system:image-pruner클러스터 역할을 서비스 계정에 추가합니다.- oc adm policy add-cluster-role-to-user \ system:image-pruner -z \ ${service_account} -n openshift-image-registry- $ oc adm policy add-cluster-role-to-user \ system:image-pruner -z \ ${service_account} -n openshift-image-registry- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
 
- 선택 사항: 시험 실행 모드에서 정리기를 실행합니다. - 제거되는 Blob 수를 보려면 시험 실행 모드에서 하드 정리기를 실행합니다. 실제로는 변경되지 않습니다. 다음 예제에서는 - image-registry-3-vhndw라는 이미지 레지스트리 Pod를 참조합니다.- oc -n openshift-image-registry exec pod/image-registry-3-vhndw -- /bin/sh -c '/usr/bin/dockerregistry -prune=check' - $ oc -n openshift-image-registry exec pod/image-registry-3-vhndw -- /bin/sh -c '/usr/bin/dockerregistry -prune=check'- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 또는 정리 후보에 대한 정확한 경로를 가져오도록 로깅 수준을 높입니다. - oc -n openshift-image-registry exec pod/image-registry-3-vhndw -- /bin/sh -c 'REGISTRY_LOG_LEVEL=info /usr/bin/dockerregistry -prune=check' - $ oc -n openshift-image-registry exec pod/image-registry-3-vhndw -- /bin/sh -c 'REGISTRY_LOG_LEVEL=info /usr/bin/dockerregistry -prune=check'- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 출력 예 - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 하드 정리를 실행합니다. - image-registryPod에서 실행 중인 하나의 인스턴스 내에서 다음 명령을 실행하여 하드 정리를 실행합니다. 다음 예제에서는- image-registry-3-vhndw라는 이미지 레지스트리 Pod를 참조합니다.- oc -n openshift-image-registry exec pod/image-registry-3-vhndw -- /bin/sh -c '/usr/bin/dockerregistry -prune=delete' - $ oc -n openshift-image-registry exec pod/image-registry-3-vhndw -- /bin/sh -c '/usr/bin/dockerregistry -prune=delete'- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 출력 예 - Deleted 13374 blobs Freed up 2.835 GiB of disk space - Deleted 13374 blobs Freed up 2.835 GiB of disk space- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 레지스트리를 다시 읽기-쓰기 모드로 전환합니다. - 정리가 완료되면 레지스트리를 다시 읽기-쓰기 모드로 전환할 수 있습니다. - configs.imageregistry.operator.openshift.io/cluster에서- spec.readOnly를- false로 설정합니다.- oc patch configs.imageregistry.operator.openshift.io/cluster -p '{"spec":{"readOnly":false}}' --type=merge- $ oc patch configs.imageregistry.operator.openshift.io/cluster -p '{"spec":{"readOnly":false}}' --type=merge- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow