4.4. 카탈로그 생성
OLM(Operator Lifecycle Manager) v1은 기술 프리뷰 기능 전용입니다. 기술 프리뷰 기능은 Red Hat 프로덕션 서비스 수준 계약(SLA)에서 지원되지 않으며 기능적으로 완전하지 않을 수 있습니다. 따라서 프로덕션 환경에서 사용하는 것은 권장하지 않습니다. 이러한 기능을 사용하면 향후 제품 기능을 조기에 이용할 수 있어 개발 과정에서 고객이 기능을 테스트하고 피드백을 제공할 수 있습니다.
Red Hat 기술 프리뷰 기능의 지원 범위에 대한 자세한 내용은 기술 프리뷰 기능 지원 범위를 참조하십시오.
카탈로그 유지 관리자는 OpenShift Container Platform의 OLM(Operator Lifecycle Manager) v1과 함께 사용할 파일 기반 카탈로그 형식으로 새 카탈로그를 생성할 수 있습니다.
현재 OLM(Operator Lifecycle Manager) v1은 Red Hat 제공 Operator 카탈로그와 같은 프라이빗 레지스트리를 인증할 수 없습니다. 이것은 확인된 문제입니다. 결과적으로 Red Hat Operator 카탈로그를 설치하는 데 사용하는 OLM v1 절차가 작동하지 않습니다. (OCPBUGS-36364)
4.4.1. 파일 기반 카탈로그 이미지 생성
opm
CLI를 사용하여 더 이상 사용되지 않는 SQLite 데이터베이스 형식을 대체하는 일반 텍스트 파일 기반 카탈로그 형식(JSON 또는 YAML)을 사용하는 카탈로그 이미지를 생성할 수 있습니다.
사전 요구 사항
-
opm
CLI를 설치했습니다. -
podman
버전 1.9.3 이상이 있습니다. - 번들 이미지가 빌드되어 Docker v2-2 를 지원하는 레지스트리로 푸시됩니다.
프로세스
카탈로그를 초기화합니다.
다음 명령을 실행하여 카탈로그의 디렉터리를 생성합니다.
$ mkdir <catalog_dir>
opm generate dockerfile
명령을 실행하여 카탈로그 이미지를 빌드할 수 있는 Dockerfile을 생성합니다.$ opm generate dockerfile <catalog_dir> \ -i registry.redhat.io/openshift4/ose-operator-registry-rhel9:v4.17 1
- 1
-i
플래그를 사용하여 공식 Red Hat 기본 이미지를 지정합니다. 그러지 않으면 Dockerfile에서 기본 업스트림 이미지를 사용합니다.
Dockerfile은 이전 단계에서 생성한 카탈로그 디렉터리와 동일한 상위 디렉터리에 있어야 합니다.
디렉터리 구조의 예
. 1 ├── <catalog_dir> 2 └── <catalog_dir>.Dockerfile 3
opm init
명령을 실행하여 카탈로그를 Operator의 패키지 정의로 채웁니다.$ opm init <operator_name> \ 1 --default-channel=preview \ 2 --description=./README.md \ 3 --icon=./operator-icon.svg \ 4 --output yaml \ 5 > <catalog_dir>/index.yaml 6
이 명령은 지정된 카탈로그 구성 파일에
olm.package
선언적 구성 blob을 생성합니다.
opm render
명령을 실행하여 카탈로그에 번들을 추가합니다.$ opm render <registry>/<namespace>/<bundle_image_name>:<tag> \ 1 --output=yaml \ >> <catalog_dir>/index.yaml 2
참고채널에는 하나 이상의 번들이 포함되어야 합니다.
번들에 채널 항목을 추가합니다. 예를 들어 다음 예제를 사양에 맞게 수정하고 <
catalog_dir>/index.yaml
파일에 추가합니다.채널 항목 예
--- schema: olm.channel package: <operator_name> name: preview entries: - name: <operator_name>.v0.1.0 1
- 1
<operator_name>
뒤의 마침표(.
)를 버전v
앞에 포함해야 합니다. 그렇지 않으면 항목이opm validate
명령을 전달하지 못합니다.
파일 기반 카탈로그를 확인합니다.
카탈로그 디렉터리에 대해
opm validate
명령을 실행합니다.$ opm validate <catalog_dir>
오류 코드가
0
인지 확인합니다.$ echo $?
출력 예
0
podman build
명령을 실행하여 카탈로그 이미지를 빌드합니다.$ podman build . \ -f <catalog_dir>.Dockerfile \ -t <registry>/<namespace>/<catalog_image_name>:<tag>
카탈로그 이미지를 레지스트리로 푸시합니다.
필요한 경우
podman login
명령을 실행하여 대상 레지스트리로 인증합니다.$ podman login <registry>
podman push
명령을 실행하여 카탈로그 이미지를 푸시합니다.$ podman push <registry>/<namespace>/<catalog_image_name>:<tag>
추가 리소스
4.4.2. 파일 기반 카탈로그 이미지 업데이트 또는 필터링
opm
CLI를 사용하여 파일 기반 카탈로그 형식을 사용하는 카탈로그 이미지를 업데이트하거나 필터링할 수 있습니다. 기존 카탈로그 이미지의 콘텐츠를 추출하면 필요에 따라 카탈로그를 수정할 수 있습니다. 예를 들면 다음과 같습니다.
- 패키지 추가
- 패키지 제거
- 기존 패키지 항목 업데이트
- 패키지, 채널 및 번들당 사용 중단 메시지 세부 정보
그런 다음 업데이트된 카탈로그 버전으로 이미지를 다시 빌드할 수 있습니다.
또는 미러 레지스트리에 카탈로그 이미지가 이미 있는 경우 oc-mirror CLI 플러그인을 사용하여 업데이트된 카탈로그 버전의 해당 카탈로그 이미지에서 제거된 이미지를 자동으로 정리하고 대상 레지스트리에 미러링할 수 있습니다.
oc-mirror 플러그인 및 이 사용 사례에 대한 자세한 내용은 "미러 미러 레지스트리 콘텐츠 업데이트" 섹션, 특히 "oc-mirror 플러그인을 사용하여 연결이 끊긴 설치를 위한 이미지 미러링" 섹션, 특히 "이미지 실행" 섹션을 참조하십시오.
사전 요구 사항
워크스테이션에 다음이 있습니다.
-
opm
CLI입니다. -
podman
버전 1.9.3 이상. - 파일 기반 카탈로그 이미지입니다.
이 카탈로그와 관련된 워크스테이션에서 최근에 초기화된 카탈로그 디렉터리 구조입니다.
초기화된 카탈로그 디렉터리가 없는 경우 디렉터리를 생성하고 Dockerfile을 생성합니다. 자세한 내용은 "파일 기반 카탈로그 이미지 생성" 절차의 " catalog" 단계를 참조하십시오.
-
프로세스
YAML 형식의 카탈로그 이미지의 콘텐츠를 카탈로그 디렉터리의
index.yaml
파일에 추출합니다.$ opm render <registry>/<namespace>/<catalog_image_name>:<tag> \ -o yaml > <catalog_dir>/index.yaml
참고또는
-o json
플래그를 사용하여 JSON 형식으로 출력할 수 있습니다.결과
index.yaml
파일의 내용을 사양으로 수정합니다.중요번들이 카탈로그에 게시되면 사용자 중 하나가 설치되었다고 가정합니다. 해당 버전이 설치된 사용자를 방지하려면 카탈로그의 이전에 게시된 모든 번들에 현재 또는 최신 채널 헤드에 대한 업데이트 경로가 있는지 확인합니다.
- Operator를 추가하려면 "파일 기반 카탈로그 이미지 생성" 프로세스에서 패키지, 번들 및 채널 항목을 생성하는 단계를 수행합니다.
Operator를 제거하려면 패키지와 관련된
olm.package
,olm.channel
,olm.bundle
blobs 세트를 삭제합니다. 다음 예제에서는 카탈로그에서example-operator
패키지를 제거하려면 삭제해야 하는 세트를 보여줍니다.예 4.12. 삭제된 항목의 예
--- defaultChannel: release-2.7 icon: base64data: <base64_string> mediatype: image/svg+xml name: example-operator schema: olm.package --- entries: - name: example-operator.v2.7.0 skipRange: '>=2.6.0 <2.7.0' - name: example-operator.v2.7.1 replaces: example-operator.v2.7.0 skipRange: '>=2.6.0 <2.7.1' - name: example-operator.v2.7.2 replaces: example-operator.v2.7.1 skipRange: '>=2.6.0 <2.7.2' - name: example-operator.v2.7.3 replaces: example-operator.v2.7.2 skipRange: '>=2.6.0 <2.7.3' - name: example-operator.v2.7.4 replaces: example-operator.v2.7.3 skipRange: '>=2.6.0 <2.7.4' name: release-2.7 package: example-operator schema: olm.channel --- image: example.com/example-inc/example-operator-bundle@sha256:<digest> name: example-operator.v2.7.0 package: example-operator properties: - type: olm.gvk value: group: example-group.example.io kind: MyObject version: v1alpha1 - type: olm.gvk value: group: example-group.example.io kind: MyOtherObject version: v1beta1 - type: olm.package value: packageName: example-operator version: 2.7.0 - type: olm.bundle.object value: data: <base64_string> - type: olm.bundle.object value: data: <base64_string> relatedImages: - image: example.com/example-inc/example-related-image@sha256:<digest> name: example-related-image schema: olm.bundle ---
-
Operator에 대한 사용 중단 메시지를 추가하거나 업데이트하려면 패키지의
index
.yaml 파일이 있는지 확인합니다..yaml
파일과 동일한 디렉터리에precationsdeprecations.yaml
파일 형식에 대한 자세한 내용은 "olm.deprecations 스키마"를 참조하십시오.
- 변경 사항을 저장하십시오.
카탈로그를 확인합니다.
$ opm validate <catalog_dir>
카탈로그를 다시 빌드합니다.
$ podman build . \ -f <catalog_dir>.Dockerfile \ -t <registry>/<namespace>/<catalog_image_name>:<tag>
업데이트된 카탈로그 이미지를 레지스트리로 푸시합니다.
$ podman push <registry>/<namespace>/<catalog_image_name>:<tag>
검증
-
웹 콘솔에서 관리
클러스터 설정 구성 페이지의 OperatorHub 구성 리소스로 이동합니다. 업데이트된 카탈로그 이미지의 pull 사양을 사용하도록 카탈로그 소스를 추가하거나 기존 카탈로그 소스를 업데이트합니다.
자세한 내용은 이 섹션의 "추가 리소스"의 "클러스터에 카탈로그 소스 추가"를 참조하십시오.
-
카탈로그 소스가 READY 상태인 후 Operator
OperatorHub 페이지로 이동하여 수행된 변경 사항이 Operator 목록에 반영되었는지 확인합니다.