5장. 클러스터 확장


5.1. 클러스터 확장 관리

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

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

참고

OpenShift Container Platform 4.19의 경우 OLM v1에 대한 문서화된 절차는 CLI 기반입니다. 또는 관리자는 YAML 가져오기검색 페이지와 같은 일반적인 방법을 사용하여 웹 콘솔에서 관련 객체를 만들고 볼 수 있습니다. 하지만 기존의 OperatorHub설치된 운영자 페이지에는 아직 OLM v1 구성 요소가 표시되지 않습니다.

5.1.1. 지원되는 확장 프로그램

현재 Operator Lifecycle Manager(OLM) v1은 다음 모든 기준을 충족하는 클러스터 확장 프로그램을 설치하는 것을 지원합니다.

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

    • SingleNamespaceOwnNamespace 설치 모드에 대한 지원은 OpenShift Container Platform 4.19에 기술 미리 보기 기능으로 포함되었습니다.
  • 확장 프로그램은 웹후크를 사용하면 안 됩니다.
  • 확장 프로그램은 다음 파일 기반 카탈로그 속성을 사용하여 종속성을 선언해서는 안 됩니다.

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

OLM v1은 설치하려는 확장 프로그램이 이러한 제약 조건을 충족하는지 확인합니다. 설치하려는 확장 프로그램이 이러한 제약 조건을 충족하지 못하면 클러스터 확장 프로그램의 조건에 오류 메시지가 인쇄됩니다.

중요

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

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

해결 방법으로 확장 프로그램을 특정 버전으로 고정할 수 있습니다. 확장 프로그램을 업데이트하려는 경우 확장 프로그램의 설명서를 참조하여 확장 프로그램을 새 버전으로 고정하는 것이 안전한 시기를 확인하세요.

5.1.2. 카탈로그에서 설치할 운영자 찾기

클러스터에 카탈로그를 추가한 후에는 카탈로그를 쿼리하여 설치할 연산자와 확장 프로그램을 찾을 수 있습니다.

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

사전 요구 사항

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

프로세스

  1. AllNamespaces 설치 모드를 지원하고 웹훅을 사용하지 않는 확장 프로그램 목록을 반환하려면 다음 명령을 입력하세요.

    $ 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.19 또는 최신)을 지정합니다.

    예 5.1. 명령 예

    $ opm render \
      registry.redhat.io/redhat/redhat-operator-index:v4.19 \
      | 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.19 \
      | 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.19 또는 최신)을 지정합니다.
jq_request
카탈로그에서 실행할 쿼리를 지정합니다.

예 5.5. 명령 예

$ opm render \
  registry.redhat.io/redhat/redhat-operator-index:v4.19 \
  | 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 설치 모드를 지원하고 웹훅을 사용하지 않는 패키지

$ 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

패키지의 카탈로그 블롭

$ 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. 클러스터 확장 권한

Operator Lifecycle Manager(OLM) 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.19 | \
      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 도구나 텍스트 편집기를 사용하여 매니페스트 디렉토리에 있는 클러스터 서비스 버전(CSV) 파일의 install.spec.clusterpermissions 절의 내용을 봅니다. 다음 예제에서는 Red Hat OpenShift Pipelines Operator의 openshift-pipelines-operator-rh.clusterserviceversion.yaml 파일을 참조합니다.
  • 다음 절차에서 클러스터 역할 파일에 권한을 할당하는 동안 참조로 이 파일을 열어 두세요.

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

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

중요

최소 권한 원칙을 따르고 실행에 필요한 최소 RBAC를 사용하여 특정 리소스 이름에 대한 권한 범위를 지정합니다.

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

    예제 <확장자>-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
      create , list , watch 권한은 특정 리소스 이름( 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 필드에서 servicesconfigmaps 값을 검색합니다.

    • 다음 예와 유사하게 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. 파이프라인-클러스터-역할-바인딩.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)를 만들고 클러스터에 적용하여 카탈로그에서 확장을 설치할 수 있습니다. Operator Lifecycle Manager(OLM) v1은 클러스터에 범위가 지정된 registry+v1 번들 형식의 OLM(클래식) Operator를 포함한 클러스터 확장 설치를 지원합니다. 자세한 내용은 지원되는 확장 프로그램을 참조하세요.

참고

OpenShift Container Platform 4.19의 경우 OLM v1에 대한 문서화된 절차는 CLI 기반입니다. 또는 관리자는 YAML 가져오기검색 페이지와 같은 일반적인 방법을 사용하여 웹 콘솔에서 관련 객체를 만들고 볼 수 있습니다. 하지만 기존의 OperatorHub설치된 운영자 페이지에는 아직 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
    선택 사항: 파이프라인-1.14 또는 최신 과 같이 채널 이름을 배열로 지정합니다.
    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. 다음 명령을 실행하여 YAML 형식으로 운영자 또는 확장 프로그램의 CR을 확인하세요.

    $ 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
    확장 프로그램의 상태 및 건강에 대한 정보를 표시합니다.
    유형: 더 이상 사용되지 않음

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

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

    상태 필드의 False 값은 이유가 "더 이상 사용되지 않는 조건"임을 나타냅니다. 상태 필드의 값이 True인 경우 이유가 "더 이상 사용되지 않는 조건은 더 이상 사용되지 않습니다."임을 나타냅니다.

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

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

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

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

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

중요

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

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

자세한 내용은 "지원되는 확장 프로그램"을 참조하세요.

사전 요구 사항

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

프로세스

  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

    다음과 같습니다.

    네임스페이스

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

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

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

5.1.6. 클러스터 확장에 대한 사전 권한 확인(기술 미리 보기)

확장 프로그램을 설치하려고 하면 운영자 컨트롤러가 설치 프로세스의 테스트 실행을 수행합니다. 이 연습 실행은 지정된 서비스 계정이 확장 프로그램을 설치하는 데 필요한 모든 작업을 수행할 수 있는지 확인합니다. 여기에는 번들의 모든 Kubernetes 객체를 생성하는 것과 번들에서 정의한 역할과 바인딩에 대한 역할 기반 액세스 제어(RBAC) 규칙을 생성하는 것이 포함됩니다.

중요

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

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

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

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

5.1.6.1. 사전 비행 권한 확인의 보고서 예

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

  • 클러스터 전체의 핵심 API 그룹에서 서비스 리소스에 대한 목록감시 작업을 수행하기 위한 RBAC 규칙
  • 파이프라인 네임스페이스에 대한 API 그룹의 배포 리소스에 대한 작업 생성 을 수행하기 위한 RBAC 규칙

클러스터 확장의 상태 조건에서 사전 권한 확인을 통해 보고서에 액세스할 수 있습니다. 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 규칙의 범위를 지정합니다. 빈 네임스페이스 값 "" 은 클러스터에 대한 권한 범위를 지정해야 함을 나타냅니다.
API그룹

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

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

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

5.1.6.2. 일반적인 권한 오류

동사가 누락되었습니다
서비스 계정에는 필요한 작업을 수행할 수 있는 권한이 없습니다. 이 문제를 해결하려면 역할과 바인딩을 업데이트하거나 생성하여 필요한 권한을 부여하세요. 역할과 역할 바인딩은 네임스페이스에 대한 리소스 권한을 정의합니다. 클러스터 역할과 클러스터 역할 바인딩은 클러스터에 대한 리소스 권한을 정의합니다.
권한 상승
서비스 계정에는 확장 기능에 필요한 역할이나 클러스터 역할을 생성할 수 있는 권한이 없습니다. 이런 일이 발생하면 사전 검사에서 권한 상승을 방지하기 위해 동사가 누락되었다고 보고합니다. 이 문제를 해결하려면 서비스 계정에 역할을 만들 수 있는 충분한 권한을 부여하세요.
역할 참조가 누락되었습니다
확장 기능은 Operator Controller가 찾을 수 없는 역할이나 클러스터 역할을 참조합니다. 이런 일이 발생하면 사전 검사에서 누락된 역할이 나열되고 권한 평가 오류 가 보고됩니다. 이 문제를 해결하려면 역할 및 클러스터 역할을 만들거나 업데이트하여 모든 역할 참조가 존재하는지 확인하세요.

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

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

사전 요구 사항

  • 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.19 \
        | 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.19 \
        | 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. 다음 명령을 실행하여 운영자 또는 확장 프로그램의 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을 편집하세요.

    • 운영자나 확장 프로그램을 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. 운영자 삭제

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