5장. 클러스터 확장


5.1. 클러스터 확장 관리

카탈로그가 클러스터에 추가되면 카탈로그에 게시된 확장 및 Operator의 버전, 패치 및 무선 업데이트에 액세스할 수 있습니다.

CR(사용자 정의 리소스)을 사용하여 CLI에서 선언적으로 확장을 관리할 수 있습니다.

참고

OpenShift Container Platform 4.20의 경우 OLM v1에 대한 문서화된 절차는 CLI 기반 전용입니다. 또는 관리자는 YAML 가져오기검색 페이지와 같은 일반 방법을 사용하여 웹 콘솔에서 관련 오브젝트를 생성하고 볼 수 있습니다. 그러나 기존 소프트웨어 카탈로그설치된 Operator 페이지에는 OLM v1 구성 요소가 아직 표시되지 않습니다.

5.1.1. 지원되는 확장

현재 OLM(Operator Lifecycle Manager) v1에서는 다음 기준을 모두 충족하는 클러스터 확장 설치를 지원합니다.

  • 확장에서는 OLM(Classic)에 도입된 registry+v1 번들 형식을 사용해야 합니다.
  • 확장 기능은 AllNamespaces 설치 모드를 통한 설치를 지원해야 합니다.

    • OpenShift Container Platform 4.20에서 SingleNamespaceOwnNamespace 설치 모드를 기술 프리뷰 기능으로 사용할 수 있습니다.
  • 확장에서는 Webhook를 사용하지 않아야 합니다.

    • OpenShift Container Platform 4.20에서 Webhook를 기술 프리뷰 기능으로 사용하는 확장을 설치할 수 있습니다.
  • 확장자는 다음 파일 기반 카탈로그 속성을 사용하여 종속성을 선언해서는 안 됩니다.

    • olm.gvk.required
    • olm.package.required
    • olm.constraint

OLM v1은 설치하려는 확장이 이러한 제약 조건을 충족하는지 확인합니다. 설치하려는 확장이 이러한 제약 조건을 충족하지 않으면 클러스터 확장 상태에 오류 메시지가 출력됩니다.

중요

특정 네임스페이스에 확장을 배포하고 Webhook를 사용하여 확장 기능을 설치하는 것은 기술 프리뷰 기능 전용입니다. 기술 프리뷰 기능은 Red Hat 프로덕션 서비스 수준 계약(SLA)에서 지원되지 않으며 기능적으로 완전하지 않을 수 있습니다. 따라서 프로덕션 환경에서 사용하는 것은 권장하지 않습니다. 이러한 기능을 사용하면 향후 제품 기능을 조기에 이용할 수 있어 개발 과정에서 고객이 기능을 테스트하고 피드백을 제공할 수 있습니다.

Red Hat 기술 프리뷰 기능의 지원 범위에 대한 자세한 내용은 기술 프리뷰 기능 지원 범위를 참조하십시오.

OLM(Operator Lifecycle Manager) v1은 OLM(Classic)에 도입된 OperatorConditions API를 지원하지 않습니다.

확장 프로그램이 OperatorConditions API만 사용하여 업데이트를 관리하는 경우 확장이 올바르게 설치되지 않을 수 있습니다. 이 API에 의존하는 대부분의 확장은 시작 시 실패하지만 조정 중에 일부 확장이 실패할 수 있습니다.

이 문제를 해결하려면 확장 기능을 특정 버전에 고정할 수 있습니다. 확장을 업데이트하려는 경우 확장 기능을 참조하여 확장 기능을 새 버전에 고정하는 것이 안전한지 확인합니다.

5.1.2. 카탈로그에서 설치할 Operator 찾기

클러스터에 카탈로그를 추가한 후 카탈로그를 쿼리하여 설치할 Operator 및 확장을 찾을 수 있습니다.

현재 OLM(Operator Lifecycle Manager) v1에서는 카탈로그에서 관리하는 클러스터 카탈로그에서 쿼리할 수 없습니다. OLM v1에서는 opmjq CLI 툴을 사용하여 카탈로그 레지스트리를 쿼리해야 합니다.

사전 요구 사항

  • 클러스터에 카탈로그를 추가했습니다.
  • jq CLI 툴을 설치했습니다.
  • opm CLI 툴을 설치했습니다.

프로세스

  1. AllNamespaces 설치 모드를 지원하고 Webhook를 사용하지 않는 확장 목록을 반환하려면 다음 명령을 입력합니다.

    $ opm render <catalog_registry_url>:<tag> \
      | jq -cs '[.[] | select(.schema == "olm.bundle" \
      and (.properties[] | select(.type == "olm.csv.metadata").value.installModes[] \
      | select(.type == "AllNamespaces" and .supported == true)) \
      and .spec.webhookdefinitions == null) | .package] | unique[]'
    Copy to Clipboard Toggle word wrap

    다음과 같습니다.

    catalog_registry_url
    registry.redhat.io/redhat/redhat-operator-index 와 같은 카탈로그 레지스트리의 URL을 지정합니다.
    tag

    v4.20 또는 latest 와 같은 카탈로그의 태그 또는 버전을 지정합니다.

    예 5.1. 명령 예

    $ opm render \
      registry.redhat.io/redhat/redhat-operator-index:v4.20 \
      | jq -cs '[.[] | select(.schema == "olm.bundle" \
      and (.properties[] | select(.type == "olm.csv.metadata").value.installModes[] \
      | select(.type == "AllNamespaces" and .supported == true)) \
      and .spec.webhookdefinitions == null) | .package] | unique[]'
    Copy to Clipboard Toggle word wrap

    예 5.2. 출력 예

    "3scale-operator"
    "amq-broker-rhel8"
    "amq-online"
    "amq-streams"
    "amq-streams-console"
    "ansible-automation-platform-operator"
    "ansible-cloud-addons-operator"
    "apicast-operator"
    "authorino-operator"
    "aws-load-balancer-operator"
    "bamoe-kogito-operator"
    "cephcsi-operator"
    "cincinnati-operator"
    "cluster-logging"
    "cluster-observability-operator"
    "compliance-operator"
    "container-security-operator"
    "cryostat-operator"
    "datagrid"
    "devspaces"
    ...
    Copy to Clipboard Toggle word wrap
  2. 다음 명령을 실행하여 확장 메타데이터의 콘텐츠를 검사합니다.

    $ opm render <catalog_registry_url>:<tag> \
      | jq -s '.[] | select( .schema == "olm.package") \
      | select( .name == "<package_name>")'
    Copy to Clipboard Toggle word wrap

    예 5.3. 명령 예

    $ opm render \
      registry.redhat.io/redhat/redhat-operator-index:v4.20 \
      | jq -s '.[] | select( .schema == "olm.package") \
      | select( .name == "openshift-pipelines-operator-rh")'
    Copy to Clipboard Toggle word wrap

    예 5.4. 출력 예

    {
      "schema": "olm.package",
      "name": "openshift-pipelines-operator-rh",
      "defaultChannel": "latest",
      "icon": {
        "base64data": "iVBORw0KGgoAAAANSUhE...",
        "mediatype": "image/png"
      }
    }
    Copy to Clipboard Toggle word wrap

5.1.2.1. 공통 카탈로그 쿼리

opmjq CLI 툴을 사용하여 카탈로그를 쿼리할 수 있습니다. 다음 표에는 확장 라이프사이클을 설치, 업데이트 및 관리할 때 사용할 수 있는 일반적인 카탈로그 쿼리가 표시되어 있습니다.

명령 구문

$ opm render <catalog_registry_url>:<tag> | <jq_request>
Copy to Clipboard Toggle word wrap

다음과 같습니다.

catalog_registry_url
registry.redhat.io/redhat/redhat-operator-index 와 같은 카탈로그 레지스트리의 URL을 지정합니다.
tag
v4.20 또는 latest 와 같은 카탈로그의 태그 또는 버전을 지정합니다.
jq_request
카탈로그에서 실행할 쿼리를 지정합니다.

예 5.5. 명령 예

$ opm render \
  registry.redhat.io/redhat/redhat-operator-index:v4.20 \
  | jq -cs '[.[] | select(.schema == "olm.bundle" and (.properties[] \
  | select(.type == "olm.csv.metadata").value.installModes[] \
  | select(.type == "AllNamespaces" and .supported == true)) \
  and .spec.webhookdefinitions == null) \
  | .package] | unique[]'
Copy to Clipboard Toggle word wrap
Expand
표 5.1. 일반적인 패키지 쿼리
쿼리요청

카탈로그에서 사용 가능한 패키지

$ opm render <catalog_registry_url>:<tag> \
  | jq -s '.[] | select( .schema == "olm.package")'
Copy to Clipboard Toggle word wrap

AllNamespaces 설치 모드를 지원하고 Webhook를 사용하지 않는 패키지

$ opm render <catalog_registry_url>:<tag> \
  | jq -cs '[.[] | select(.schema == "olm.bundle" and (.properties[] \
  | select(.type == "olm.csv.metadata").value.installModes[] \
  | select(.type == "AllNamespaces" and .supported == true)) \
  and .spec.webhookdefinitions == null) \
  | .package] | unique[]'
Copy to Clipboard Toggle word wrap

패키지 메타데이터

$ opm render <catalog_registry_url>:<tag> \
  | jq -s '.[] | select( .schema == "olm.package") \
  | select( .name == "<package_name>")'
Copy to Clipboard Toggle word wrap

패키지의 카탈로그 Blob

$ opm render <catalog_registry_url>:<tag> \
  | jq -s '.[] | select( .package == "<package_name>")'
Copy to Clipboard Toggle word wrap
Expand
표 5.2. 공통 채널 쿼리
쿼리요청

패키지의 채널

$ opm render <catalog_registry_url>:<tag> \
  | jq -s '.[] | select( .schema == "olm.channel" ) \
  | select( .package == "<package_name>") | .name'
Copy to Clipboard Toggle word wrap

채널의 버전

$ opm render <catalog_registry_url>:<tag> \
  | jq -s '.[] | select( .package == "<package_name>" ) \
  | select( .schema == "olm.channel" ) \
  | select( .name == "<channel_name>" ) .entries \
  | .[] | .name'
Copy to Clipboard Toggle word wrap
  • 채널의 최신 버전
  • 업그레이드 경로
$ opm render <catalog_registry_url>:<tag> \
  | jq -s '.[] | select( .schema == "olm.channel" ) \
  | select ( .name == "<channel_name>") \
  | select( .package == "<package_name>")'
Copy to Clipboard Toggle word wrap
Expand
표 5.3. 공통 번들 쿼리
쿼리요청

패키지의 번들

$ opm render <catalog_registry_url>:<tag> \
  | jq -s '.[] | select( .schema == "olm.bundle" ) \
  | select( .package == "<package_name>") | .name'
Copy to Clipboard Toggle word wrap
  • 번들 종속 항목
  • 사용 가능한 API
$ opm render <catalog_registry_url>:<tag> \
  | jq -s '.[] | select( .schema == "olm.bundle" ) \
  | select ( .name == "<bundle_name>") \
  | select( .package == "<package_name>")'
Copy to Clipboard Toggle word wrap

5.1.3. 클러스터 확장 권한

OLM(Operator Lifecycle Manager) Classic에서는 클러스터 관리자 권한이 있는 단일 서비스 계정에서 모든 클러스터 확장을 관리합니다.

OLM v1은 기본적으로 OLM(Classic)보다 더 안전하도록 설계되었습니다. OLM v1은 확장의 CR(사용자 정의 리소스)에 지정된 서비스 계정을 사용하여 클러스터 확장을 관리합니다. 클러스터 관리자는 각 클러스터 확장에 대한 서비스 계정을 생성할 수 있습니다. 결과적으로 관리자는 최소 권한 원칙을 따르고 해당 확장을 설치하고 관리할 역할 기반 액세스 제어(RBAC)만 할당할 수 있습니다.

클러스터 역할 또는 역할에 각 권한을 추가해야 합니다. 그런 다음 클러스터 역할 또는 역할을 클러스터 역할 바인딩 또는 역할 바인딩을 사용하여 서비스 계정에 바인딩해야 합니다.

RBAC의 범위를 클러스터 또는 네임스페이스로 지정할 수 있습니다. 클러스터 역할 및 클러스터 역할 바인딩을 사용하여 클러스터에 대한 권한 범위를 지정합니다. 역할 및 역할 바인딩을 사용하여 네임스페이스에 대한 권한 범위를 지정합니다. 클러스터 또는 네임스페이스에 대한 권한의 범위를 지정하는 것은 설치 및 관리할 확장의 설계에 따라 달라집니다.

중요

다음 절차 및 가독성을 개선하기 위해 다음 예제 매니페스트에서는 클러스터에 범위가 지정된 권한을 사용합니다. 클러스터 대신 확장의 네임스페이스로 범위를 지정하여 일부 권한을 추가로 제한할 수 있습니다.

설치된 새 확장 버전에 추가 권한이 필요한 경우 클러스터 관리자가 해당 권한을 부여할 때까지 OLM v1이 업데이트 프로세스를 중지합니다.

5.1.3.1. 네임스페이스 생성

클러스터 확장을 설치하고 관리하기 위해 서비스 계정을 생성하기 전에 네임스페이스를 생성해야 합니다.

사전 요구 사항

  • cluster-admin 권한이 있는 계정을 사용하여 OpenShift Container Platform 클러스터에 액세스할 수 있습니다.

프로세스

  • 다음 명령을 실행하여 설치할 확장의 서비스 계정에 대한 새 네임스페이스를 생성합니다.

    $ oc adm new-project <new_namespace>
    Copy to Clipboard Toggle word wrap

5.1.3.2. 확장에 대한 서비스 계정 생성

클러스터 확장을 설치, 관리 및 업데이트하려면 서비스 계정을 생성해야 합니다.

사전 요구 사항

  • cluster-admin 권한이 있는 계정을 사용하여 OpenShift Container Platform 클러스터에 액세스할 수 있습니다.

프로세스

  1. 다음 예와 유사한 서비스 계정을 생성합니다.

    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: <extension>-installer
      namespace: <namespace>
    Copy to Clipboard Toggle word wrap

    예 5.6. extension-service-account.yaml 파일의 예

    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: pipelines-installer
      namespace: pipelines
    Copy to Clipboard Toggle word wrap
  2. 다음 명령을 실행하여 서비스 계정을 적용합니다.

    $ oc apply -f extension-service-account.yaml
    Copy to Clipboard Toggle word wrap

5.1.3.3. 확장 번들 매니페스트 다운로드

opm CLI 툴을 사용하여 설치하려는 확장의 번들 매니페스트를 다운로드합니다. 선택한 CLI 툴 또는 텍스트 편집기를 사용하여 매니페스트를 보고 확장을 설치하고 관리하는 데 필요한 권한을 찾습니다.

사전 요구 사항

  • cluster-admin 권한이 있는 계정을 사용하여 OpenShift Container Platform 클러스터에 액세스할 수 있습니다.
  • 어떤 확장을 설치할지 결정합니다.
  • opm CLI 툴을 설치했습니다.

프로세스

  1. 다음 명령을 실행하여 설치할 확장의 사용 가능한 버전 및 이미지를 검사합니다.

    $ opm render <registry_url>:<tag_or_version> | \
      jq -cs '.[] | select( .schema == "olm.bundle" ) | \
      select( .package == "<extension_name>") | \
      {"name":.name, "image":.image}'
    Copy to Clipboard Toggle word wrap

    예 5.7. 명령 예

    $ opm render registry.redhat.io/redhat/redhat-operator-index:v4.20 | \
      jq -cs '.[] | select( .schema == "olm.bundle" ) | \
      select( .package == "openshift-pipelines-operator-rh") | \
      {"name":.name, "image":.image}'
    Copy to Clipboard Toggle word wrap

    예 5.8. 출력 예

    {"name":"openshift-pipelines-operator-rh.v1.14.3","image":"registry.redhat.io/openshift-pipelines/pipelines-operator-bundle@sha256:3f64b29f6903981470d0917b2557f49d84067bccdba0544bfe874ec4412f45b0"}
    {"name":"openshift-pipelines-operator-rh.v1.14.4","image":"registry.redhat.io/openshift-pipelines/pipelines-operator-bundle@sha256:dd3d18367da2be42539e5dde8e484dac3df33ba3ce1d5bcf896838954f3864ec"}
    {"name":"openshift-pipelines-operator-rh.v1.14.5","image":"registry.redhat.io/openshift-pipelines/pipelines-operator-bundle@sha256:f7b19ce26be742c4aaa458d37bc5ad373b5b29b20aaa7d308349687d3cbd8838"}
    {"name":"openshift-pipelines-operator-rh.v1.15.0","image":"registry.redhat.io/openshift-pipelines/pipelines-operator-bundle@sha256:22be152950501a933fe6e1df0e663c8056ca910a89dab3ea801c3bb2dc2bf1e6"}
    {"name":"openshift-pipelines-operator-rh.v1.15.1","image":"registry.redhat.io/openshift-pipelines/pipelines-operator-bundle@sha256:64afb32e3640bb5968904b3d1a317e9dfb307970f6fda0243e2018417207fd75"}
    {"name":"openshift-pipelines-operator-rh.v1.15.2","image":"registry.redhat.io/openshift-pipelines/pipelines-operator-bundle@sha256:8a593c1144709c9aeffbeb68d0b4b08368f528e7bb6f595884b2474bcfbcafcd"}
    {"name":"openshift-pipelines-operator-rh.v1.16.0","image":"registry.redhat.io/openshift-pipelines/pipelines-operator-bundle@sha256:a46b7990c0ad07dae78f43334c9bd5e6cba7b50ca60d3f880099b71e77bed214"}
    {"name":"openshift-pipelines-operator-rh.v1.16.1","image":"registry.redhat.io/openshift-pipelines/pipelines-operator-bundle@sha256:29f27245e93b3f605647993884751c490c4a44070d3857a878d2aee87d43f85b"}
    {"name":"openshift-pipelines-operator-rh.v1.16.2","image":"registry.redhat.io/openshift-pipelines/pipelines-operator-bundle@sha256:2037004666526c90329f4791f14cb6cc06e8775cb84ba107a24cc4c2cf944649"}
    {"name":"openshift-pipelines-operator-rh.v1.17.0","image":"registry.redhat.io/openshift-pipelines/pipelines-operator-bundle@sha256:d75065e999826d38408049aa1fde674cd1e45e384bfdc96523f6bad58a0e0dbc"}
    Copy to Clipboard Toggle word wrap
  2. 다음 명령을 실행하여 설치할 번들의 이미지를 추출하도록 디렉터리를 만듭니다.

    $ mkdir <new_dir>
    Copy to Clipboard Toggle word wrap
  3. 다음 명령을 실행하여 디렉터리로 변경합니다.

    $ cd <new_dir>
    Copy to Clipboard Toggle word wrap
  4. 설치하려는 버전의 이미지 참조를 찾아 다음 명령을 실행합니다.

    $ oc image extract <full_path_to_registry_image>@sha256:<sha>
    Copy to Clipboard Toggle word wrap

    명령 예

    $ oc image extract registry.redhat.io/openshift-pipelines/pipelines-operator-bundle@sha256:f7b19ce26be742c4aaa458d37bc5ad373b5b29b20aaa7d308349687d3cbd8838
    Copy to Clipboard Toggle word wrap

  5. 다음 명령을 실행하여 매니페스트 디렉터리로 변경합니다.

    $ cd manifests
    Copy to Clipboard Toggle word wrap
  6. 다음 명령을 입력하여 매니페스트 디렉터리의 콘텐츠를 확인합니다. 출력에 확장을 설치, 관리 및 운영하는 데 필요한 리소스의 매니페스트가 나열됩니다.

    $ tree
    Copy to Clipboard Toggle word wrap

    예 5.9. 출력 예

    .
    ├── manifests
    │   ├── config-logging_v1_configmap.yaml
    │   ├── openshift-pipelines-operator-monitor_monitoring.coreos.com_v1_servicemonitor.yaml
    │   ├── openshift-pipelines-operator-prometheus-k8s-read-binding_rbac.authorization.k8s.io_v1_rolebinding.yaml
    │   ├── openshift-pipelines-operator-read_rbac.authorization.k8s.io_v1_role.yaml
    │   ├── openshift-pipelines-operator-rh.clusterserviceversion.yaml
    │   ├── operator.tekton.dev_manualapprovalgates.yaml
    │   ├── operator.tekton.dev_openshiftpipelinesascodes.yaml
    │   ├── operator.tekton.dev_tektonaddons.yaml
    │   ├── operator.tekton.dev_tektonchains.yaml
    │   ├── operator.tekton.dev_tektonconfigs.yaml
    │   ├── operator.tekton.dev_tektonhubs.yaml
    │   ├── operator.tekton.dev_tektoninstallersets.yaml
    │   ├── operator.tekton.dev_tektonpipelines.yaml
    │   ├── operator.tekton.dev_tektonresults.yaml
    │   ├── operator.tekton.dev_tektontriggers.yaml
    │   ├── tekton-config-defaults_v1_configmap.yaml
    │   ├── tekton-config-observability_v1_configmap.yaml
    │   ├── tekton-config-read-rolebinding_rbac.authorization.k8s.io_v1_clusterrolebinding.yaml
    │   ├── tekton-config-read-role_rbac.authorization.k8s.io_v1_clusterrole.yaml
    │   ├── tekton-operator-controller-config-leader-election_v1_configmap.yaml
    │   ├── tekton-operator-info_rbac.authorization.k8s.io_v1_rolebinding.yaml
    │   ├── tekton-operator-info_rbac.authorization.k8s.io_v1_role.yaml
    │   ├── tekton-operator-info_v1_configmap.yaml
    │   ├── tekton-operator_v1_service.yaml
    │   ├── tekton-operator-webhook-certs_v1_secret.yaml
    │   ├── tekton-operator-webhook-config-leader-election_v1_configmap.yaml
    │   ├── tekton-operator-webhook_v1_service.yaml
    │   ├── tekton-result-read-rolebinding_rbac.authorization.k8s.io_v1_clusterrolebinding.yaml
    │   └── tekton-result-read-role_rbac.authorization.k8s.io_v1_clusterrole.yaml
    ├── metadata
    │   ├── annotations.yaml
    │   └── properties.yaml
    └── root
        └── buildinfo
            ├── content_manifests
            │   └── openshift-pipelines-operator-bundle-container-v1.16.2-3.json
            └── Dockerfile-openshift-pipelines-pipelines-operator-bundle-container-v1.16.2-3
    Copy to Clipboard Toggle word wrap

다음 단계

  • 선호하는 CLI 도구 또는 텍스트 편집기를 사용하여 manifests 디렉터리에 있는 CSV(클러스터 서비스 버전) 파일의 install.spec.clusterpermissions 스탠자의 내용을 확인합니다. 다음 예제에서는 Red Hat OpenShift Pipelines Operator의 openshift-pipelines-operator-rh.clusterserviceversion.yaml 파일을 참조합니다.
  • 다음 절차에서 클러스터 역할 파일에 권한을 할당하는 동안 이 파일을 참조로 열어 둡니다.

5.1.3.4. 클러스터 확장을 설치하고 관리하는 데 필요한 권한

필요한 권한을 할당하려면 클러스터 확장의 번들 이미지에 포함된 매니페스트를 검사해야 합니다. 서비스 계정에는 다음 리소스를 생성하고 관리하기 위해 충분한 RBAC(역할 기반 액세스 제어)가 필요합니다.

중요

특정 리소스 이름에 대한 최소 권한 및 범위 권한 원칙을 따릅니다.

승인 플러그인
OpenShift Container Platform 클러스터는 OwnerReferencesPermissionEnforcement 승인 플러그인을 사용하므로 클러스터 확장에는 blockOwnerDeletionownerReferences 종료자를 업데이트할 수 있는 권한이 있어야 합니다.
확장 컨트롤러를 위한 클러스터 역할 및 클러스터 역할 바인딩
설치 서비스 계정이 확장 컨트롤러에 대한 클러스터 역할 및 클러스터 역할 바인딩을 생성하고 관리할 수 있도록 RBAC를 정의해야 합니다.
CSV(클러스터 서비스 버전)
클러스터 확장의 CSV에 정의된 리소스에 대한 RBAC를 정의해야 합니다.
클러스터 범위 번들 리소스
번들에 포함된 클러스터 범위 리소스를 생성하고 관리하려면 RBAC를 정의해야 합니다. 클러스터 범위 리소스가 ClusterRole 과 같은 다른 리소스 유형과 일치하는 경우 resources 또는 resourceNames 필드의 기존 규칙에 리소스 추가할 수 있습니다.
CRD(사용자 정의 리소스 정의)
설치 서비스 계정이 확장에 대한 CRD를 생성하고 관리할 수 있도록 RBAC를 정의해야 합니다. 또한 확장 컨트롤러에 서비스 계정에 RBAC를 부여하여 해당 CRD를 관리해야 합니다.
배포
서비스 및 구성 맵과 같이 확장 컨트롤러에 필요한 배포를 생성하고 관리하려면 설치 서비스 계정에 대한 RBAC를 정의해야 합니다.
확장 권한
CSV에 정의된 권한 및 클러스터 권한에 대한 RBAC를 포함해야 합니다. 설치 서비스 계정에는 이러한 권한을 실행하는 데 필요한 확장 컨트롤러에 이러한 권한을 부여할 수 있어야 합니다.
네임스페이스 범위 번들 리소스
네임스페이스 범위 번들 리소스에 대한 RBAC를 정의해야 합니다. 설치 서비스 계정에는 구성 맵 또는 서비스와 같은 리소스를 생성하고 관리할 수 있는 권한이 필요합니다.
역할 및 역할 바인딩
CSV에 정의된 역할 또는 역할 바인딩에 대한 RBAC를 정의해야 합니다. 설치 서비스 계정에는 해당 역할 및 역할 바인딩을 생성하고 관리할 수 있는 권한이 필요합니다.
Service accounts
설치 서비스 계정이 확장 컨트롤러의 서비스 계정을 생성하고 관리할 수 있도록 RBAC를 정의해야 합니다.

5.1.3.5. 확장에 대한 클러스터 역할 생성

설치하려는 확장의 필수 역할 기반 액세스 제어(RBAC)를 정의하려면 CSV(클러스터 서비스 버전)의 install.spec.clusterpermissions 스탠자와 확장의 매니페스트를 검토해야 합니다. CSV에서 새 매니페스트로 필요한 RBAC를 복사하여 클러스터 역할을 생성해야 합니다.

작은 정보

OLM v1에서 확장 설치 및 업데이트 프로세스를 테스트하려면 다음 클러스터 역할을 사용하여 클러스터 관리자 권한을 부여할 수 있습니다. 이 매니페스트는 테스트 목적으로만 사용됩니다. 프로덕션 클러스터에서는 사용해서는 안 됩니다.

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: <extension>-installer-clusterrole
rules:
- apiGroups: ["*"]
  resources: ["*"]
  verbs: ["*"]
Copy to Clipboard Toggle word wrap

다음 절차에서는 Red Hat OpenShift Pipelines Operator의 openshift-pipelines-operator-rh.clusterserviceversion.yaml 파일을 예로 사용합니다. 예제에는 OpenShift Pipelines Operator를 설치하고 관리하는 데 필요한 RBAC 발췌가 포함되어 있습니다. 전체 매니페스트는 "Red Hat OpenShift Pipelines Operator의 클러스터 역할 예"를 참조하십시오.

중요

다음 절차 및 가독성을 개선하기 위해 다음 예제 매니페스트에서는 클러스터에 범위가 지정된 권한을 사용합니다. 클러스터 대신 확장의 네임스페이스로 범위를 지정하여 일부 권한을 추가로 제한할 수 있습니다.

사전 요구 사항

  • cluster-admin 권한이 있는 계정을 사용하여 OpenShift Container Platform 클러스터에 액세스할 수 있습니다.
  • 설치하려는 확장의 이미지 참조에 매니페스트를 다운로드했습니다.

프로세스

  1. 다음 예와 유사한 새 클러스터 역할 매니페스트를 생성합니다.

    <extension>-cluster-role.yaml 파일

    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRole
    metadata:
      name: <extension>-installer-clusterrole
    Copy to Clipboard Toggle word wrap

  2. 다음 예와 같이 확장에서 종료자를 업데이트할 수 있는 권한을 포함하도록 클러스터 역할 매니페스트를 편집합니다.

    Example <extension>-cluster-role.yaml

    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRole
    metadata:
      name: pipelines-installer-clusterrole
    rules:
    - apiGroups:
      - olm.operatorframework.io
      resources:
      - clusterextensions/finalizers
      verbs:
      - update
      # Scoped to the name of the ClusterExtension
      resourceNames:
      - <metadata_name> 
    1
    Copy to Clipboard Toggle word wrap

    1
    확장의 CR(사용자 정의 리소스)의 metadata.name 필드의 값을 지정합니다.
  3. 확장의 CSV 파일에서 rules.resources 필드에서 clusterroleclusterrolebindings 값을 검색합니다.

    • 다음 예와 유사하게 API 그룹, 리소스, 동사 및 리소스 이름을 매니페스트에 복사합니다.

      클러스터 역할 매니페스트의 예

      apiVersion: rbac.authorization.k8s.io/v1
      kind: ClusterRole
      metadata:
        name: pipelines-installer-clusterrole
      rules:
      # ...
      # ClusterRoles and ClusterRoleBindings for the controllers of the extension
      - apiGroups:
        - rbac.authorization.k8s.io
        resources:
        - clusterroles
        verbs:
        - create 
      1
      
        - list
        - watch
      - apiGroups:
        - rbac.authorization.k8s.io
        resources:
        - clusterroles
        verbs:
        - get
        - update
        - patch
        - delete
        resourceNames: 
      2
      
        - "*"
      - apiGroups:
        - rbac.authorization.k8s.io
        resources:
        - clusterrolebindings
        verbs:
        - create
        - list
        - watch
      - apiGroups:
        - rbac.authorization.k8s.io
        resources:
        - clusterrolebindings
        verbs:
        - get
        - update
        - patch
        - delete
        resourceNames:
        - "*"
      # ...
      Copy to Clipboard Toggle word wrap

      1
      특정 리소스 이름( resourceNames 필드)에 대한 생성,나열감시 권한을 지정할 수 없습니다. 이러한 권한의 범위를 해당 리소스( 리소스 필드)로 지정해야 합니다.
      2
      일부 리소스 이름은 < package_name>.<hash> 형식을 사용하여 생성됩니다. 확장을 설치한 후 확장 컨트롤러의 클러스터 역할 및 클러스터 역할 바인딩의 리소스 이름을 찾습니다. 이 예제의 와일드카드 문자를 생성된 이름으로 바꾸고 최소 권한 원칙을 따릅니다.
  4. 확장의 CSV 파일의 rules.resources 필드에서 customresourcedefinitions 값을 검색합니다.

    • 다음 예와 유사하게 API 그룹, 리소스, 동사 및 리소스 이름을 매니페스트에 복사합니다.

      apiVersion: rbac.authorization.k8s.io/v1
      kind: ClusterRole
      metadata:
        name: pipelines-installer-clusterrole
      rules:
      # ...
      # Custom resource definitions of the extension
      - apiGroups:
        - apiextensions.k8s.io
        resources:
        - customresourcedefinitions
        verbs:
        - create
        - list
        - watch
      - apiGroups:
        - apiextensions.k8s.io
        resources:
        - customresourcedefinitions
        verbs:
        - get
        - update
        - patch
        - delete
        resourceNames:
        - manualapprovalgates.operator.tekton.dev
        - openshiftpipelinesascodes.operator.tekton.dev
        - tektonaddons.operator.tekton.dev
        - tektonchains.operator.tekton.dev
        - tektonconfigs.operator.tekton.dev
        - tektonhubs.operator.tekton.dev
        - tektoninstallersets.operator.tekton.dev
        - tektonpipelines.operator.tekton.dev
        - tektonresults.operator.tekton.dev
        - tektontriggers.operator.tekton.dev
      # ...
      Copy to Clipboard Toggle word wrap
  5. rules.resources 사양에서 permissionsclusterPermissions 값을 사용하여 CSV 파일에서 스탠자를 검색합니다.

    • 다음 예와 유사하게 API 그룹, 리소스, 동사 및 리소스 이름을 매니페스트에 복사합니다.

      apiVersion: rbac.authorization.k8s.io/v1
      kind: ClusterRole
      metadata:
        name: pipelines-installer-clusterrole
      rules:
      # ...
      # Excerpt from install.spec.clusterPermissions
      - apiGroups:
        - ''
        resources:
        - nodes
        - pods
        - services
        - endpoints
        - persistentvolumeclaims
        - events
        - configmaps
        - secrets
        - pods/log
        - limitranges
        verbs:
        - create
        - list
        - watch
        - delete
        - deletecollection
        - patch
        - get
        - update
      - apiGroups:
        - extensions
        - apps
        resources:
        - ingresses
        - ingresses/status
        verbs:
        - create
        - list
        - watch
        - delete
        - patch
        - get
        - update
       # ...
      Copy to Clipboard Toggle word wrap
  6. install.spec.deployments 스탠자에서 CSV 파일에서 리소스를 검색합니다.

    • 다음 예와 유사하게 API 그룹, 리소스, 동사 및 리소스 이름을 매니페스트에 복사합니다.

      apiVersion: rbac.authorization.k8s.io/v1
      kind: ClusterRole
      metadata:
        name: pipelines-installer-clusterrole
      rules:
      # ...
      # Excerpt from install.spec.deployments
      - apiGroups:
        - apps
        resources:
        - deployments
        verbs:
        - create
        - list
        - watch
      - apiGroups:
        - apps
        resources:
        - deployments
        verbs:
        - get
        - update
        - patch
        - delete
        # scoped to the extension controller deployment name
        resourceNames:
        - openshift-pipelines-operator
        - tekton-operator-webhook
      # ...
      Copy to Clipboard Toggle word wrap
  7. 확장의 CSV 파일에서 rules.resources 필드에서 서비스configmaps 값을 검색합니다.

    • 다음 예와 유사하게 API 그룹, 리소스, 동사 및 리소스 이름을 매니페스트에 복사합니다.

      apiVersion: rbac.authorization.k8s.io/v1
      kind: ClusterRole
      metadata:
        name: pipelines-installer-clusterrole
      rules:
      # ...
      # Services
      - apiGroups:
        - ""
        resources:
        - services
        verbs:
        - create
      - apiGroups:
        - ""
        resources:
        - services
        verbs:
        - get
        - list
        - watch
        - update
        - patch
        - delete
        # scoped to the service name
        resourceNames:
        - openshift-pipelines-operator-monitor
        - tekton-operator
        - tekton-operator-webhook
      # configmaps
      - apiGroups:
        - ""
        resources:
        - configmaps
        verbs:
        - create
      - apiGroups:
        - ""
        resources:
        - configmaps
        verbs:
        - get
        - list
        - watch
        - update
        - patch
        - delete
        # scoped to the configmap name
        resourceNames:
        - config-logging
        - tekton-config-defaults
        - tekton-config-observability
        - tekton-operator-controller-config-leader-election
        - tekton-operator-info
        - tekton-operator-webhook-config-leader-election
      - apiGroups:
        - operator.tekton.dev
        resources:
        - tekton-config-read-role
        - tekton-result-read-role
        verbs:
        - get
        - watch
        - list
      Copy to Clipboard Toggle word wrap
  8. 다음 명령을 실행하여 클러스터에 클러스터 역할 매니페스트를 추가합니다.

    $ oc apply -f <extension>-installer-clusterrole.yaml
    Copy to Clipboard Toggle word wrap

    명령 예

    $ oc apply -f pipelines-installer-clusterrole.yaml
    Copy to Clipboard Toggle word wrap

5.1.3.6. Red Hat OpenShift Pipelines Operator의 클러스터 역할의 예

OpenShift Pipelines Operator의 전체 클러스터 역할 매니페스트 예제는 다음 예제를 참조하십시오.

---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: pipelines-installer-clusterrole
rules:
- apiGroups:
  - olm.operatorframework.io
  resources:
  - clusterextensions/finalizers
  verbs:
  - update
  # Scoped to the name of the ClusterExtension
  resourceNames:
  - pipes # the value from <metadata.name> from the extension's custom resource (CR)
# ClusterRoles and ClusterRoleBindings for the controllers of the extension
- apiGroups:
  - rbac.authorization.k8s.io
  resources:
  - clusterroles
  verbs:
  - create
  - list
  - watch
- apiGroups:
  - rbac.authorization.k8s.io
  resources:
  - clusterroles
  verbs:
  - get
  - update
  - patch
  - delete
  resourceNames:
  - "*"
- apiGroups:
  - rbac.authorization.k8s.io
  resources:
  - clusterrolebindings
  verbs:
  - create
  - list
  - watch
- apiGroups:
  - rbac.authorization.k8s.io
  resources:
  - clusterrolebindings
  verbs:
  - get
  - update
  - patch
  - delete
  resourceNames:
  - "*"
# Extension's custom resource definitions
- apiGroups:
  - apiextensions.k8s.io
  resources:
  - customresourcedefinitions
  verbs:
  - create
  - list
  - watch
- apiGroups:
  - apiextensions.k8s.io
  resources:
  - customresourcedefinitions
  verbs:
  - get
  - update
  - patch
  - delete
  resourceNames:
  - manualapprovalgates.operator.tekton.dev
  - openshiftpipelinesascodes.operator.tekton.dev
  - tektonaddons.operator.tekton.dev
  - tektonchains.operator.tekton.dev
  - tektonconfigs.operator.tekton.dev
  - tektonhubs.operator.tekton.dev
  - tektoninstallersets.operator.tekton.dev
  - tektonpipelines.operator.tekton.dev
  - tektonresults.operator.tekton.dev
  - tektontriggers.operator.tekton.dev
- apiGroups:
  - ''
  resources:
  - nodes
  - pods
  - services
  - endpoints
  - persistentvolumeclaims
  - events
  - configmaps
  - secrets
  - pods/log
  - limitranges
  verbs:
  - create
  - list
  - watch
  - delete
  - deletecollection
  - patch
  - get
  - update
- apiGroups:
  - extensions
  - apps
  resources:
  - ingresses
  - ingresses/status
  verbs:
  - create
  - list
  - watch
  - delete
  - patch
  - get
  - update
- apiGroups:
  - ''
  resources:
  - namespaces
  verbs:
  - get
  - list
  - create
  - update
  - delete
  - patch
  - watch
- apiGroups:
  - apps
  resources:
  - deployments
  - daemonsets
  - replicasets
  - statefulsets
  - deployments/finalizers
  verbs:
  - delete
  - deletecollection
  - create
  - patch
  - get
  - list
  - update
  - watch
- apiGroups:
  - monitoring.coreos.com
  resources:
  - servicemonitors
  verbs:
  - get
  - create
  - delete
- apiGroups:
  - rbac.authorization.k8s.io
  resources:
  - clusterroles
  - roles
  verbs:
  - delete
  - deletecollection
  - create
  - patch
  - get
  - list
  - update
  - watch
  - bind
  - escalate
- apiGroups:
  - ''
  resources:
  - serviceaccounts
  verbs:
  - get
  - list
  - create
  - update
  - delete
  - patch
  - watch
  - impersonate
- apiGroups:
  - rbac.authorization.k8s.io
  resources:
  - clusterrolebindings
  - rolebindings
  verbs:
  - get
  - update
  - delete
  - patch
  - create
  - list
  - watch
- apiGroups:
  - apiextensions.k8s.io
  resources:
  - customresourcedefinitions
  - customresourcedefinitions/status
  verbs:
  - get
  - create
  - update
  - delete
  - list
  - patch
  - watch
- apiGroups:
  - admissionregistration.k8s.io
  resources:
  - mutatingwebhookconfigurations
  - validatingwebhookconfigurations
  verbs:
  - get
  - list
  - create
  - update
  - delete
  - patch
  - watch
- apiGroups:
  - build.knative.dev
  resources:
  - builds
  - buildtemplates
  - clusterbuildtemplates
  verbs:
  - get
  - list
  - create
  - update
  - delete
  - patch
  - watch
- apiGroups:
  - extensions
  resources:
  - deployments
  verbs:
  - get
  - list
  - create
  - update
  - delete
  - patch
  - watch
- apiGroups:
  - extensions
  resources:
  - deployments/finalizers
  verbs:
  - get
  - list
  - create
  - update
  - delete
  - patch
  - watch
- apiGroups:
  - operator.tekton.dev
  resources:
  - '*'
  - tektonaddons
  verbs:
  - delete
  - deletecollection
  - create
  - patch
  - get
  - list
  - update
  - watch
- apiGroups:
  - tekton.dev
  - triggers.tekton.dev
  - operator.tekton.dev
  - pipelinesascode.tekton.dev
  resources:
  - '*'
  verbs:
  - add
  - delete
  - deletecollection
  - create
  - patch
  - get
  - list
  - update
  - watch
- apiGroups:
  - dashboard.tekton.dev
  resources:
  - '*'
  - tektonaddons
  verbs:
  - delete
  - deletecollection
  - create
  - patch
  - get
  - list
  - update
  - watch
- apiGroups:
  - security.openshift.io
  resources:
  - securitycontextconstraints
  verbs:
  - use
  - get
  - list
  - create
  - update
  - delete
- apiGroups:
  - events.k8s.io
  resources:
  - events
  verbs:
  - create
- apiGroups:
  - route.openshift.io
  resources:
  - routes
  verbs:
  - delete
  - deletecollection
  - create
  - patch
  - get
  - list
  - update
  - watch
- apiGroups:
  - coordination.k8s.io
  resources:
  - leases
  verbs:
  - get
  - list
  - create
  - update
  - delete
  - patch
  - watch
- apiGroups:
  - console.openshift.io
  resources:
  - consoleyamlsamples
  - consoleclidownloads
  - consolequickstarts
  - consolelinks
  verbs:
  - delete
  - deletecollection
  - create
  - patch
  - get
  - list
  - update
  - watch
- apiGroups:
  - autoscaling
  resources:
  - horizontalpodautoscalers
  verbs:
  - delete
  - create
  - patch
  - get
  - list
  - update
  - watch
- apiGroups:
  - policy
  resources:
  - poddisruptionbudgets
  verbs:
  - delete
  - deletecollection
  - create
  - patch
  - get
  - list
  - update
  - watch
- apiGroups:
  - monitoring.coreos.com
  resources:
  - servicemonitors
  verbs:
  - delete
  - deletecollection
  - create
  - patch
  - get
  - list
  - update
  - watch
- apiGroups:
  - batch
  resources:
  - jobs
  - cronjobs
  verbs:
  - delete
  - deletecollection
  - create
  - patch
  - get
  - list
  - update
  - watch
- apiGroups:
  - ''
  resources:
  - namespaces/finalizers
  verbs:
  - update
- apiGroups:
  - resolution.tekton.dev
  resources:
  - resolutionrequests
  - resolutionrequests/status
  verbs:
  - get
  - list
  - watch
  - create
  - delete
  - update
  - patch
- apiGroups:
  - console.openshift.io
  resources:
  - consoleplugins
  verbs:
  - get
  - list
  - watch
  - create
  - delete
  - update
  - patch
# Deployments specified in install.spec.deployments
- apiGroups:
  - apps
  resources:
  - deployments
  verbs:
  - create
  - list
  - watch
- apiGroups:
  - apps
  resources:
  - deployments
  verbs:
  - get
  - update
  - patch
  - delete
  # scoped to the extension controller deployment name
  resourceNames:
  - openshift-pipelines-operator
  - tekton-operator-webhook
# Service accounts in the CSV
- apiGroups:
  - ""
  resources:
  - serviceaccounts
  verbs:
  - create
  - list
  - watch
- apiGroups:
  - ""
  resources:
  - serviceaccounts
  verbs:
  - get
  - update
  - patch
  - delete
  # scoped to the extension controller's deployment service account
  resourceNames:
  - openshift-pipelines-operator
# Services
- apiGroups:
  - ""
  resources:
  - services
  verbs:
  - create
- apiGroups:
  - ""
  resources:
  - services
  verbs:
  - get
  - list
  - watch
  - update
  - patch
  - delete
  # scoped to the service name
  resourceNames:
  - openshift-pipelines-operator-monitor
  - tekton-operator
  - tekton-operator-webhook
# configmaps
- apiGroups:
  - ""
  resources:
  - configmaps
  verbs:
  - create
- apiGroups:
  - ""
  resources:
  - configmaps
  verbs:
  - get
  - list
  - watch
  - update
  - patch
  - delete
  # scoped to the configmap name
  resourceNames:
  - config-logging
  - tekton-config-defaults
  - tekton-config-observability
  - tekton-operator-controller-config-leader-election
  - tekton-operator-info
  - tekton-operator-webhook-config-leader-election
- apiGroups:
  - operator.tekton.dev
  resources:
  - tekton-config-read-role
  - tekton-result-read-role
  verbs:
  - get
  - watch
  - list
---
Copy to Clipboard Toggle word wrap

5.1.3.7. 확장에 대한 클러스터 역할 바인딩 생성

서비스 계정 및 클러스터 역할을 생성한 후 클러스터 역할을 클러스터 역할 바인딩 매니페스트와 서비스 계정에 바인딩해야 합니다.

사전 요구 사항

  • cluster-admin 권한이 있는 계정을 사용하여 OpenShift Container Platform 클러스터에 액세스할 수 있습니다.
  • 설치하려는 확장에 다음 리소스를 생성하고 적용했습니다.

    • 네임스페이스
    • 서비스 계정
    • 클러스터 역할

프로세스

  1. 다음 예와 같이 클러스터 역할을 서비스 계정에 바인딩할 클러스터 역할 바인딩을 생성합니다.

    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRoleBinding
    metadata:
      name: <extension>-installer-binding
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: ClusterRole
      name: <extension>-installer-clusterrole
    subjects:
    - kind: ServiceAccount
      name: <extension>-installer
      namespace: <namespace>
    Copy to Clipboard Toggle word wrap

    예 5.10. pipelines-cluster-role-binding.yaml 파일의 예

    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRoleBinding
    metadata:
      name: pipelines-installer-binding
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: ClusterRole
      name: pipelines-installer-clusterrole
    subjects:
    - kind: ServiceAccount
      name: pipelines-installer
      namespace: pipelines
    Copy to Clipboard Toggle word wrap
  2. 다음 명령을 실행하여 클러스터 역할 바인딩을 적용합니다.

    $ oc apply -f pipelines-cluster-role-binding.yaml
    Copy to Clipboard Toggle word wrap

5.1.4. 모든 네임스페이스에 클러스터 확장 설치

CR(사용자 정의 리소스)을 생성하고 클러스터에 적용하여 카탈로그에서 확장을 설치할 수 있습니다. OLM(Operator Lifecycle Manager) v1은 클러스터 범위인 registry+v1 번들 형식의 OLM(Classic) Operator 설치를 지원합니다. 자세한 내용은 지원되는 확장 기능을 참조하십시오.

참고

OpenShift Container Platform 4.20의 경우 OLM v1에 대한 문서화된 절차는 CLI 기반 전용입니다. 또는 관리자는 YAML 가져오기검색 페이지와 같은 일반 방법을 사용하여 웹 콘솔에서 관련 오브젝트를 생성하고 볼 수 있습니다. 그러나 기존 소프트웨어 카탈로그설치된 Operator 페이지에는 OLM v1 구성 요소가 아직 표시되지 않습니다.

사전 요구 사항

  • 서비스 계정을 생성하고 설치하려는 확장을 설치, 업데이트 및 관리할 충분한 RBAC(역할 기반 액세스 제어)가 할당되었습니다. 자세한 내용은 "클러스터 확장 권한"을 참조하십시오.

프로세스

  1. 다음 예와 유사한 CR을 생성합니다.

    apiVersion: olm.operatorframework.io/v1
      kind: ClusterExtension
      metadata:
        name: <clusterextension_name>
      spec:
        namespace: <installed_namespace> 
    1
    
        serviceAccount:
          name: <service_account_installer_name> 
    2
    
        source:
          sourceType: Catalog
          catalog:
            packageName: <package_name>
            channels:
              - <channel_name> 
    3
    
            version: <version_or_version_range> 
    4
    
            upgradeConstraintPolicy: CatalogProvided 
    5
    Copy to Clipboard Toggle word wrap
    1
    파이프라인 또는 my-extension 와 같이 번들을 설치할 네임스페이스를 지정합니다. 확장 기능은 여전히 클러스터 범위이며 다른 네임스페이스에 설치된 리소스가 포함될 수 있습니다.
    2
    확장 기능을 설치, 업데이트 및 관리하기 위해 만든 서비스 계정의 이름을 지정합니다.
    3
    선택 사항: pipelines-1.14 또는 latest 와 같은 채널 이름을 배열로 지정합니다.
    4
    선택 사항: 설치 또는 업데이트하려는 패키지의 1.14.0,1.14.x 또는 > =1.16 과 같은 버전 범위를 지정합니다. 자세한 내용은 "대상 버전을 지정하는 CR(사용자 정의 리소스) 예" 및 "버전 범위에 대한 지원"을 참조하십시오.
    5
    선택 사항: 업그레이드 제약 조건 정책을 지정합니다. 지정되지 않은 경우 기본 설정은 CatalogProvided 입니다. CatalogProvided 설정은 새 버전이 패키지 작성자가 설정한 업그레이드 제약 조건을 충족하는 경우에만 업데이트됩니다. 업데이트 또는 롤백을 강제 적용하려면 필드를 SelfCertified 로 설정합니다. 자세한 내용은 "업데이트 또는 롤백 요청"을 참조하십시오.

pipelines-operator.yaml CR의 예

apiVersion: olm.operatorframework.io/v1
kind: ClusterExtension
metadata:
  name: pipelines-operator
spec:
  namespace: pipelines
  serviceAccount:
    name: pipelines-installer
  source:
    sourceType: Catalog
    catalog:
      packageName: openshift-pipelines-operator-rh
      version: "1.14.x"
Copy to Clipboard Toggle word wrap

  1. 다음 명령을 실행하여 클러스터에 CR을 적용합니다.

    $ oc apply -f pipeline-operator.yaml
    Copy to Clipboard Toggle word wrap

    출력 예

    clusterextension.olm.operatorframework.io/pipelines-operator created
    Copy to Clipboard Toggle word wrap

검증

  1. 다음 명령을 실행하여 Operator 또는 확장의 CR을 YAML 형식으로 표시합니다.

    $ oc get clusterextension pipelines-operator -o yaml
    Copy to Clipboard Toggle word wrap

    예 5.11. 출력 예

    apiVersion: v1
    items:
    - apiVersion: olm.operatorframework.io/v1
      kind: ClusterExtension
      metadata:
        annotations:
          kubectl.kubernetes.io/last-applied-configuration: |
            {"apiVersion":"olm.operatorframework.io/v1","kind":"ClusterExtension","metadata":{"annotations":{},"name":"pipes"},"spec":{"namespace":"pipelines","serviceAccount":{"name":"pipelines-installer"},"source":{"catalog":{"packageName":"openshift-pipelines-operator-rh","version":"1.14.x"},"sourceType":"Catalog"}}}
        creationTimestamp: "2025-02-18T21:48:13Z"
        finalizers:
        - olm.operatorframework.io/cleanup-unpack-cache
        - olm.operatorframework.io/cleanup-contentmanager-cache
        generation: 1
        name: pipelines-operator
        resourceVersion: "72725"
        uid: e18b13fb-a96d-436f-be75-a9a0f2b07993
      spec:
        namespace: pipelines
        serviceAccount:
          name: pipelines-installer
        source:
          catalog:
            packageName: openshift-pipelines-operator-rh
            upgradeConstraintPolicy: CatalogProvided
            version: 1.14.x
          sourceType: Catalog
      status:
        conditions:
        - lastTransitionTime: "2025-02-18T21:48:13Z"
          message: ""
          observedGeneration: 1
          reason: Deprecated
          status: "False"
          type: Deprecated
        - lastTransitionTime: "2025-02-18T21:48:13Z"
          message: ""
          observedGeneration: 1
          reason: Deprecated
          status: "False"
          type: PackageDeprecated
        - lastTransitionTime: "2025-02-18T21:48:13Z"
          message: ""
          observedGeneration: 1
          reason: Deprecated
          status: "False"
          type: ChannelDeprecated
        - lastTransitionTime: "2025-02-18T21:48:13Z"
          message: ""
          observedGeneration: 1
          reason: Deprecated
          status: "False"
          type: BundleDeprecated
        - lastTransitionTime: "2025-02-18T21:48:16Z"
          message: Installed bundle registry.redhat.io/openshift-pipelines/pipelines-operator-bundle@sha256:f7b19ce26be742c4aaa458d37bc5ad373b5b29b20aaa7d308349687d3cbd8838
            successfully
          observedGeneration: 1
          reason: Succeeded
          status: "True"
          type: Installed
        - lastTransitionTime: "2025-02-18T21:48:16Z"
          message: desired state reached
          observedGeneration: 1
          reason: Succeeded
          status: "True"
          type: Progressing
        install:
          bundle:
            name: openshift-pipelines-operator-rh.v1.14.5
            version: 1.14.5
    kind: List
    metadata:
      resourceVersion: ""
    Copy to Clipboard Toggle word wrap

    다음과 같습니다.

    spec.channel
    확장의 CR에 정의된 채널을 표시합니다.
    spec.version
    확장의 CR에 정의된 버전 또는 버전 범위를 표시합니다.
    status.conditions
    확장의 상태 및 상태에 대한 정보를 표시합니다.
    유형: 더 이상 사용되지 않음

    다음 중 하나 이상이 더 이상 사용되지 않는지 여부를 표시합니다.

    유형: PackageDeprecated
    해결된 패키지가 더 이상 사용되지 않는지 여부를 표시합니다.
    유형: ChannelDeprecated
    해결된 채널이 더 이상 사용되지 않는지 여부를 표시합니다.
    유형: BundleDeprecated
    해결된 번들이 더 이상 사용되지 않는지 여부를 표시합니다.

    status 필드의 False 값은 reason: 더 이상 사용되지 않는 조건이 더 이상 사용되지 않음을 나타냅니다. status 필드의 True 값은 reason: 더 이상 사용되지 않는 조건이 더 이상 사용되지 않음을 나타냅니다.

    installedBundle.name
    설치된 번들의 이름을 표시합니다.
    installedBundle.version
    설치된 번들의 버전을 표시합니다.

5.1.5. 특정 네임스페이스에 클러스터 확장 배포 (기술 프리뷰)

설치 모드는 OLM(Operator Lifecycle Manager) Classic의 멀티 테넌시 기능입니다. OLM v1은 멀티 테넌시를 지원하지 않으며 AllNamespaces 설치 모드를 사용하여 기본적으로 클러스터 확장을 클러스터에 배포합니다.

그러나 일부 기존 클러스터 확장에서는 AllNamespaces 설치 모드를 지원하지 않습니다. OwnNamespace 또는 SingleNamespace 설치 모드를 registry+v1 Operator 번들의 기술 프리뷰 기능으로 사용하여 특정 네임스페이스에 확장을 배포할 수 있습니다.

MultiNamespace 설치 모드는 지원되지 않습니다. 따라서 클러스터에 동일한 Operator를 여러 번 설치할 수 없습니다.

중요

특정 네임스페이스에 클러스터 확장 배포는 기술 프리뷰 기능 전용입니다. 기술 프리뷰 기능은 Red Hat 프로덕션 서비스 수준 계약(SLA)에서 지원되지 않으며 기능적으로 완전하지 않을 수 있습니다. 따라서 프로덕션 환경에서 사용하는 것은 권장하지 않습니다. 이러한 기능을 사용하면 향후 제품 기능을 조기에 이용할 수 있어 개발 과정에서 고객이 기능을 테스트하고 피드백을 제공할 수 있습니다.

Red Hat 기술 프리뷰 기능의 지원 범위에 대한 자세한 내용은 기술 프리뷰 기능 지원 범위를 참조하십시오.

자세한 내용은 "지원된 확장"을 참조하십시오.

사전 요구 사항

  • cluster-admin 권한이 있는 계정을 사용하여 OpenShift Container Platform 클러스터에 액세스
  • 클러스터에서 TechPreviewNoUpgrade 기능 세트 활성화
  • OwnNamespace 또는 SingleNamespace 설치 모드를 지원하는 Operator

프로세스

  1. 다음 예와 유사한 CR(사용자 정의 리소스)을 생성합니다.

    예: <cluster-extension-cr>.yaml 파일

    apiVersion: olm.operatorframework.io/v1
    kind: ClusterExtension
    metadata:
      name: <clusterextension_name>
      annotations:
        olm.operatorframework.io/watch-namespace: <namespace>
    spec:
      namespace: <installed_namespace>
      serviceAccount:
        name: <service_account_installer_name>
      source:
        sourceType: Catalog
        catalog:
          packageName: <package_name>
          channels:
            - <channel_name>
          version: <version_or_version_range>
          upgradeConstraintPolicy: CatalogProvided
    Copy to Clipboard Toggle word wrap

    다음과 같습니다.

    네임스페이스

    클러스터 확장을 배포할 네임스페이스를 지정합니다.

    • namespace 매개변수가 비어 있거나 주석이 없으면 AllNamespaces 설치 모드를 사용하여 확장이 배포됩니다.
    • namespace 매개변수가 spec.namespace 필드에 installed_namespace 매개변수와 동일한 값이면 OwnNamespace 설치 모드를 사용하여 확장이 배포됩니다.
    • namespace 매개변수가 installed_namespace 매개변수와 다른 네임스페이스를 지정하면 SingleNamespace 설치 모드를 사용하여 확장이 배포됩니다.
  2. 다음 명령을 실행하여 클러스터에 CR을 적용합니다.

    $ oc apply -f <cluster_extension_cr>.yaml
    Copy to Clipboard Toggle word wrap

5.1.6. preflight 권한 검사 클러스터 확장 (기술 프리뷰)

확장을 설치하려고 하면 Operator 컨트롤러에서 설치 프로세스의 예행 실행을 수행합니다. 이 예행 실행에서는 지정된 서비스 계정에서 확장을 설치하는 데 필요한 모든 작업을 수행할 수 있는지 확인합니다. 여기에는 번들에 있는 모든 Kubernetes 오브젝트 생성 및 번들에서 정의한 역할 및 바인딩에 대한 RBAC(역할 기반 액세스 제어) 규칙이 포함됩니다.

중요

클러스터 확장에 대한 사전 실행 권한 확인은 기술 프리뷰 기능 전용입니다. 기술 프리뷰 기능은 Red Hat 프로덕션 서비스 수준 계약(SLA)에서 지원되지 않으며 기능적으로 완전하지 않을 수 있습니다. 따라서 프로덕션 환경에서 사용하는 것은 권장하지 않습니다. 이러한 기능을 사용하면 향후 제품 기능을 조기에 이용할 수 있어 개발 과정에서 고객이 기능을 테스트하고 피드백을 제공할 수 있습니다.

Red Hat 기술 프리뷰 기능의 지원 범위에 대한 자세한 내용은 기술 프리뷰 기능 지원 범위를 참조하십시오.

서비스 계정에 필요한 RBAC 규칙이 없으면 실제 설치를 진행하기 전에 preflight 검사가 실패합니다. preflight 검사에 실패하면 Operator 컨트롤러에서 확장 상태 조건 및 Operator 컨트롤러의 로그에 오류를 보고합니다.

설치를 진행하려면 역할 및 바인딩을 업데이트하여 서비스 계정에 누락된 권한을 부여하고 변경 사항을 적용합니다. 오류가 없으면 Operator 컨트롤러에서 업데이트된 권한을 조정하고 설치를 완료합니다.

5.1.6.1. preflight 권한 확인의 보고서 예

다음 보고서는 서비스 계정에 다음과 같은 누락된 권한이 필요함을 나타냅니다.

  • 전체 클러스터의 코어 API 그룹에서 서비스 리소스에 대한 목록감시 작업을 수행하는 RBAC 규칙
  • pipelines 네임스페이스의 apps API 그룹에서 배포 리소스에 대한 생성 작업을 수행하는 RBAC 규칙

클러스터 확장의 상태 조건에서 preflight 권한 검사에서 보고서에 액세스할 수 있습니다. oc describe clusterextension 명령은 상태 조건을 포함하여 클러스터 확장에 대한 정보를 출력합니다.

명령 예

$ oc describe clusterextension <extension_name>
Copy to Clipboard Toggle word wrap

보고서 예

apiVersion: v1
items:
- apiVersion: olm.operatorframework.io/v1
  kind: ClusterExtension
...
Conditions:
  Type:    Progressing
  Status:  False
  Reason:  Retrying
  Message: pre-authorization failed: service account requires the following permissions to manage cluster extension:
           Namespace:"" APIGroups:[] Resources:[services] Verbs:[list,watch]
           Namespace:"pipelines" APIGroups:["apps"] Resources:[deployments] Verbs:[create]
Copy to Clipboard Toggle word wrap

네임스페이스
네임스페이스 수준에서 필요한 RBAC 규칙의 범위(예: pipelines )를 지정합니다. 빈 네임스페이스 값 "" 은 클러스터의 권한 범위를 지정해야 함을 나타냅니다.
APIGroups

필요한 권한이 적용되는 API 그룹의 이름을 지정합니다. API 그룹의 빈 값 [] 은 코어 API 그룹에 적용되는 권한을 나타냅니다. 예를 들어, 서비스, 비밀, 구성 맵은 모두 핵심 리소스입니다.

리소스가 이름이 지정된 API 그룹에 속하는 경우 보고서에 대괄호 사이에 있는 이름이 나열됩니다. 예를 들어 APIGroups:[apps] 의 값은 확장이 apps API 그룹의 리소스에 대해 작동하는 RBAC 규칙이 필요함을 나타냅니다.

Resources
권한이 필요한 리소스 유형을 지정합니다. 예를 들어 서비스, 시크릿 및 사용자 정의 리소스 정의는 일반적인 리소스 유형입니다.
verbs
서비스 계정에 수행할 권한이 필요한 작업 또는 동사 를 지정합니다. 보고서에 여러 동사가 나열되어 있는 경우 나열된 모든 동사에 RBAC 규칙이 필요합니다.

5.1.6.2. 일반적인 권한 오류

누락된 동사
서비스 계정에 필요한 작업을 수행할 수 있는 권한이 없습니다. 이 문제를 해결하려면 역할 및 바인딩을 업데이트하거나 생성하여 필요한 권한을 부여합니다. 역할 및 역할 바인딩은 네임스페이스에 대한 리소스 권한을 정의합니다. 클러스터 역할 및 클러스터 역할 바인딩은 클러스터에 대한 리소스 권한을 정의합니다.
권한 에스컬레이션
서비스 계정에는 확장에 필요한 역할 또는 클러스터 역할을 생성할 수 있는 권한이 없습니다. 이 경우 preflight 검사에서 동사를 누락된 것으로 보고하여 권한 상승을 방지합니다. 이 문제를 해결하려면 서비스 계정에 충분한 권한을 부여하여 역할을 생성할 수 있습니다.
역할 참조 누락
확장은 Operator 컨트롤러에서 찾을 수 없는 역할 또는 클러스터 역할을 참조합니다. 이런 일이 발생하면 사전 검사에서 누락된 역할이 나열되고 권한 평가 오류 가 보고됩니다. 이 문제를 해결하려면 역할 및 클러스터 역할을 생성하거나 업데이트하여 모든 역할 참조가 있는지 확인합니다.

5.1.7. 클러스터 확장 업데이트

CR(사용자 정의 리소스)을 수동으로 편집하고 변경 사항을 적용하여 클러스터 확장 또는 Operator를 업데이트할 수 있습니다.

사전 요구 사항

  • Operator 또는 확장이 설치되어 있어야 합니다.
  • jq CLI 툴을 설치했습니다.
  • opm CLI 툴을 설치했습니다.

프로세스

  1. 다음 단계를 완료하여 카탈로그 파일의 로컬 사본에서 채널 및 버전 정보에 대한 패키지를 검사합니다.

    1. 다음 명령을 실행하여 선택한 패키지에서 채널 목록을 가져옵니다.

      $ opm render <catalog_registry_url>:<tag> \
        | jq -s '.[] | select( .schema == "olm.channel" ) \
        | select( .package == "openshift-pipelines-operator-rh") | .name'
      Copy to Clipboard Toggle word wrap

      예 5.12. 명령 예

      $ opm render registry.redhat.io/redhat/redhat-operator-index:v4.20 \
        | jq -s '.[] | select( .schema == "olm.channel" ) \
        | select( .package == "openshift-pipelines-operator-rh") | .name'
      Copy to Clipboard Toggle word wrap

      예 5.13. 출력 예

      "latest"
      "pipelines-1.14"
      "pipelines-1.15"
      "pipelines-1.16"
      "pipelines-1.17"
      Copy to Clipboard Toggle word wrap
    2. 다음 명령을 실행하여 채널에 게시된 버전 목록을 가져옵니다.

      $ opm render <catalog_registry_url>:<tag> \
        | jq -s '.[] | select( .package == "<package_name>" ) \
        | select( .schema == "olm.channel" ) \
        | select( .name == "<channel_name>" ) | .entries \
        | .[] | .name'
      Copy to Clipboard Toggle word wrap

      예 5.14. 명령 예

      $ opm render registry.redhat.io/redhat/redhat-operator-index:v4.20 \
        | jq -s '.[] | select( .package == "openshift-pipelines-operator-rh" ) \
        | select( .schema == "olm.channel" ) | select( .name == "latest" ) \
        | .entries | .[] | .name'
      Copy to Clipboard Toggle word wrap

      예 5.15. 출력 예

      "openshift-pipelines-operator-rh.v1.15.0"
      "openshift-pipelines-operator-rh.v1.16.0"
      "openshift-pipelines-operator-rh.v1.17.0"
      "openshift-pipelines-operator-rh.v1.17.1"
      Copy to Clipboard Toggle word wrap
  2. 다음 명령을 실행하여 Operator 또는 확장의 CR에 지정된 버전 또는 채널을 확인합니다.

    $ oc get clusterextension <operator_name> -o yaml
    Copy to Clipboard Toggle word wrap

    명령 예

    $ oc get clusterextension pipelines-operator -o yaml
    Copy to Clipboard Toggle word wrap

    예 5.16. 출력 예

    apiVersion: v1
    items:
    - apiVersion: olm.operatorframework.io/v1
      kind: ClusterExtension
      metadata:
        annotations:
          kubectl.kubernetes.io/last-applied-configuration: |
            {"apiVersion":"olm.operatorframework.io/v1","kind":"ClusterExtension","metadata":{"annotations":{},"name":"pipes"},"spec":{"namespace":"pipelines","serviceAccount":{"name":"pipelines-installer"},"source":{"catalog":{"packageName":"openshift-pipelines-operator-rh","version":"1.14.x"},"sourceType":"Catalog"}}}
        creationTimestamp: "2025-02-18T21:48:13Z"
        finalizers:
        - olm.operatorframework.io/cleanup-unpack-cache
        - olm.operatorframework.io/cleanup-contentmanager-cache
        generation: 1
        name: pipelines-operator
        resourceVersion: "72725"
        uid: e18b13fb-a96d-436f-be75-a9a0f2b07993
      spec:
        namespace: pipelines
        serviceAccount:
          name: pipelines-installer
        source:
          catalog:
            packageName: openshift-pipelines-operator-rh
            upgradeConstraintPolicy: CatalogProvided
            version: 1.14.x
          sourceType: Catalog
      status:
        conditions:
        - lastTransitionTime: "2025-02-18T21:48:13Z"
          message: ""
          observedGeneration: 1
          reason: Deprecated
          status: "False"
          type: Deprecated
        - lastTransitionTime: "2025-02-18T21:48:13Z"
          message: ""
          observedGeneration: 1
          reason: Deprecated
          status: "False"
          type: PackageDeprecated
        - lastTransitionTime: "2025-02-18T21:48:13Z"
          message: ""
          observedGeneration: 1
          reason: Deprecated
          status: "False"
          type: ChannelDeprecated
        - lastTransitionTime: "2025-02-18T21:48:13Z"
          message: ""
          observedGeneration: 1
          reason: Deprecated
          status: "False"
          type: BundleDeprecated
        - lastTransitionTime: "2025-02-18T21:48:16Z"
          message: Installed bundle registry.redhat.io/openshift-pipelines/pipelines-operator-bundle@sha256:f7b19ce26be742c4aaa458d37bc5ad373b5b29b20aaa7d308349687d3cbd8838
            successfully
          observedGeneration: 1
          reason: Succeeded
          status: "True"
          type: Installed
        - lastTransitionTime: "2025-02-18T21:48:16Z"
          message: desired state reached
          observedGeneration: 1
          reason: Succeeded
          status: "True"
          type: Progressing
        install:
          bundle:
            name: openshift-pipelines-operator-rh.v1.14.5
            version: 1.14.5
    kind: List
    metadata:
      resourceVersion: ""
    Copy to Clipboard Toggle word wrap
  3. 다음 방법 중 하나를 사용하여 CR을 편집합니다.

    • Operator 또는 확장을 1.15.0 과 같은 특정 버전으로 고정하려면 다음 예와 유사한 CR을 편집합니다.

      pipelines-operator.yaml CR의 예

      apiVersion: olm.operatorframework.io/v1
      kind: ClusterExtension
      metadata:
        name: pipelines-operator
      spec:
        namespace: pipelines
        serviceAccount:
          name: pipelines-installer
        source:
          sourceType: Catalog
          catalog:
            packageName: openshift-pipelines-operator-rh
            version: "1.15.0" 
      1
      Copy to Clipboard Toggle word wrap

      1
      1.14.x 에서 1.15.0으로 버전을 업데이트
    • 허용 가능한 업데이트 버전의 범위를 정의하려면 다음 예와 유사한 CR을 편집합니다.

      버전 범위가 지정된 CR의 예

      apiVersion: olm.operatorframework.io/v1
      kind: ClusterExtension
      metadata:
        name: pipelines-operator
      spec:
        namespace: pipelines
        serviceAccount:
          name: pipelines-installer
        source:
          sourceType: Catalog
          catalog:
            packageName: openshift-pipelines-operator-rh
            version: ">1.15, <1.17" 
      1
      Copy to Clipboard Toggle word wrap

      1
      원하는 버전 범위가 버전 1.15 보다 크고 1.17 보다 작도록 지정합니다. 자세한 내용은 "버전 범위 지원" 및 "버전 비교 문자열"을 참조하십시오.
    • 채널에서 확인할 수 있는 최신 버전으로 업데이트하려면 다음 예제와 유사한 CR을 편집합니다.

      지정된 채널이 있는 CR의 예

      apiVersion: olm.operatorframework.io/v1
      kind: ClusterExtension
      metadata:
        name: pipelines-operator
      spec:
        namespace: pipelines
        serviceAccount:
          name: pipelines-installer
        source:
          sourceType: Catalog
          catalog:
            packageName: openshift-pipelines-operator-rh
            channels:
              - latest 
      1
      Copy to Clipboard Toggle word wrap

      1
      지정된 채널에서 확인할 수 있는 최신 릴리스를 설치합니다. 채널 업데이트가 자동으로 설치됩니다. 값을 배열로 입력합니다.
    • 채널 및 버전 범위를 지정하려면 다음 예와 유사한 CR을 편집합니다.

      지정된 채널 및 버전 범위가 있는 CR의 예

      apiVersion: olm.operatorframework.io/v1
      kind: ClusterExtension
      metadata:
        name: pipelines-operator
      spec:
        namespace: pipelines
        serviceAccount:
          name: pipelines-installer
        source:
          sourceType: Catalog
          catalog:
            packageName: openshift-pipelines-operator-rh
            channels:
              - latest
            version: "<1.16"
      Copy to Clipboard Toggle word wrap

      자세한 내용은 "대상 버전을 지정하는 CR(사용자 정의 리소스) 예"를 참조하십시오.

  4. 다음 명령을 실행하여 클러스터에 업데이트를 적용합니다.

    $ oc apply -f pipelines-operator.yaml
    Copy to Clipboard Toggle word wrap

    출력 예

    clusterextension.olm.operatorframework.io/pipelines-operator configured
    Copy to Clipboard Toggle word wrap

검증

  • 다음 명령을 실행하여 채널 및 버전 업데이트가 적용되었는지 확인합니다.

    $ oc get clusterextension pipelines-operator -o yaml
    Copy to Clipboard Toggle word wrap

    예 5.17. 출력 예

    apiVersion: olm.operatorframework.io/v1
    kind: ClusterExtension
    metadata:
      annotations:
        kubectl.kubernetes.io/last-applied-configuration: |
          {"apiVersion":"olm.operatorframework.io/v1","kind":"ClusterExtension","metadata":{"annotations":{},"name":"pipes"},"spec":{"namespace":"pipelines","serviceAccount":{"name":"pipelines-installer"},"source":{"catalog":{"packageName":"openshift-pipelines-operator-rh","version":"\u003c1.16"},"sourceType":"Catalog"}}}
      creationTimestamp: "2025-02-18T21:48:13Z"
      finalizers:
      - olm.operatorframework.io/cleanup-unpack-cache
      - olm.operatorframework.io/cleanup-contentmanager-cache
      generation: 2
      name: pipes
      resourceVersion: "90693"
      uid: e18b13fb-a96d-436f-be75-a9a0f2b07993
    spec:
      namespace: pipelines
      serviceAccount:
        name: pipelines-installer
      source:
        catalog:
          packageName: openshift-pipelines-operator-rh
          upgradeConstraintPolicy: CatalogProvided
          version: <1.16
        sourceType: Catalog
    status:
      conditions:
      - lastTransitionTime: "2025-02-18T21:48:13Z"
        message: ""
        observedGeneration: 2
        reason: Deprecated
        status: "False"
        type: Deprecated
      - lastTransitionTime: "2025-02-18T21:48:13Z"
        message: ""
        observedGeneration: 2
        reason: Deprecated
        status: "False"
        type: PackageDeprecated
      - lastTransitionTime: "2025-02-18T21:48:13Z"
        message: ""
        observedGeneration: 2
        reason: Deprecated
        status: "False"
        type: ChannelDeprecated
      - lastTransitionTime: "2025-02-18T21:48:13Z"
        message: ""
        observedGeneration: 2
        reason: Deprecated
        status: "False"
        type: BundleDeprecated
      - lastTransitionTime: "2025-02-18T21:48:16Z"
        message: Installed bundle registry.redhat.io/openshift-pipelines/pipelines-operator-bundle@sha256:8a593c1144709c9aeffbeb68d0b4b08368f528e7bb6f595884b2474bcfbcafcd
          successfully
        observedGeneration: 2
        reason: Succeeded
        status: "True"
        type: Installed
      - lastTransitionTime: "2025-02-18T21:48:16Z"
        message: desired state reached
        observedGeneration: 2
        reason: Succeeded
        status: "True"
        type: Progressing
      install:
        bundle:
          name: openshift-pipelines-operator-rh.v1.15.2
          version: 1.15.2
    Copy to Clipboard Toggle word wrap

문제 해결

  • 더 이상 사용되지 않거나 존재하지 않는 대상 버전 또는 채널을 지정하는 경우 다음 명령을 실행하여 확장 상태를 확인할 수 있습니다.

    $ oc get clusterextension <operator_name> -o yaml
    Copy to Clipboard Toggle word wrap

    예 5.18. 존재하지 않는 버전의 출력 예

    apiVersion: olm.operatorframework.io/v1
    kind: ClusterExtension
    metadata:
      annotations:
        kubectl.kubernetes.io/last-applied-configuration: |
          {"apiVersion":"olm.operatorframework.io/v1","kind":"ClusterExtension","metadata":{"annotations":{},"name":"pipes"},"spec":{"namespace":"pipelines","serviceAccount":{"name":"pipelines-installer"},"source":{"catalog":{"packageName":"openshift-pipelines-operator-rh","version":"9.x"},"sourceType":"Catalog"}}}
      creationTimestamp: "2025-02-18T21:48:13Z"
      finalizers:
      - olm.operatorframework.io/cleanup-unpack-cache
      - olm.operatorframework.io/cleanup-contentmanager-cache
      generation: 3
      name: pipes
      resourceVersion: "93334"
      uid: e18b13fb-a96d-436f-be75-a9a0f2b07993
    spec:
      namespace: pipelines
      serviceAccount:
        name: pipelines-installer
      source:
        catalog:
          packageName: openshift-pipelines-operator-rh
          upgradeConstraintPolicy: CatalogProvided
          version: 9.x
        sourceType: Catalog
    status:
      conditions:
      - lastTransitionTime: "2025-02-18T21:48:13Z"
        message: ""
        observedGeneration: 2
        reason: Deprecated
        status: "False"
        type: Deprecated
      - lastTransitionTime: "2025-02-18T21:48:13Z"
        message: ""
        observedGeneration: 2
        reason: Deprecated
        status: "False"
        type: PackageDeprecated
      - lastTransitionTime: "2025-02-18T21:48:13Z"
        message: ""
        observedGeneration: 2
        reason: Deprecated
        status: "False"
        type: ChannelDeprecated
      - lastTransitionTime: "2025-02-18T21:48:13Z"
        message: ""
        observedGeneration: 2
        reason: Deprecated
        status: "False"
        type: BundleDeprecated
      - lastTransitionTime: "2025-02-18T21:48:16Z"
        message: Installed bundle registry.redhat.io/openshift-pipelines/pipelines-operator-bundle@sha256:8a593c1144709c9aeffbeb68d0b4b08368f528e7bb6f595884b2474bcfbcafcd
          successfully
        observedGeneration: 3
        reason: Succeeded
        status: "True"
        type: Installed
      - lastTransitionTime: "2025-02-18T21:48:16Z"
        message: 'error upgrading from currently installed version "1.15.2": no bundles
          found for package "openshift-pipelines-operator-rh" matching version "9.x"'
        observedGeneration: 3
        reason: Retrying
        status: "True"
        type: Progressing
      install:
        bundle:
          name: openshift-pipelines-operator-rh.v1.15.2
          version: 1.15.2
    Copy to Clipboard Toggle word wrap

5.1.8. Operator 삭제

ClusterExtension CR(사용자 정의 리소스)을 삭제하여 Operator 및 해당 CRD(사용자 정의 리소스 정의)를 삭제할 수 있습니다.

사전 요구 사항

  • 카탈로그가 설치되어 있어야 합니다.
  • Operator가 설치되어 있어야 합니다.

프로세스

  • 다음 명령을 실행하여 Operator 및 해당 CRD를 삭제합니다.

    $ oc delete clusterextension <operator_name>
    Copy to Clipboard Toggle word wrap

    출력 예

    clusterextension.olm.operatorframework.io "<operator_name>" deleted
    Copy to Clipboard Toggle word wrap

검증

  • 다음 명령을 실행하여 Operator 및 해당 리소스가 삭제되었는지 확인합니다.

    • 다음 명령을 실행하여 Operator가 삭제되었는지 확인합니다.

      $ oc get clusterextensions
      Copy to Clipboard Toggle word wrap

      출력 예

      No resources found
      Copy to Clipboard Toggle word wrap

    • 다음 명령을 실행하여 Operator의 시스템 네임스페이스가 삭제되었는지 확인합니다.

      $ oc get ns <operator_name>-system
      Copy to Clipboard Toggle word wrap

      출력 예

      Error from server (NotFound): namespaces "<operator_name>-system" not found
      Copy to Clipboard Toggle word wrap

맨 위로 이동
Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다. 최신 업데이트를 확인하세요.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

Theme

© 2025 Red Hat