4.7.2.2. 패키지 매니페스트 형식 카탈로그 이미지 미러링

클러스터 관리자는 패키지 매니페스트 형식을 기반으로 사용자 정의 Operator 카탈로그 이미지를 레지스트리에 미러링하고 카탈로그 소스를 사용하여 클러스터에 콘텐츠를 로드할 수 있습니다. 이 예의 절차에서는 이전에 빌드되어 지원되는 레지스트리로 푸시된 사용자 정의 redhat-operators 카탈로그 이미지를 사용합니다.

사전 요구 사항

  • 무제한 네트워크 액세스가 가능한 워크스테이션
  • 패키지 매니페스트 형식을 기반으로 하는 사용자 정의 Operator 카탈로그 이미지를 지원되는 레지스트리로 내보냄
  • oc 버전 4.3.5+
  • podman 버전 1.9.3+
  • Docker v2-2를 지원하는 미러 레지스트리에 액세스

    중요

    OpenShift Container Platform 클러스터의 내부 레지스트리는 미러링 프로세스 중에 필요한 태그 없이 푸시를 지원하지 않으므로 대상 레지스트리로 사용할 수 없습니다.

  • 프라이빗 레지스트리로 작업 중인 경우 REG_CREDS 환경 변수를 이후 단계에서 사용하기 위해 레지스트리 자격 증명의 파일 경로로 설정합니다. 예를 들어 podman CLI의 경우:

    $ REG_CREDS=${XDG_RUNTIME_DIR}/containers/auth.json

프로세스

  1. oc adm catalog mirror 명령은 사용자 정의 Operator 카탈로그 이미지의 내용을 추출하여 미러링에 필요한 매니페스트를 생성합니다. 다음 중 하나를 선택할 수 있습니다.

    • 명령의 기본 동작이 매니페스트를 생성한 후 모든 이미지 콘텐츠를 미러 레지스트리에 자동으로 미러링하도록 허용합니다.
    • 미러링에 필요한 매니페스트만 생성하고 이미지 컨텐츠를 레지스트리에 실제로 미러링하지는 않으려면 --manifests-only 플래그를 추가합니다. 이 방법은 미러링할 항목을 검토하는 데 유용할 수 있으며 컨텐츠의 하위 집합만 필요한 경우 매핑 목록을 변경할 수 있습니다. 그런 다음 oc image mirror 명령과 함께 해당 파일을 사용하여 이후 단계에서 수정된 이미지 목록을 미러링할 수 있습니다.

    무제한 네트워크 액세스 권한이 있는 워크스테이션에서 다음 명령을 실행합니다.

    $ oc adm catalog mirror \
        <registry_host_name>:<port>/olm/redhat-operators:v1 \ 1
        <registry_host_name>:<port> \ 2
        [-a ${REG_CREDS}] \ 3
        [--insecure] \ 4
        [--index-filter-by-os='<platform>/<arch>'] \ 5
        [--manifests-only] 6
    1
    Operator 카탈로그 이미지를 지정합니다.
    2
    대상 레지스트리의 정규화된 도메인 이름(FQDN)을 지정합니다.
    3
    선택 사항: 필요한 경우 레지스트리 자격 증명 파일의 위치를 지정합니다.
    4
    선택 사항: 대상 레지스트리에 대한 신뢰성을 구성하지 않으려면 --insecure 플래그를 추가합니다.
    5
    선택 사항: 여러 변형을 사용할 수 있을 때 선택할 카탈로그 이미지의 플랫폼 및 아키텍처를 지정합니다. 이미지는 '<platform>/<arch>[/<variant>]’로 전달됩니다. 이는 카탈로그 이미지에서 참조하는 이미지에는 적용되지 않습니다. 유효한 값은 linux/amd64, linux/ppc64lelinux/s390x입니다.
    6
    선택 사항: 미러링에 필요한 매니페스트만 생성하고 실제로 이미지 콘텐츠를 레지스트리에 미러링하지 않습니다.

    출력 예

    using database path mapping: /:/tmp/190214037
    wrote database to /tmp/190214037
    using database at: /tmp/190214037/bundles.db 1
    ...

    1
    명령으로 생성된 임시 데이터베이스.

    명령을 실행하면 현재 디렉터리에 manifests-<index_image_name>-<random_number>/ 디렉터리가 생성되고 다음 파일이 생성됩니다.

    • catalogSource.yaml 파일은 카탈로그 이미지 태그 및 기타 관련 메타데이터로 미리 채워진 CatalogSource 오브젝트에 대한 기본 정의입니다. 이 파일은 있는 그대로 사용하거나 카탈로그 소스를 클러스터에 추가하도록 수정할 수 있습니다.
    • imageContentSourcePolicy.yaml 파일은 Operator 매니페스트에 저장된 이미지 참조와 미러링된 레지스트리 간에 변환하도록 노드를 구성할 수 있는 ImageContentSourcePolicy 오브젝트를 정의합니다.

      참고

      클러스터에서 ImageContentSourcePolicy 오브젝트를 사용하여 저장소 미러링을 구성하는 경우 미러링된 레지스트리에 대한 글로벌 풀 시크릿만 사용할 수 있습니다. 프로젝트에 풀 시크릿을 추가할 수 없습니다.

    • mapping.txt 파일에는 모든 소스 이미지와 대상 레지스트리에서 매핑할 위치가 포함되어 있습니다. 이 파일은 oc image mirror 명령과 호환되며 미러링 구성을 추가로 사용자 정의하는 데 사용할 수 있습니다.
  2. 이전 단계에서 --manifests-only 플래그를 사용했고 컨텐츠의 하위 집합만 미러링하려는 경우:

    1. mapping.txt 파일의 이미지 목록을 사양에 맞게 수정합니다. 미러링할 이미지 하위 집합의 정확한 이름과 버전을 모를 경우 다음 단계를 사용하여 찾습니다.

      1. oc adm catalog mirror 명령으로 생성된 임시 데이터베이스에 대해 sqlite3 도구를 실행하여 일반 검색 쿼리와 일치하는 이미지 목록을 검색합니다. 출력은 나중에 mapping.txt 파일을 편집하는 방법을 알려주는 데 도움이 됩니다.

        예를 들어 clusterlogging.4.3 문자열과 유사한 이미지 목록을 검색하려면 다음을 수행합니다.

        $ echo "select * from related_image \
            where operatorbundle_name like 'clusterlogging.4.3%';" \
            | sqlite3 -line /tmp/190214037/bundles.db 1
        1
        데이터베이스 파일의 경로를 찾으려면 oc adm catalog mirror 명령의 이전 출력을 참조하십시오.

        출력 예

        image = registry.redhat.io/openshift4/ose-logging-kibana5@sha256:aa4a8b2a00836d0e28aa6497ad90a3c116f135f382d8211e3c55f34fb36dfe61
        operatorbundle_name = clusterlogging.4.3.33-202008111029.p0
        
        image = registry.redhat.io/openshift4/ose-oauth-proxy@sha256:6b4db07f6e6c962fc96473d86c44532c93b146bbefe311d0c348117bf759c506
        operatorbundle_name = clusterlogging.4.3.33-202008111029.p0
        ...

      2. 이전 단계의 결과를 사용하여 미러링할 이미지의 하위 집합만 포함하도록 mapping.txt 파일을 편집합니다.

        예를 들어 이전 예제 출력의 image 값을 사용하여 mapping.txt 파일에 다음과 같은 일치하는 줄이 있는지 찾을 수 있습니다.

        mapping.txt에서 일치하는 이미지 매핑

        registry.redhat.io/openshift4/ose-logging-kibana5@sha256:aa4a8b2a00836d0e28aa6497ad90a3c116f135f382d8211e3c55f34fb36dfe61=<registry_host_name>:<port>/openshift4-ose-logging-kibana5:a767c8f0
        registry.redhat.io/openshift4/ose-oauth-proxy@sha256:6b4db07f6e6c962fc96473d86c44532c93b146bbefe311d0c348117bf759c506=<registry_host_name>:<port>/openshift4-ose-oauth-proxy:3754ea2b

        이 예에서 이러한 이미지만 미러링하려는 경우 mapping.txt 파일에서 다른 모든 항목을 제거하고 위의 두 줄만 남겨 둡니다.

    2. 네트워크 액세스가 제한되지 않은 워크스테이션에서 수정된 mapping.txt 파일을 사용하여 oc image mirror 명령을 사용하여 레지스트리에 이미지를 미러링합니다.

      $ oc image mirror \
          [-a ${REG_CREDS}] \
          --filter-by-os='.*' \
          -f ./manifests-redhat-operators-<random_number>/mapping.txt
      주의

      --filter-by-os 플래그가 설정되지 않았거나 .* 이외의 값으로 설정된 경우 명령에서 다른 아키텍처를 필터링하여 매니페스트 목록의 다이제스트( 다중 아키텍처 이미지 라고도 함)를 변경합니다. 잘못된 다이제스트로 인해 연결이 끊긴 클러스터에 해당 이미지와 Operator가 배포되지 않습니다.

  3. ImageContentSourcePolicy 오브젝트를 생성합니다.

    $ oc create -f ./manifests-redhat-operators-<random_number>/imageContentSourcePolicy.yaml

이제 CatalogSource 오브젝트를 생성하여 미러링된 콘텐츠를 참조할 수 있습니다.