4.9. 제한된 네트워크에서 Operator Lifecycle Manager 사용
제한된 네트워크(연결이 끊긴 클러스터)에 설치된 OpenShift Container Platform 클러스터의 경우 OLM(Operator Lifecycle Manager)은 기본적으로 원격 레지스트리에서 호스팅되는 Red Hat 제공 OperatorHub 소스에 액세스할 수 없습니다. 이러한 원격 소스에는 완전한 인터넷 연결이 필요하기 때문입니다.
그러나 클러스터 관리자는 워크스테이션에 완전한 인터넷 액세스 권한이 있는 경우 제한된 네트워크에서 OLM을 사용하도록 클러스터를 활성화할 수 있습니다. 원격 OperatorHub 콘텐츠를 가져오는 데 완전한 인터넷 액세스 권한이 필요한 워크스테이션은 원격 소스의 로컬 미러를 준비하고 콘텐츠를 미러 레지스트리로 내보내는 데 사용됩니다.
미러 레지스트리는 워크스테이션 및 연결이 끊긴 클러스터 모두에 연결해야 하는 베스천 호스트에 있거나 미러링된 콘텐츠를 연결이 끊긴 환경에 물리적으로 이동하기 위해 이동식 미디어가 필요한 완전히 연결이 끊긴 호스트 또는 에어갭(Airgap) 호스트에 있을 수 있습니다.
이 가이드에서는 제한된 네트워크에서 OLM을 활성화하는 데 필요한 다음 프로세스를 설명합니다.
- OLM의 기본 원격 OperatorHub 소스를 비활성화합니다.
- 완전한 인터넷 액세스가 가능한 워크스테이션을 사용하여 OperatorHub 콘텐츠의 로컬 미러를 생성하고 미러 레지스트리로 내보냅니다.
- 기본 원격 소스가 아닌 미러 레지스트리의 로컬 소스에서 Operator를 설치하고 관리하도록 OLM을 구성합니다.
제한된 네트워크에서 OLM을 활성화한 후에는 제한되지 않은 워크스테이션을 계속 사용하여 최신 버전의 Operator가 출시될 때 로컬 OperatorHub 소스를 업데이트할 수 있습니다.
OLM은 로컬 소스에서 Operator를 관리할 수 있지만 지정된 Operator를 제한된 네트워크에서 실행할 수 있는지는 Operator에 따라 다릅니다. Operator는 다음을 수행해야 합니다.
-
Operator에서 기능을 수행하는 데 필요할 수 있는 관련 이미지 또는 기타 컨테이너 이미지를 CSV(
ClusterServiceVersion
) 오브젝트의relatedImages
매개변수에 나열합니다. - 태그가 아닌 다이제스트(SHA)를 통해 지정된 모든 이미지를 참조합니다.
Infrastucstor Features에서 연결되지 않은 필터를 선택하여 연결이 끊긴 모드에서 실행을 지원하는 Red Hat Operators 목록을 검색할 수 있습니다.
4.9.1. 사전 요구 사항
-
cluster-admin
권한이 있는 사용자로 OpenShift Container Platform 클러스터에 로그인합니다. -
기본 카탈로그를 정리하고 선택한 Operator 서브 세트만 미러링하려면
opm
CLI를 설치합니다.
IBM Z의 제한된 네트워크에서 OLM을 사용하는 경우 레지스트리를 배치하는 디렉터리에 12GB 이상을 할당해야 합니다.
4.9.2. 기본 OperatorHub 소스 비활성화
Red Hat 및 커뮤니티 프로젝트에서 제공하는 콘텐츠를 소싱하는 Operator 카탈로그는 OpenShift Container Platform을 설치하는 동안 기본적으로 OperatorHub용으로 구성됩니다. 제한된 네트워크 환경에서는 클러스터 관리자로서 기본 카탈로그를 비활성화해야 합니다. 그런 다음 로컬 카탈로그 소스를 사용하도록 OperatorHub를 구성할 수 있습니다.
절차
OperatorHub
오브젝트에disableAllDefaultSources: true
를 추가하여 기본 카탈로그의 소스를 비활성화합니다.$ oc patch OperatorHub cluster --type json \ -p '[{"op": "add", "path": "/spec/disableAllDefaultSources", "value": true}]'
또는 웹 콘솔을 사용하여 카탈로그 소스를 관리할 수 있습니다. 관리자
4.9.3. 인덱스 이미지 정리
Operator 번들 포맷을 기반으로 하는 인덱스 이미지는 Operator 카탈로그의 컨테이너화된 스냅샷입니다. 지정된 패키지 목록을 제외한 인덱스를 모두 정리하여 원하는 Operator만 포함하는 소스 인덱스 복사본을 생성할 수 있습니다.
제한된 네트워크 OpenShift Container Platform 클러스터에서 미러링된 콘텐츠를 사용하도록 OLM(Operator Lifecycle Manager)을 구성할 때는 기본 카탈로그에서 Operator 서브 세트만 미러링하려면 이 정리 방법을 사용하십시오.
이 절차의 단계에서 대상 레지스트리는 무제한 네트워크 액세스 권한을 사용하여 워크스테이션에서 액세스할 수 있는 기존 미러 레지스트리입니다. 이 예제에서는 기본 redhat-operators
카탈로그의 인덱스 이미지를 정리하는 방법도 보여주지만 프로세스는 모든 인덱스 이미지에서 동일합니다.
사전 요구 사항
- 무제한 네트워크 액세스가 가능한 워크스테이션
-
podman
버전 1.9.3+ -
grpcurl
(타사 명령줄 도구) -
opm
버전 1.18.0 이상 Docker v2-2를 지원하는 레지스트리에 액세스
중요OpenShift Container Platform 클러스터의 내부 레지스트리는 미러링 프로세스 중에 필요한 태그 없이 푸시를 지원하지 않으므로 대상 레지스트리로 사용할 수 없습니다.
절차
registry.redhat.io
로 인증합니다.$ podman login registry.redhat.io
대상 레지스트리로 인증합니다.
$ podman login <target_registry>
정리된 인덱스에 포함하려는 패키지 목록을 결정합니다.
컨테이너에서 정리하려는 소스 인덱스 이미지를 실행합니다. 예를 들면 다음과 같습니다.
$ podman run -p50051:50051 \ -it registry.redhat.io/redhat/redhat-operator-index:v4.8
출력 예
Trying to pull registry.redhat.io/redhat/redhat-operator-index:v4.8... Getting image source signatures Copying blob ae8a0c23f5b1 done ... INFO[0000] serving registry database=/database/index.db port=50051
별도의 터미널 세션에서
grpcurl
명령을 사용하여 인덱스에서 제공하는 패키지 목록을 가져옵니다.$ grpcurl -plaintext localhost:50051 api.Registry/ListPackages > packages.out
packages.out
파일을 검사하고 정리된 인덱스에 보관할 이 목록에 있는 패키지 이름을 확인합니다. 예를 들면 다음과 같습니다.패키지 목록 조각의 예
... { "name": "advanced-cluster-management" } ... { "name": "jaeger-product" } ... { { "name": "quay-operator" } ...
-
podman run
명령을 실행한 터미널 세션에서 Ctrl 및 C를 눌러 컨테이너 프로세스를 중지합니다.
다음 명령을 실행하여 지정된 패키지를 제외한 소스 인덱스를 모두 정리합니다.
$ opm index prune \ -f registry.redhat.io/redhat/redhat-operator-index:v4.8 \1 -p advanced-cluster-management,jaeger-product,quay-operator \2 [-i registry.redhat.io/openshift4/ose-operator-registry:v4.8] \3 -t <target_registry>:<port>/<namespace>/redhat-operator-index:v4.8 4
다음 명령을 실행하여 새 인덱스 이미지를 대상 레지스트리로 내보냅니다.
$ podman push <target_registry>:<port>/<namespace>/redhat-operator-index:v4.8
<namespace>
는 레지스트리의 기존 네임스페이스입니다. 예를 들어 미러링된 콘텐츠를 모두 내보내기 위해olm-mirror
네임스페이스를 생성할 수 있습니다.
4.9.4. Operator 카탈로그 미러링
oc adm catalog mirror
명령을 사용하여 Red Hat 제공 카탈로그 또는 사용자 정의 카탈로그의 Operator 콘텐츠를 컨테이너 이미지 레지스트리에 미러링할 수 있습니다. 대상 레지스트리는 Docker v2-2를 지원해야 합니다. 제한된 네트워크에 있는 클러스터의 경우 이 레지스트리는 제한된 네트워크 클러스터 설치 중 생성된 미러 레지스트리와 같이 클러스터에 네트워크 액세스 권한이 있는 레지스트리일 수 있습니다.
OpenShift Container Platform 클러스터의 내부 레지스트리는 미러링 프로세스 중에 필요한 태그 없이 푸시를 지원하지 않으므로 대상 레지스트리로 사용할 수 없습니다.
oc adm catalog mirror
명령은 또한 Red Hat 제공 인덱스 이미지이든 자체 사용자 정의 빌드 인덱스 이미지이든 미러링 프로세스 중에 지정하는 인덱스 이미지를 대상 레지스트리에 자동으로 미러링합니다. 그러면 미러링된 인덱스 이미지를 사용하여 OLM(Operator Lifecycle Manager)이 OpenShift Container Platform 클러스터에 미러링된 카탈로그를 로드할 수 있는 카탈로그 소스를 생성할 수 있습니다.
사전 요구 사항
- 워크스테이션에서 무제한 네트워크 액세스가 가능합니다.
-
podman
버전이 1.9.3 이상입니다. - Docker v2-2를 지원하는 미러 레지스트리에 액세스할 수 있습니다.
-
미러 레지스트리에서 미러링된 Operator 콘텐츠를 저장하는 데 사용할 네임스페이스를 결정합니다. 예를 들어
olm-mirror
네임스페이스를 생성할 수 있습니다. - 미러 레지스트리가 인터넷에 액세스할 수 없는 경우 이동식 미디어를 무제한 네트워크 액세스 권한이 있는 워크스테이션에 연결합니다.
registry.redhat.io를 포함한 프라이빗 레지스트리로
작업하는 경우REG_CREDS
환경 변수를 이후 단계에서 사용할 레지스트리 자격 증명의 파일 경로로 설정합니다. 예를 들어podman
CLI의 경우:$ REG_CREDS=${XDG_RUNTIME_DIR}/containers/auth.json
프로세스
Red Hat 제공 카탈로그를 미러링하려면 무제한 네트워크 액세스 권한이 있는 워크스테이션에서 다음 명령을 실행하여
registry.redhat.io
로 인증합니다.$ podman login registry.redhat.io
oc adm catalog mirror
명령은 인덱스 이미지의 콘텐츠를 추출하여 미러링에 필요한 매니페스트를 생성합니다. 명령의 기본 동작은 매니페스트를 생성한 다음 인덱스 이미지 자체뿐만 아니라 인덱스 이미지의 모든 이미지 콘텐츠를 미러 레지스트리에 자동으로 미러링합니다. 또는 미러 레지스트리가 완전히 연결이 끊긴 호스트 또는 에어갭(Airgap) 호스트에 있는 경우 먼저 콘텐츠를 이동식 미디어로 미러링하고 미디어를 연결이 끊긴 환경으로 이동한 다음 미디어에서 레지스트리로 해당 콘텐츠를 미러링할 수 있습니다.옵션 A: 미러 레지스트리가 무제한 네트워크 액세스 권한이 있는 워크스테이션과 동일한 네트워크에 있는 경우 워크스테이션에서 다음 작업을 수행합니다.
미러 레지스트리에 인증이 필요한 경우 다음 명령을 실행하여 레지스트리에 로그인합니다.
$ podman login <mirror_registry>
다음 명령을 실행하여 콘텐츠를 미러링합니다.
$ oc adm catalog mirror \ <index_image> \1 <mirror_registry>:<port>/<namespace> \2 [-a ${REG_CREDS}] \3 [--insecure] \4 [--index-filter-by-os='<platform>/<arch>'] \5 [--manifests-only] 6
- 1
- 미러링할 카탈로그의 인덱스 이미지를 지정합니다. 예를 들어 이전에 생성한 정리된 인덱스 이미지 또는
registry.redhat.io/redhat/redhat-operator-index:v4.8
과 같은 기본 카탈로그의 소스 인덱스 이미지 중 하나일 수 있습니다. - 2
- Operator 콘텐츠를 미러링할 대상 레지스트리 및 네임스페이스의 정규화된 도메인 이름(FQDN)을 지정합니다. 여기서
<namespace>
는 레지스트리의 기존 네임스페이스입니다. 예를 들어 미러링된 콘텐츠를 모두 내보내기 위해olm-mirror
네임스페이스를 생성할 수 있습니다. - 3
- 선택 사항: 필요한 경우 registry.
redhat.io
에{REG_CREDS}
가 필요합니다. - 4
- 선택 사항: 대상 레지스트리에 대한 신뢰성을 구성하지 않으려면
--insecure
플래그를 추가합니다. - 5
- 선택 사항: 여러 변형을 사용할 수 있을 때 선택할 인덱스 이미지의 플랫폼 및 아키텍처를 지정합니다. 이미지는
'<platform>/<arch>[/<variant>]’
로 전달됩니다. 이는 인덱스에서 참조하는 이미지에는 적용되지 않습니다. 유효한 값은linux/amd64
,linux/ppc64le
,linux/s390x
,.*
입니다. - 6
- 선택 사항: 미러링에 필요한 매니페스트만 생성하고 실제로 이미지 콘텐츠를 레지스트리에 미러링하지 않습니다. 이 선택 사항은 미러링할 항목을 검토하는 데 유용할 수 있으며 패키지의 서브 세트만 필요한 경우 매핑 목록을 변경할 수 있습니다. 그런 다음
oc image mirror
명령과 함께mapping.txt
파일을 사용하여 이후 단계에서 수정된 이미지 목록을 미러링할 수 있습니다. 이 플래그는 카탈로그에서 콘텐츠의 고급 선택적 미러링에만 사용됩니다. 이전에 인덱스 이미지를 정리하기 위해 사용한 경우opm index prune
명령은 대부분의 카탈로그 관리 사용 사례에 적합합니다.
출력 예
src image has index label for database path: /database/index.db using database path mapping: /database/index.db:/tmp/153048078 wrote database to /tmp/153048078 1 ... wrote mirroring manifests to manifests-redhat-operator-index-1614211642 2
참고Red Hat Quay는 중첩 리포지토리를 지원하지 않습니다. 결과적으로
oc adm catalog mirror
명령을 실행하면401
무단 오류와 함께 실패합니다. 이 문제를 해결하려면oc adm catalog mirror
명령을 실행할 때--max-components=2
옵션을 사용하여 중첩된 리포지토리 생성을 비활성화할 수 있습니다. 이 해결 방법에 대한 자세한 내용은 Quay 레지스트리 Knowledgebase 솔루션과 함께 catalog mirror 명령을 사용하는 동안 인가되지 않은 오류가 발생한 것을 참조하십시오.
옵션 B: 미러 레지스트리가 연결이 끊긴 호스트에 있는 경우 다음 작업을 수행합니다.
무제한 네트워크 액세스 권한이 있는 워크스테이션에서 다음 명령을 실행하여 콘텐츠를 로컬 파일에 미러링합니다.
$ oc adm catalog mirror \ <index_image> \1 file:///local/index \2 [-a ${REG_CREDS}] \ [--insecure] \ [--index-filter-by-os='<platform>/<arch>']
출력 예
... info: Mirroring completed in 5.93s (5.915MB/s) wrote mirroring manifests to manifests-my-index-1614985528 1 To upload local images to a registry, run: oc adm catalog mirror file://local/index/myrepo/my-index:v1 REGISTRY/REPOSITORY 2
-
현재 디렉터리에 생성된
v2/
디렉터리를 이동식 미디어로 복사합니다. - 물리적으로 미디어를 제거하고 연결이 끊긴 환경의 호스트에 연결하여 미러 레지스트리에 액세스할 수 있습니다.
미러 레지스트리에 인증이 필요한 경우 연결이 끊긴 환경의 호스트에서 다음 명령을 실행하여 레지스트리에 로그인합니다.
$ podman login <mirror_registry>
v2/
디렉터리가 포함된 상위 디렉터리에서 다음 명령을 실행하여 로컬 파일에서 미러 레지스트리로 이미지를 업로드합니다.$ oc adm catalog mirror \ file://local/index/<repo>/<index_image>:<tag> \1 <mirror_registry>:<port>/<namespace> \2 [-a ${REG_CREDS}] \ [--insecure] \ [--index-filter-by-os='<platform>/<arch>']
참고Red Hat Quay는 중첩 리포지토리를 지원하지 않습니다. 결과적으로
oc adm catalog mirror
명령을 실행하면401
무단 오류와 함께 실패합니다. 이 문제를 해결하려면oc adm catalog mirror
명령을 실행할 때--max-components=2
옵션을 사용하여 중첩된 리포지토리 생성을 비활성화할 수 있습니다. 이 해결 방법에 대한 자세한 내용은 Quay 레지스트리 Knowledgebase 솔루션과 함께 catalog mirror 명령을 사용하는 동안 인가되지 않은 오류가 발생한 것을 참조하십시오.oc adm catalog mirror
명령을 다시 실행합니다. 새로 미러링된 인덱스 이미지를 소스로 사용하고 이전 단계에서 사용한 것과 동일한 미러 레지스트리 네임스페이스를 대상으로 사용합니다.$ oc adm catalog mirror \ <mirror_registry>:<port>/<index_image> \ <mirror_registry>:<port>/<namespace> \ --manifests-only \1 [-a ${REG_CREDS}] \ [--insecure]
- 1
- 이 단계에서는 명령이 미러링된 모든 콘텐츠를 다시 복사하지 않도록
--manifests-only
플래그가 필요합니다.
중요이전 단계에서 생성된
imageContentSourcePolicy.yaml
파일의 이미지 매핑은 로컬 경로에서 유효한 미러 위치로 업데이트해야 하므로 이 단계가 필요합니다. 이렇게 하지 않으면 이후 단계에서ImageContentSourcePolicy
개체를 생성할 때 오류가 발생합니다.
콘텐츠를 레지스트리에 미러링한 후 현재 디렉터리에 생성된 매니페스트 디렉터리를 검사합니다.
참고매니페스트 디렉터리 이름은 이후 단계에서 사용됩니다.
이전 단계에서 동일한 네트워크의 레지스트리에 콘텐츠를 미러링한 경우 디렉터리 이름은 다음 형식을 취합니다.
manifests-<index_image_name>-<random_number>
이전 단계에서 연결이 끊긴 호스트의 레지스트리에 콘텐츠를 미러링한 경우 디렉터리 이름은 다음 형식을 취합니다.
manifests-index/<namespace>/<index_image_name>-<random_number>
매니페스트 디렉터리에는 다음 파일이 포함되어 있으며, 이 중 일부는 추가 수정이 필요할 수 있습니다.
catalogSource.yaml
파일은 인덱스 이미지 태그 및 기타 관련 메타데이터로 미리 채워진CatalogSource
오브젝트에 대한 기본 정의입니다. 이 파일은 있는 그대로 사용하거나 카탈로그 소스를 클러스터에 추가하도록 수정할 수 있습니다.중요콘텐츠를 로컬 파일에 미러링한 경우
metadata.name
필드에서 .name 필드에서 백슬래시(/
) 문자를 제거하려면catalogSource.yaml
파일을 수정해야 합니다. 그러지 않으면 오브젝트 생성을 시도할 때 "잘못된 리소스 이름" 오류로 인해 실패합니다.imageContentSourcePolicy.yaml
파일은 Operator 매니페스트에 저장된 이미지 참조와 미러링된 레지스트리 간에 변환하도록 노드를 구성할 수 있는ImageContentSourcePolicy
오브젝트를 정의합니다.참고클러스터에서
ImageContentSourcePolicy
오브젝트를 사용하여 저장소 미러링을 구성하는 경우 미러링된 레지스트리에 대한 글로벌 풀 시크릿만 사용할 수 있습니다. 프로젝트에 풀 시크릿을 추가할 수 없습니다.mapping.txt
파일에는 모든 소스 이미지와 대상 레지스트리에서 매핑할 위치가 포함되어 있습니다. 이 파일은oc image mirror
명령과 호환되며 미러링 구성을 추가로 사용자 정의하는 데 사용할 수 있습니다.중요미러링 프로세스 중
--manifests-only
플래그를 사용한 후 미러링할 패키지의 서브 세트를 추가로 트리밍하려면mapping.txt
파일을 수정하고oc image mirror
명령으로 파일을 사용하는 데 대한 OpenShift Container Platform 4.7 설명서의 패키지 매니페스트 형식 카탈로그 이미지 미러링 절차에 있는 단계를 참조하십시오. 추가 조치를 수행한 후 이 프로세스를 계속할 수 있습니다.
연결이 끊긴 클러스터에 액세스할 수 있는 호스트에서 manifests 디렉터리에
image
ContentSourcePolicy
.yaml 파일을 지정하도록 다음 명령을 실행하여 ImageContentSourcePolicy(✓P) 오브젝트를 생성합니다.$ oc create -f <path/to/manifests/dir>/imageContentSourcePolicy.yaml
여기서
<path/to/manifests/dir>
은 미러링된 콘텐츠의 매니페스트 디렉터리 경로입니다.이제 미러링된 인덱스 이미지 및 Operator 콘텐츠를 참조하도록
CatalogSource
오브젝트를 생성할 수 있습니다.
4.9.5. 인덱스 이미지에서 카탈로그 생성
인덱스 이미지에서 Operator 카탈로그를 생성하고 OLM(Operator Lifecycle Manager)과 함께 사용하도록 OpenShift Container Platform 클러스터에 적용할 수 있습니다.
사전 요구 사항
- 인덱스 이미지를 빌드하여 레지스트리로 내보냈습니다.
프로세스
인덱스 이미지를 참조하는
CatalogSource
오브젝트를 생성합니다.oc adm catalog mirror
명령을 사용하여 카탈로그를 대상 레지스트리에 미러링하는 경우 생성된catalogSource.yaml
파일을 시작점으로 사용할 수 있습니다.다음을 사양에 맞게 수정하고
catalogsource.yaml
파일로 저장합니다.apiVersion: operators.coreos.com/v1alpha1 kind: CatalogSource metadata: name: my-operator-catalog 1 namespace: openshift-marketplace 2 spec: sourceType: grpc image: <registry>:<port>/<namespace>/redhat-operator-index:v4.8 3 displayName: My Operator Catalog publisher: <publisher_name> 4 updateStrategy: registryPoll: 5 interval: 30m
- 1
- 레지스트리에 업로드하기 전에 콘텐츠를 로컬 파일에 미러링한 경우 오브젝트를 생성할 때 "잘못된 리소스 이름" 오류가 발생하지 않도록
metadata.name
필드에서 백슬래시(/
) 문자를 제거합니다. - 2
- 카탈로그 소스를 모든 네임스페이스의 사용자가 전역적으로 사용할 수 있도록 하려면
openshift-marketplace
네임스페이스를 지정합니다. 그러지 않으면 카탈로그의 범위가 지정되고 해당 네임스페이스에 대해서만 사용할 수 있도록 다른 네임스페이스를 지정할 수 있습니다. - 3
- 인덱스 이미지를 지정합니다.
- 4
- 카탈로그를 게시하는 이름 또는 조직 이름을 지정합니다.
- 5
- 카탈로그 소스는 새 버전을 자동으로 확인하여 최신 상태를 유지할 수 있습니다.
파일을 사용하여
CatalogSource
오브젝트를 생성합니다.$ oc apply -f catalogSource.yaml
다음 리소스가 성공적으로 생성되었는지 확인합니다.
Pod를 확인합니다.
$ oc get pods -n openshift-marketplace
출력 예
NAME READY STATUS RESTARTS AGE my-operator-catalog-6njx6 1/1 Running 0 28s marketplace-operator-d9f549946-96sgr 1/1 Running 0 26h
카탈로그 소스를 확인합니다.
$ oc get catalogsource -n openshift-marketplace
출력 예
NAME DISPLAY TYPE PUBLISHER AGE my-operator-catalog My Operator Catalog grpc 5s
패키지 매니페스트 확인합니다.
$ oc get packagemanifest -n openshift-marketplace
출력 예
NAME CATALOG AGE jaeger-product My Operator Catalog 93s
이제 OpenShift Container Platform 웹 콘솔의 OperatorHub 페이지에서 Operator를 설치할 수 있습니다.
추가 리소스
- 인덱스 이미지가 프라이빗 레지스트리에서 호스팅되고 인증이 필요한 경우 프라이빗 레지스트리에서 Operator용 이미지에 액세스를 참조하십시오.
4.9.6. 인덱스 이미지 업데이트
사용자 정의 인덱스 이미지를 참조하는 카탈로그 소스를 사용하도록 OperatorHub를 구성하면 클러스터 관리자가 인덱스 이미지에 번들 이미지를 추가하여 클러스터에 사용 가능한 Operator를 최신 상태로 유지할 수 있습니다.
opm index add
명령을 사용하여 기존 인덱스 이미지를 업데이트할 수 있습니다. 제한된 네트워크의 경우 업데이트된 콘텐츠도 클러스터에 다시 미러링해야 합니다.
사전 요구 사항
-
opm
버전 1.12.3 이상 -
podman
버전 1.9.3+ - 인덱스 이미지를 빌드하여 레지스트리로 내보냈습니다.
- 기존 카탈로그 소스에서 인덱스 이미지를 참조합니다.
프로세스
번들 이미지를 추가하여 기존 인덱스를 업데이트합니다.
$ 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
다음과 같습니다.
<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.8
과 같이 지정합니다. <updated_tag>
-
업데이트된 인덱스 이미지에 적용할 이미지 태그를 지정합니다(예:
4.8.1
).
명령 예
$ opm index add \ --bundles quay.io/ocs-dev/ocs-operator@sha256:c7f11097a628f092d8bad148406aa0e0951094a03445fd4bc0775431ef683a41 \ --from-index mirror.example.com/abc/abc-redhat-operator-index:4.8 \ --tag mirror.example.com/abc/abc-redhat-operator-index:4.8.1 \ --pull-tool podman
업데이트된 인덱스 이미지를 내보냅니다.
$ podman push <registry>/<namespace>/<existing_index_image>:<updated_tag>
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
명령을 사용해야 합니다.OLM(Operator Lifecycle Manager)이 정기적으로 카탈로그 소스에서 참조하는 인덱스 이미지를 자동으로 폴링하면 새 패키지가 성공적으로 추가되었는지 확인합니다.
$ oc get packagemanifests -n openshift-marketplace
추가 리소스