4.9.6. 인덱스 이미지 업데이트

사용자 정의 인덱스 이미지를 참조하는 카탈로그 소스를 사용하도록 OperatorHub를 구성하면 클러스터 관리자가 인덱스 이미지에 번들 이미지를 추가하여 클러스터에 사용 가능한 Operator를 최신 상태로 유지할 수 있습니다.

opm index add 명령을 사용하여 기존 인덱스 이미지를 업데이트할 수 있습니다. 제한된 네트워크의 경우 업데이트된 콘텐츠도 클러스터에 다시 미러링해야 합니다.

사전 요구 사항

  • opm 버전 1.12.3 이상
  • podman 버전 1.9.3+
  • 인덱스 이미지를 빌드하여 레지스트리로 내보냈습니다.
  • 기존 카탈로그 소스에서 인덱스 이미지를 참조합니다.

프로세스

  1. 번들 이미지를 추가하여 기존 인덱스를 업데이트합니다.

    $ opm index add \
        --bundles <registry>/<namespace>/<new_bundle_image>@sha256:<digest> \1
        --from-index <registry>/<namespace>/<existing_index_image>:<existing_tag> \2
        --tag <registry>/<namespace>/<existing_index_image>:<updated_tag> \3
        --pull-tool podman 4
    1
    --bundles 플래그는 인덱스에 추가할 추가 번들 이미지의 쉼표로 구분된 목록을 지정합니다.
    2
    --from-index 플래그는 이전에 내보낸 인덱스를 지정합니다.
    3
    --tag 플래그는 업데이트된 인덱스 이미지에 적용할 이미지 태그를 지정합니다.
    4
    pull-tool 플래그는 컨테이너 이미지를 가져오는 데 사용하는 툴을 지정합니다.

    다음과 같습니다.

    <registry>
    quay.io 또는 mirror.example. com 과 같은 레지스트리의 호스트 이름을 지정합니다.
    <namespace>
    ocs-dev 또는 abc 와 같은 레지스트리의 네임스페이스를 지정합니다.
    <new_bundle_image>
    ocs-operator 와 같이 레지스트리에 추가할 새 번들 이미지를 지정합니다.
    <digest>
    번들 이미지의 SHA 이미지 ID 또는 다이제스트를 지정합니다(예: c7f11097a628f092d8bad148406aa0e0951094a03445fd4bc0775431ef683a41).
    <existing_index_image>
    이전에 내보낸 이미지를 지정합니다(예: abc-redhat-operator-index ).
    <existing_tag>
    이전에 내보낸 이미지 태그를 4.7 과 같이 지정합니다.
    <updated_tag>
    업데이트된 인덱스 이미지에 적용할 이미지 태그를 4.7.1 과 같이 지정합니다.

    명령 예

    $ opm index add \
        --bundles quay.io/ocs-dev/ocs-operator@sha256:c7f11097a628f092d8bad148406aa0e0951094a03445fd4bc0775431ef683a41 \
        --from-index mirror.example.com/abc/abc-redhat-operator-index:4.7 \
        --tag mirror.example.com/abc/abc-redhat-operator-index:4.7.1 \
        --pull-tool podman

  2. 업데이트된 인덱스 이미지를 내보냅니다.

    $ podman push <registry>/<namespace>/<existing_index_image>:<updated_tag>
  3. Operator 카탈로그 미러링 절차에 있는 단계를 다시 수행하여 업데이트된 콘텐츠를 미러링합니다. 그러나 ICSP(ImageContentSourcePolicy) 오브젝트 생성에 대한 단계에 도달하면 oc create 명령 대신 oc replace 명령을 사용합니다. 예를 들면 다음과 같습니다.

    $ oc replace -f ./manifests-redhat-operator-index-<random_number>/imageContentSourcePolicy.yaml

    이 변경 사항은 오브젝트가 이미 존재하고 업데이트해야 하므로 필요합니다.

    참고

    일반적으로 oc apply 명령을 사용하여 이전에 oc apply를 사용하여 생성한 기존 오브젝트를 업데이트할 수 있습니다. 그러나 ICSP 오브젝트의 metadata.annotations 필드 크기와 관련하여 알려진 문제로 인해 현재 이 단계에 oc replace 명령을 사용해야 합니다.

  4. OLM(Operator Lifecycle Manager)이 정기적으로 카탈로그 소스에서 참조하는 인덱스 이미지를 자동으로 폴링하면 새 패키지가 성공적으로 추가되었는지 확인합니다.

    $ oc get packagemanifests -n openshift-marketplace