4.8.2.3. 패키지 매니페스트 형식 카탈로그 이미지 업데이트

클러스터 관리자가 사용자 정의 Operator 카탈로그 이미지를 사용하도록 OperatorHub를 구성하면 관리자는 Red Hat에서 제공하는 앱 레지스트리 카탈로그에 수행된 업데이트를 캡처하여 최신 Operator에서 OpenShift Container Platform 클러스터를 최신 상태로 유지할 수 있습니다. 이러한 작업은 새 Operator 카탈로그 이미지를 빌드하고 내보낸 다음 CatalogSource 오브젝트의 기존 spec.image 매개변수를 새 이미지 다이제스트로 교체하여 수행됩니다.

이 예제의 절차에서는 OperatorHub에 사용할 사용자 정의 redhat-operators 카탈로그 이미지를 이미 구성한 것으로 가정합니다.

참고

Windows 및 macOS 버전은 oc adm catalog build 명령을 제공하지 않으므로 이 프로세스에는 Linux 버전의 oc 클라이언트만 사용할 수 있습니다.

사전 요구 사항

  • 무제한 네트워크 액세스가 가능한 워크스테이션
  • oc 버전 4.3.5 이상 Linux 클라이언트
  • podman 버전 1.9.3+
  • Docker v2-2를 지원하는 미러 레지스트리에 액세스

    중요

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

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

    $ REG_CREDS=${XDG_RUNTIME_DIR}/containers/auth.json
  • quay.io 계정에서 액세스할 수 있는 비공개 네임스페이스로 작업하는 경우 Quay 인증 토큰을 설정해야 합니다. quay.io 자격 증명을 사용하여 로그인 API에 대해 요청하여 --auth-token 플래그와 함께 사용할 AUTH_TOKEN 환경 변수를 설정합니다.

    $ AUTH_TOKEN=$(curl -sH "Content-Type: application/json" \
        -XPOST https://quay.io/cnr/api/v1/users/login -d '
        {
            "user": {
                "username": "'"<quay_username>"'",
                "password": "'"<quay_password>"'"
            }
        }' | jq -r '.token')

프로세스

  1. 무제한 네트워크 액세스가 가능한 워크스테이션에서 대상 미러 레지스트리를 사용하여 인증합니다.

    $ podman login <registry_host_name>
  2. 빌드 중 기본 이미지를 가져올 수 있도록 registry.redhat.io로 인증합니다.

    $ podman login registry.redhat.io
  3. Quay.io에서 redhat-operators 카탈로그를 기반으로 새 카탈로그 이미지를 빌드하고 태그를 지정한 후 미러 레지스트리로 내보냅니다.

    $ oc adm catalog build \
        --appregistry-org redhat-operators \1
        --from=registry.redhat.io/openshift4/ose-operator-registry:v4.7 \2
        --filter-by-os="linux/amd64" \3
        --to=<registry_host_name>:<port>/olm/redhat-operators:v2 \4
        [-a ${REG_CREDS}] \5
        [--insecure] \6
        [--auth-token "${AUTH_TOKEN}"] 7
    1
    App Registry 인스턴스에서 가져올 조직(네임스페이스).
    2
    대상 OpenShift Container Platform 클러스터 주 버전 및 부 버전과 일치하는 태그를 사용하여 --from을 Operator 레지스트리 기본 이미지로 설정합니다.
    3
    기본 이미지에 사용할 운영 체제 및 아키텍처로 --filter-by-os를 설정합니다. 대상 OpenShift Container Platform 클러스터와 일치해야 합니다. 유효한 값은 linux/amd64, linux/ppc64lelinux/s390x입니다.
    4
    카탈로그 이미지 이름을 지정하고 태그를 포함합니다. 예를 들면 업데이트된 카탈로그이므로 v2입니다.
    5
    선택 사항: 필요한 경우 레지스트리 자격 증명 파일의 위치를 지정합니다.
    6
    선택 사항: 대상 레지스트리에 대한 신뢰성을 구성하지 않으려면 --insecure 플래그를 추가합니다.
    7
    선택 사항: 공용이 아닌 다른 애플리케이션 레지스트리 카탈로그가 사용되는 경우 Quay 인증 토큰을 지정합니다.

    출력 예

    INFO[0013] loading Bundles                               dir=/var/folders/st/9cskxqs53ll3wdn434vw4cd80000gn/T/300666084/manifests-829192605
    ...
    Pushed sha256:f73d42950021f9240389f99ddc5b0c7f1b533c054ba344654ff1edaf6bf827e3 to example_registry:5000/olm/redhat-operators:v2

  4. 카탈로그의 콘텐츠를 대상 레지스트리에 미러링합니다. 다음의 oc adm catalog mirror 명령은 사용자 정의 Operator 카탈로그 이미지의 콘텐츠를 추출하여 미러링에 필요한 매니페스트를 생성하고 레지스트리에 이미지를 미러링합니다.

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

    $ oc replace -f ./manifests-redhat-operators-<random_number>
    중요

    imageContentSourcePolicy.yaml 매니페스트를 적용하지 않아도 될 수 있습니다. 변경이 필요한지 확인하려면 파일의 diff를 완료합니다.

  6. 카탈로그 이미지를 참조하는 CatalogSource 오브젝트를 업데이트합니다.

    1. CatalogSource 오브젝트에 대한 원본 catalogsource.yaml 파일이 있는 경우 다음을 수행합니다.

      1. catalogsource.yaml 파일을 편집하여 spec.image 필드의 새 카탈로그 이미지를 참조합니다.

        apiVersion: operators.coreos.com/v1alpha1
        kind: CatalogSource
        metadata:
          name: my-operator-catalog
          namespace: openshift-marketplace
        spec:
          sourceType: grpc
          image: <registry_host_name>:<port>/olm/redhat-operators:v2 1
          displayName: My Operator Catalog
          publisher: grpc
        1
        새 Operator 카탈로그 이미지를 지정합니다.
      2. 업데이트된 파일을 사용하여 CatalogSource 오브젝트를 교체합니다.

        $ oc replace -f catalogsource.yaml
    2. 또는 다음 명령을 사용하여 카탈로그 소스를 편집하고 spec.image 매개변수에서 새 카탈로그 이미지를 참조합니다.

      $ oc edit catalogsource <catalog_source_name> -n openshift-marketplace

업데이트된 Operator는 OpenShift Container Platform 클러스터의 OperatorHub 페이지에서 사용할 수 있어야 합니다.