4장. 관리자 작업


4.1. 클러스터에 Operator 추가

클러스터 관리자는 OLM(Operator Lifecycle Manager)을 사용하여 OLM 기반 운영자를 OpenShift Container Platform 클러스터에 설치할 수 있습니다.

참고

동일한 네임스페이스에 함께 배치된 설치된 운영자에 대한 업데이트를 OLM이 처리하는 방법과 사용자 지정 글로벌 운영자 그룹과 함께 운영자를 설치하는 대체 방법에 대한 자세한 내용은 다중 테넌시 및 운영자 공동 배치를 참조하세요.

4.1.1. OperatorHub를 통한 Operator 설치 정보

OperatorHub는 Operator를 검색하는 사용자 인터페이스입니다. 이는 클러스터에 Operator를 설치하고 관리하는 OLM(Operator Lifecycle Manager)과 함께 작동합니다.

클러스터 관리자는 OpenShift Container Platform 웹 콘솔이나 CLI를 사용하여 OperatorHub에서 Operator를 설치할 수 있습니다. 그런 다음 Operator를 하나 이상의 네임 스페이스에 가입시켜 Operator를 클러스터의 개발자가 사용할 수 있도록 합니다.

설치하는 동안 Operator의 다음 초기 설정을 결정해야합니다.

설치 모드
All namespaces on the cluster (default)를 선택하여 Operator를 모든 네임 스페이스에 설치하거나 사용 가능한 경우 개별 네임 스페이스를 선택하여 선택한 네임 스페이스에만 Operator를 설치합니다. 이 예에서는 모든 사용자와 프로젝트 Operator를 사용할 수 있도록 All namespaces…​ 선택합니다.
업데이트 채널
여러 채널을 통해 Operator를 사용할 수있는 경우 구독할 채널을 선택할 수 있습니다. 예를 들어, stable 채널에서 배치하려면 (사용 가능한 경우) 목록에서 해당 채널을 선택합니다.
승인 전략

자동 또는 수동 업데이트를 선택할 수 있습니다.

설치된 Operator에 대해 자동 업데이트를 선택하는 경우 선택한 채널에 해당 Operator의 새 버전이 제공되면 OLM(Operator Lifecycle Manager)에서 Operator의 실행 중인 인스턴스를 개입 없이 자동으로 업그레이드합니다.

수동 업데이트를 선택하면 최신 버전의 Operator가 사용 가능할 때 OLM이 업데이트 요청을 작성합니다. 클러스터 관리자는 Operator를 새 버전으로 업데이트하려면 OLM 업데이트 요청을 수동으로 승인해야 합니다.

4.1.2. 웹 콘솔을 사용하여 OperatorHub에서 설치

OpenShift Container Platform 웹 콘솔을 사용하여 OperatorHub에서 Operator를 설치하고 구독할 수 있습니다.

사전 요구 사항

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

프로세스

  1. 웹 콘솔에서 Operators OperatorHub 페이지로 이동합니다.
  2. 원하는 Operator를 찾으려면 키워드를 Filter by keyword 상자에 입력하거나 스크롤합니다. 예를 들어 Kubernetes Operator의 고급 클러스터 관리 기능을 찾으려면 advanced를 입력합니다.

    인프라 기능에서 옵션을 필터링할 수 있습니다. 예를 들어, 연결이 끊긴 환경 (제한된 네트워크 환경이라고도 함)에서 작업하는 Operator를 표시하려면 Disconnected를 선택합니다.

  3. Operator를 선택하여 추가 정보를 표시합니다.

    참고

    커뮤니티 Operator를 선택하면 Red Hat이 커뮤니티 Operator를 인증하지 않는다고 경고합니다. 계속하기 전에 경고를 확인해야합니다.

  4. Operator에 대한 정보를 확인하고 Install을 클릭합니다.
  5. Operator 설치 페이지에서 Operator 설치를 구성합니다.

    1. 특정 버전의 운영자를 설치하려면 목록에서 업데이트 채널버전을 선택하세요. 여러 채널에서 운영자의 다양한 버전을 찾아볼 수 있으며, 해당 채널과 버전에 대한 메타데이터를 보고, 설치하려는 정확한 버전을 선택할 수 있습니다.

      참고

      버전 선택은 기본적으로 선택한 채널의 최신 버전으로 설정됩니다. 채널의 최신 버전을 선택하면 자동 승인 전략이 기본적으로 활성화됩니다. 그렇지 않은 경우, 선택한 채널에 대한 최신 버전을 설치하지 않을 경우 수동 승인이 필요합니다.

      수동 승인으로 운영자를 설치하면 네임스페이스 내에 설치된 모든 운영자가 수동 승인 전략에 따라 작동하고 모든 운영자가 함께 업데이트됩니다. Operator를 독립적으로 업데이트하려면 Operator를 별도의 네임스페이스에 설치하세요.

    2. 운영자의 설치 모드를 확인하세요:

      • All namespaces on the cluster (default)에서는 기본 openshift-operators 네임스페이스에 Operator가 설치되므로 Operator가 클러스터의 모든 네임스페이스를 모니터링하고 사용할 수 있습니다. 이 옵션을 항상 사용할 수있는 것은 아닙니다.
      • A specific namespace on the cluster를 사용하면 Operator를 설치할 특정 단일 네임 스페이스를 선택할 수 있습니다. Operator는 이 단일 네임 스페이스에서만 모니터링 및 사용할 수 있게 됩니다.
    3. 토큰 인증이 활성화된 클라우드 공급자의 클러스터의 경우:

      • 클러스터가 AWS 보안 토큰 서비스(웹 콘솔의 STS 모드 )를 사용하는 경우, 서비스 계정의 AWS IAM 역할에 대한 Amazon 리소스 이름(ARN)을 역할 ARN 필드에 입력합니다. 역할의 ARN을 생성하려면 AWS 계정 준비 에 설명된 절차를 따르세요.
      • 클러스터가 Microsoft Entra Workload ID(웹 콘솔의 Workload Identity/Federated Identity Mode )를 사용하는 경우 해당 필드에 클라이언트 ID, 테넌트 ID, 구독 ID를 추가합니다.
      • 클러스터가 Google Cloud Platform 워크로드 ID(웹 콘솔의 GCP 워크로드 ID/페더레이션 ID 모드 )를 사용하는 경우 해당 필드에 프로젝트 번호, 풀 ID, 공급자 ID 및 서비스 계정 이메일을 추가합니다.
    4. 업데이트 승인을 위해 자동 또는 수동 승인 전략을 선택합니다.

      중요

      웹 콘솔에 클러스터가 AWS STS, Microsoft Entra Workload ID 또는 GCP Workload Identity를 사용한다고 표시되는 경우 업데이트 승인을 수동 으로 설정해야 합니다.

      업데이트에 대한 자동 승인 기능이 있는 구독은 업데이트하기 전에 권한을 변경해야 할 수 있으므로 권장하지 않습니다. 업데이트에 대한 수동 승인 기능이 있는 구독을 통해 관리자는 이후 버전의 권한을 확인하고, 필요한 조치를 취한 다음 업데이트할 수 있습니다.

  6. 설치를 클릭하면 이 OpenShift Container Platform 클러스터의 선택한 네임스페이스에서 Operator를 사용할 수 있습니다.

    1. 수동 승인 전략을 선택한 경우 설치 계획을 검토하고 승인할 때까지 서브스크립션의 업그레이드 상태가 업그레이드 중으로 유지됩니다.

      Install Plan 페이지에서 승인 한 후 subscription 업그레이드 상태가 Up to date로 이동합니다.

    2. 자동 승인 전략을 선택한 경우 업그레이드 상태가 개입 없이 최신 상태로 확인되어야 합니다.

검증

  • 서브스크립션의 업그레이드 상태가 최신이면 Operator 설치된 Operator를 선택하여 설치된 Operator의 CSV(클러스터 서비스 버전)가 최종적으로 표시되는지 확인합니다. 상태는 결국 관련 네임스페이스에서 성공 으로 확인되어야 합니다.

    참고

    모든 네임스페이스…​ 설치 모드에서는 openshift-operators 네임스페이스에서 상태가 Succeeded 로 확인되지만 다른 네임스페이스에서 체크인하는 경우 상태가 Copied로 확인 됩니다.

    그렇지 않은 경우 다음을 수행합니다.

    • 작업 부하 Pod 페이지에서 openshift-operators 프로젝트(또는 특정 네임스페이스…​ 설치 모드가 선택된 경우 다른 관련 네임스페이스)의 모든 Pod에서 로그를 확인하여 문제를 보고하고 추가적으로 문제를 해결합니다.
  • Operator가 설치되면 메타데이터는 설치된 채널과 버전을 나타냅니다.

    참고

    채널버전 드롭다운 메뉴는 이 카탈로그 컨텍스트에서 다른 버전 메타데이터를 보는 데 계속 사용할 수 있습니다.

4.1.3. CLI를 사용하여 OperatorHub에서 설치

OpenShift Container Platform 웹 콘솔을 사용하는 대신 CLI를 사용하여 OperatorHub에서 Operator를 설치할 수 있습니다. oc 명령을 사용하여 Subscription 개체를 만들거나 업데이트합니다.

SingleNamespace 설치 모드의 경우 관련 네임스페이스에 적절한 Operator 그룹이 있는지도 확인해야 합니다. OperatorGroup 오브젝트로 정의되는 Operator group에서 Operator group과 동일한 네임스페이스에 있는 모든 Operator에 대해 필요한 RBAC 액세스 권한을 생성할 대상 네임스페이스를 선택합니다.

작은 정보

대부분의 경우, 이 절차의 웹 콘솔 방법이 더 선호됩니다. SingleNamespace 모드를 선택하면 OperatorGroupSubscription 개체 생성을 자동으로 처리하는 등 백그라운드에서 작업을 자동화하기 때문입니다.

사전 요구 사항

  • cluster-admin 권한이 있는 계정을 사용하여 OpenShift Container Platform 클러스터에 액세스할 수 있습니다.
  • OpenShift CLI(oc)가 설치되어 있습니다.

프로세스

  1. OperatorHub에서 클러스터에 사용 가능한 Operator의 목록을 표시합니다.

    $ oc get packagemanifests -n openshift-marketplace
    Copy to Clipboard Toggle word wrap

    예 4.1. 출력 예

    NAME                               CATALOG               AGE
    3scale-operator                    Red Hat Operators     91m
    advanced-cluster-management        Red Hat Operators     91m
    amq7-cert-manager                  Red Hat Operators     91m
    # ...
    couchbase-enterprise-certified     Certified Operators   91m
    crunchy-postgres-operator          Certified Operators   91m
    mongodb-enterprise                 Certified Operators   91m
    # ...
    etcd                               Community Operators   91m
    jaeger                             Community Operators   91m
    kubefed                            Community Operators   91m
    # ...
    Copy to Clipboard Toggle word wrap

    필요한 Operator의 카탈로그를 기록해 둡니다.

  2. 필요한 Operator를 검사하여 지원되는 설치 모드 및 사용 가능한 채널을 확인합니다.

    $ oc describe packagemanifests <operator_name> -n openshift-marketplace
    Copy to Clipboard Toggle word wrap

    예 4.2. 출력 예

    # ...
    Kind:         PackageManifest
    # ...
          Install Modes: 
    1
    
            Supported:  true
            Type:       OwnNamespace
            Supported:  true
            Type:       SingleNamespace
            Supported:  false
            Type:       MultiNamespace
            Supported:  true
            Type:       AllNamespaces
    # ...
        Entries:
          Name:       example-operator.v3.7.11
          Version:    3.7.11
          Name:       example-operator.v3.7.10
          Version:    3.7.10
        Name:         stable-3.7 
    2
    
    # ...
       Entries:
          Name:         example-operator.v3.8.5
          Version:      3.8.5
          Name:         example-operator.v3.8.4
          Version:      3.8.4
        Name:           stable-3.8 
    3
    
      Default Channel:  stable-3.8 
    4
    Copy to Clipboard Toggle word wrap
    1 1
    지원되는 설치 모드를 나타냅니다.
    2 2 3
    채널 이름의 예.
    4
    채널이 지정되지 않으면 기본적으로 선택됩니다.
    작은 정보

    다음 명령을 실행하면 운영자 버전 및 채널 정보를 YAML 형식으로 인쇄할 수 있습니다.

    $ oc get packagemanifests <operator_name> -n <catalog_namespace> -o yaml
    Copy to Clipboard Toggle word wrap
  3. 네임스페이스에 두 개 이상의 카탈로그가 설치된 경우 다음 명령을 실행하여 특정 카탈로그에서 사용 가능한 Operator 버전과 채널을 조회합니다.

    $ oc get packagemanifest \
       --selector=catalog=<catalogsource_name> \
       --field-selector metadata.name=<operator_name> \
       -n <catalog_namespace> -o yaml
    Copy to Clipboard Toggle word wrap
    중요

    운영자 카탈로그를 지정하지 않으면 oc get packagemanifestoc describe packagemanifest 명령을 실행하면 다음 조건이 충족될 경우 예상치 못한 카탈로그에서 패키지가 반환될 수 있습니다.

    • 여러 개의 카탈로그가 동일한 네임스페이스에 설치됩니다.
    • 카탈로그에는 동일한 연산자 또는 동일한 이름을 가진 연산자가 포함되어 있습니다.
  4. 설치하려는 Operator가 AllNamespaces 설치 모드를 지원하고 이 모드를 사용하기로 선택한 경우 이 단계를 건너뜁니다. openshift-operators 네임스페이스에는 기본적으로 global-operators 라는 적절한 Operator 그룹이 이미 있기 때문입니다.

    설치하려는 Operator가 SingleNamespace 설치 모드를 지원하고 이 모드를 사용하기로 선택한 경우 관련 네임스페이스에 적절한 Operator 그룹이 있는지 확인해야 합니다. 존재하지 않는 경우 다음 단계에 따라 하나를 만들 수 있습니다.

    중요

    네임스페이스당 하나의 Operator 그룹만 가질 수 있습니다. 자세한 내용은 “Operator 그룹"을 참조하십시오.

    1. SingleNamespace 설치 모드를 위해 operatorgroup.yaml 과 같은 OperatorGroup 개체 YAML 파일을 만듭니다.

      SingleNamespace 설치 모드의 OperatorGroup 오브젝트의 예

      apiVersion: operators.coreos.com/v1
      kind: OperatorGroup
      metadata:
        name: <operatorgroup_name>
        namespace: <namespace> 
      1
      
      spec:
        targetNamespaces:
        - <namespace> 
      2
      Copy to Clipboard Toggle word wrap

      1 2
      SingleNamespace 설치 모드의 경우 metadata.namespacespec.targetNamespaces 필드 모두에 동일한 <namespace> 값을 사용합니다.
    2. OperatorGroup 개체를 생성합니다.

      $ oc apply -f operatorgroup.yaml
      Copy to Clipboard Toggle word wrap
  5. 네임스페이스를 Operator에 구독하려면 Subscription 객체를 만듭니다.

    1. Subscription 객체에 대한 YAML 파일을 만듭니다(예: subscription.yaml ):

      참고

      Operator의 특정 버전을 구독하려면, startingCSV 필드를 원하는 버전으로 설정하고 installPlanApproval 필드를 Manual 로 설정하여 카탈로그에 이후 버전이 있는 경우 Operator가 자동으로 업그레이드되지 않도록 합니다. 자세한 내용은 다음의 "특정 시작 연산자 버전이 있는 예제 구독 개체"를 참조하세요.

      예 4.3. Subscription 개체 예

      apiVersion: operators.coreos.com/v1alpha1
      kind: Subscription
      metadata:
        name: <subscription_name>
        namespace: <namespace_per_install_mode> 
      1
      
      spec:
        channel: <channel_name> 
      2
      
        name: <operator_name> 
      3
      
        source: <catalog_name> 
      4
      
        sourceNamespace: <catalog_source_namespace> 
      5
      
        config:
          env: 
      6
      
          - name: ARGS
            value: "-v=10"
          envFrom: 
      7
      
          - secretRef:
              name: license-secret
          volumes: 
      8
      
          - name: <volume_name>
            configMap:
              name: <configmap_name>
          volumeMounts: 
      9
      
          - mountPath: <directory_name>
            name: <volume_name>
          tolerations: 
      10
      
          - operator: "Exists"
          resources: 
      11
      
            requests:
              memory: "64Mi"
              cpu: "250m"
            limits:
              memory: "128Mi"
              cpu: "500m"
          nodeSelector: 
      12
      
            foo: bar
      Copy to Clipboard Toggle word wrap
      1
      기본 AllNamespaces 설치 모드 사용의 경우 openshift-operators 네임스페이스를 지정합니다. 혹은, 사용자 정의 글로벌 네임스페이스를 생성한 경우 이를 지정할 수 있습니다. SingleNamespace 설치 모드를 사용하는 경우 해당 단일 네임스페이스를 지정합니다.
      2
      등록할 채널의 이름입니다.
      3
      등록할 Operator의 이름입니다.
      4
      Operator를 제공하는 카탈로그 소스의 이름입니다.
      5
      카탈로그 소스의 네임스페이스입니다. 기본 OperatorHub 카탈로그 소스에는 openshift-marketplace를 사용합니다.
      6
      env 매개변수는 OLM에서 생성한 Pod의 모든 컨테이너에 존재해야 하는 환경 변수 목록을 정의합니다.
      7
      envFrom 매개변수는 컨테이너의 환경 변수를 채울 소스 목록을 정의합니다.
      8
      볼륨 매개변수는 OLM에서 생성한 포드에 존재해야 하는 볼륨 목록을 정의합니다.
      9
      volumeMounts 매개변수는 OLM에서 생성한 Pod의 모든 컨테이너에 있어야 하는 볼륨 마운트 목록을 정의합니다. volumeMount가 존재하지 않는 볼륨을 참조하는 경우 OLM에서 Operator를 배포하지 못합니다.
      10
      허용 오차 매개변수는 OLM에서 생성한 Pod에 대한 허용 오차 목록을 정의합니다.
      11
      리소스 매개변수는 OLM에서 생성한 Pod의 모든 컨테이너에 대한 리소스 제약 조건을 정의합니다.
      12
      nodeSelector 매개변수는 OLM에서 생성한 Pod에 대한 NodeSelector를 정의합니다.

      예 4.4. 특정 시작 Operator 버전이 있는 예제 구독 객체

      apiVersion: operators.coreos.com/v1alpha1
      kind: Subscription
      metadata:
        name: example-operator
        namespace: example-operator
      spec:
        channel: stable-3.7
        installPlanApproval: Manual 
      1
      
        name: example-operator
        source: custom-operators
        sourceNamespace: openshift-marketplace
        startingCSV: example-operator.v3.7.10 
      2
      Copy to Clipboard Toggle word wrap
      1
      지정된 버전이 카탈로그의 이후 버전으로 대체될 경우 승인 전략을 Manual로 설정합니다. 이 계획에서는 이후 버전으로 자동 업그레이드할 수 없으므로 시작 CSV에서 설치를 완료하려면 수동 승인이 필요합니다.
      2
      Operator CSV의 특정 버전을 설정합니다.
    2. Amazon Web Services(AWS) 보안 토큰 서비스(STS), Microsoft Entra 워크로드 ID, Google Cloud Platform 워크로드 ID 등 토큰 인증이 활성화된 클라우드 공급자의 클러스터의 경우 다음 단계에 따라 구독 객체를 구성합니다.

      1. 구독 개체가 수동 업데이트 승인으로 설정되어 있는지 확인하세요.

        예 4.5. 수동 업데이트 승인이 있는 Subscription 오브젝트의 예

        kind: Subscription
        # ...
        spec:
          installPlanApproval: Manual 
        1
        Copy to Clipboard Toggle word wrap
        1
        업데이트에 대한 자동 승인 기능이 있는 구독은 업데이트하기 전에 권한을 변경해야 할 수 있으므로 권장하지 않습니다. 업데이트에 대한 수동 승인 기능이 있는 구독을 통해 관리자는 이후 버전의 권한을 확인하고, 필요한 조치를 취한 다음 업데이트할 수 있습니다.
      2. 구독 개체의 구성 섹션에 관련 클라우드 공급자별 필드를 포함합니다.

        클러스터가 AWS STS 모드인 경우 다음 필드를 포함합니다.

        예 4.6. AWS STS 변수가 포함된 구독 객체 예시

        kind: Subscription
        # ...
        spec:
          config:
            env:
            - name: ROLEARN
              value: "<role_arn>" 
        1
        Copy to Clipboard Toggle word wrap
        1
        역할 ARN 세부 정보를 포함하세요.

        클러스터가 워크로드 ID 모드에 있는 경우 다음 필드를 포함합니다.

        예 4.7. 워크로드 ID 변수가 있는 예제 구독 객체

        kind: Subscription
        # ...
        spec:
         config:
           env:
           - name: CLIENTID
             value: "<client_id>" 
        1
        
           - name: TENANTID
             value: "<tenant_id>" 
        2
        
           - name: SUBSCRIPTIONID
             value: "<subscription_id>" 
        3
        Copy to Clipboard Toggle word wrap
        1
        클라이언트 ID를 포함하세요.
        2
        세입자 ID를 포함하세요.
        3
        구독 ID를 포함하세요.

        클러스터가 GCP Workload Identity 모드에 있는 경우 다음 필드를 포함합니다.

        예 4.8. GCP 워크로드 ID 변수가 있는 Subscription 오브젝트의 예

        kind: Subscription
        # ...
        spec:
         config:
           env:
           - name: AUDIENCE
             value: "<audience_url>" 
        1
        
           - name: SERVICE_ACCOUNT_EMAIL
             value: "<service_account_email>" 
        2
        Copy to Clipboard Toggle word wrap

        다음과 같습니다.

        <audience>

        관리자가 GCP 워크로드 ID를 설정할 때 GCP에 생성한 AUDIENCE 값은 다음 형식의 미리 포맷된 URL이어야 합니다.

        //iam.googleapis.com/projects/<project_number>/locations/global/workloadIdentityPools/<pool_id>/providers/<provider_id>
        Copy to Clipboard Toggle word wrap
        <service_account_email>

        SERVICE_ACCOUNT_EMAIL 값은 Operator 작업 중에 가장되는 GCP 서비스 계정 이메일입니다. 예:

        <service_account_name>@<project_id>.iam.gserviceaccount.com
        Copy to Clipboard Toggle word wrap
    3. 다음 명령을 실행하여 서브스크립션 오브젝트를 생성합니다.

      $ oc apply -f subscription.yaml
      Copy to Clipboard Toggle word wrap
  6. installPlanApproval 필드를 Manual 로 설정하면 보류 중인 설치 계획을 수동으로 승인하여 Operator 설치를 완료합니다. 자세한 내용은 "보류 중인 운영자 업데이트 수동 승인"을 참조하세요.

이 시점에서 OLM은 이제 선택한 Operator를 인식합니다. Operator의 CSV(클러스터 서비스 버전)가 대상 네임스페이스에 표시되고 Operator에서 제공하는 API를 생성에 사용할 수 있어야 합니다.

검증

  1. 다음 명령을 실행하여 설치된 Operator의 구독 개체 상태를 확인하세요.

    $ oc describe subscription <subscription_name> -n <namespace>
    Copy to Clipboard Toggle word wrap
  2. SingleNamespace 설치 모드에 대한 Operator 그룹을 생성한 경우 다음 명령을 실행하여 OperatorGroup 개체의 상태를 확인하세요.

    $ oc describe operatorgroup <operatorgroup_name> -n <namespace>
    Copy to Clipboard Toggle word wrap

4.1.4. 멀티테넌트 클러스터를 위한 Operator의 여러 인스턴스 준비

클러스터 관리자는 멀티테넌트 클러스터에서 사용할 Operator의 여러 인스턴스를 추가할 수 있습니다. 이는 최소 권한의 원칙을 위반하는 것으로 간주될 수 있는 표준 모든 네임스페이스 설치 모드나 널리 채택되지 않은 다중 네임스페이스 모드를 사용하는 것에 대한 대안적인 솔루션입니다. 자세한 내용은 "멀티테넌트 클러스터의 연산자"를 참조하세요.

다음 절차에서 테넌트는 배포된 작업 부하 세트에 대한 공통 액세스 및 권한을 공유하는 사용자 또는 사용자 그룹입니다. 테넌트 운영자는 해당 테넌트만 사용하도록 의도된 운영자의 인스턴스입니다.

사전 요구 사항

  • 설치하려는 Operator의 모든 인스턴스는 주어진 클러스터 전체에서 동일한 버전이어야 합니다.

    중요

    이 내용과 기타 제한 사항에 대한 자세한 내용은 "멀티테넌트 클러스터의 연산자"를 참조하세요.

프로세스

  1. Operator를 설치하기 전에 테넌트 네임스페이스와 별도로 테넌트 Operator에 대한 네임스페이스를 만듭니다. 예를 들어 테넌트의 네임스페이스가 team1 인 경우 team1-operator 네임스페이스를 만들 수 있습니다.

    1. 네임스페이스 리소스를 정의하고 YAML 파일을 저장합니다(예: team1-operator.yaml ):

      apiVersion: v1
      kind: Namespace
      metadata:
        name: team1-operator
      Copy to Clipboard Toggle word wrap
    2. 다음 명령을 실행하여 네임스페이스를 생성합니다.

      $ oc create -f team1-operator.yaml
      Copy to Clipboard Toggle word wrap
  2. 테넌트의 네임스페이스로 범위가 지정된 테넌트 Operator에 대한 Operator 그룹을 만들고 spec.targetNamespaces 목록에 해당 네임스페이스 항목 하나만 포함합니다.

    1. OperatorGroup 리소스를 정의하고 YAML 파일을 저장합니다(예: team1-operatorgroup.yaml ):

      apiVersion: operators.coreos.com/v1
      kind: OperatorGroup
      metadata:
        name: team1-operatorgroup
        namespace: team1-operator
      spec:
        targetNamespaces:
        - team1 
      1
      Copy to Clipboard Toggle word wrap
      1 1
      spec.targetNamespaces 목록에서 테넌트의 네임스페이스만 정의합니다.
    2. 다음 명령을 실행하여 Operator 그룹을 만듭니다.

      $ oc create -f team1-operatorgroup.yaml
      Copy to Clipboard Toggle word wrap

다음 단계

  • 테넌트 Operator 네임스페이스에 Operator를 설치합니다. 이 작업은 CLI 대신 웹 콘솔에서 OperatorHub를 사용하면 더 쉽게 수행할 수 있습니다. 자세한 절차는 "웹 콘솔을 사용하여 OperatorHub에서 설치"를 참조하세요.

    참고

    Operator 설치가 완료되면 Operator는 테넌트 Operator 네임스페이스에 상주하며 테넌트 네임스페이스를 감시하지만 Operator의 Pod나 서비스 계정은 테넌트에서 볼 수 없고 사용할 수 없습니다.

4.1.5. 사용자 정의 네임스페이스에 글로벌 연산자 설치

OpenShift Container Platform 웹 콘솔을 사용하여 Operator를 설치할 때 기본적으로 모든 네임스페이스 설치 모드를 지원하는 Operator가 기본 openshift-operators 글로벌 네임스페이스에 설치됩니다. 이로 인해 네임스페이스의 모든 운영자 간의 공유 설치 계획 및 업데이트 정책과 관련된 문제가 발생할 수 있습니다. 이러한 제한 사항에 대한 자세한 내용은 "다중 테넌시 및 운영자 공동 배치"를 참조하세요.

클러스터 관리자는 사용자 지정 글로벌 네임스페이스를 만들고 해당 네임스페이스를 사용하여 개별 또는 범위가 지정된 Operator 집합과 해당 종속성을 설치하여 이러한 기본 동작을 수동으로 우회할 수 있습니다.

사전 요구 사항

  • cluster-admin 역할의 사용자로 클러스터에 액세스할 수 있어야 합니다.

프로세스

  1. Operator를 설치하기 전에 원하는 Operator를 설치하기 위한 네임스페이스를 만드세요. 이 설치 네임스페이스는 사용자 정의 글로벌 네임스페이스가 됩니다.

    1. 네임스페이스 리소스를 정의하고 YAML 파일을 저장합니다(예: global-operators.yaml ):

      apiVersion: v1
      kind: Namespace
      metadata:
        name: global-operators
      Copy to Clipboard Toggle word wrap
    2. 다음 명령을 실행하여 네임스페이스를 생성합니다.

      $ oc create -f global-operators.yaml
      Copy to Clipboard Toggle word wrap
  2. 모든 네임스페이스를 감시하는 운영자 그룹인 사용자 지정 글로벌 운영자 그룹을 만듭니다.

    1. OperatorGroup 리소스를 정의하고 YAML 파일(예: global-operatorgroup.yaml) 을 저장합니다. spec.selectorspec.targetNamespaces 필드를 모두 생략하여 모든 네임스페이스를 선택하는 글로벌 연산자 그룹 으로 만듭니다.

      apiVersion: operators.coreos.com/v1
      kind: OperatorGroup
      metadata:
        name: global-operatorgroup
        namespace: global-operators
      Copy to Clipboard Toggle word wrap
      참고

      생성된 글로벌 Operator 그룹의 status.namespaces 에는 빈 문자열( "" )이 포함되어 있는데, 이는 소비하는 Operator에게 모든 네임스페이스를 감시해야 한다는 신호를 보냅니다.

    2. 다음 명령을 실행하여 Operator 그룹을 만듭니다.

      $ oc create -f global-operatorgroup.yaml
      Copy to Clipboard Toggle word wrap

다음 단계

  • 사용자 정의 글로벌 네임스페이스에 원하는 연산자를 설치합니다. 웹 콘솔은 Operator 설치 중에 설치된 네임스페이스 메뉴를 사용자 정의 글로벌 네임스페이스로 채우지 않으므로 설치 작업은 OpenShift CLI( oc )를 사용해서만 수행할 수 있습니다. 자세한 설치 절차는 "CLI를 사용하여 OperatorHub에서 설치"를 참조하세요.

    참고

    Operator 설치를 시작할 때 Operator에 종속성이 있는 경우 해당 종속성도 사용자 지정 글로벌 네임스페이스에 자동으로 설치됩니다. 결과적으로 종속성 운영자는 동일한 업데이트 정책과 공유 설치 계획을 갖는 것이 유효합니다.

4.1.6. Operator 워크로드의 Pod 배치

기본적으로 OLM(Operator Lifecycle Manager)은 Operator를 설치하거나 Operand 워크로드를 배포할 때 임의의 작업자 노드에 Pod를 배치합니다. 관리자는 노드 선택기, 테인트 및 허용 오차가 결합된 프로젝트를 사용하여 특정 노드에 Operator 및 Operand 배치를 제어할 수 있습니다.

Operator 및 Operand 워크로드의 Pod 배치 제어에는 다음과 같은 사전 요구 사항이 있습니다.

  1. 요구 사항에 따라 Pod를 대상으로 할 노드 또는 노드 집합을 결정합니다. 사용 가능한 경우 노드 또는 노드를 식별하는 node-role.kubernetes.io/app과 같은 기존 레이블을 확인합니다. 그렇지 않은 경우 컴퓨팅 머신 세트를 사용하거나 노드를 직접 편집하여 myoperator 와 같은 레이블을 추가합니다. 이후 단계에서 이 레이블을 프로젝트의 노드 선택기로 사용합니다.
  2. 특정 레이블이 있는 포드만 노드에서 실행되도록 하고, 관련 없는 워크로드를 다른 노드로 이동시키려면, 컴퓨팅 머신 세트를 사용하거나 노드를 직접 편집하여 노드에 테인트를 추가합니다. 테인트와 일치하지 않는 새 Pod를 노드에서 예약할 수 없도록 하는 효과를 사용합니다. 예를 들어 myoperator:NoSchedule 테인트를 사용하면 테인트와 일치하지 않는 새 Pod가 해당 노드에 예약되지 않지만 노드의 기존 Pod는 그대로 유지됩니다.
  3. 기본 노드 선택기와 테인트를 추가한 경우 일치하는 허용 오차로 구성된 프로젝트를 만듭니다.

이 시점에서 생성한 프로젝트를 사용하여 다음 시나리오에서 지정된 노드로 Pod를 이동할 수 있습니다.

Operator Pod의 경우
관리자는 다음 섹션에 설명된 대로 프로젝트에서 구독 개체를 만들 수 있습니다. 결과적으로 Operator Pod가 지정된 노드에 배치됩니다.
Operand Pod의 경우
설치된 Operator를 사용하여 프로젝트에 애플리케이션을 생성할 수 있습니다. 그러면 Operator가 프로젝트에 소유한 CR(사용자 정의 리소스)이 배치됩니다. 결과적으로 Operator가 다른 네임스페이스에 클러스터 수준 오브젝트 또는 리소스를 배포하지 않는 한 피연산자 Pod가 지정된 노드에 배치됩니다. 이 경우 사용자 정의 Pod 배치가 적용되지 않습니다.

4.1.7. 운영자가 설치된 위치 제어

기본적으로 Operator를 설치하면 OpenShift Container Platform은 작업자 노드 중 하나에 Operator Pod를 무작위로 설치합니다. 하지만 특정 노드나 노드 세트에 해당 Pod를 예약하려는 상황이 있을 수도 있습니다.

다음 예에서는 Operator Pod를 특정 노드 또는 노드 세트에 예약하려는 상황을 설명합니다.

  • 운영자가 amd64 또는 arm64 와 같은 특정 플랫폼을 필요로 하는 경우
  • 운영자가 Linux나 Windows와 같은 특정 운영 체제를 필요로 하는 경우
  • 동일한 호스트 또는 동일한 랙에 있는 호스트에서 함께 작업하는 운영자를 예약하려는 경우
  • 네트워크 또는 하드웨어 문제로 인한 가동 중지를 방지하기 위해 인프라 전반에 걸쳐 운영자를 분산하려는 경우

노드 친화성, 포드 친화성 또는 포드 반친화성 제약 조건을 Operator의 구독 객체에 추가하여 Operator Pod가 설치되는 위치를 제어할 수 있습니다. 노드 친화성은 스케줄러가 포드를 어디에 배치할 수 있는지 결정하는 데 사용하는 일련의 규칙입니다. Pod 친화성을 사용하면 관련 Pod가 동일한 노드에 예약되도록 할 수 있습니다. Pod 안티-어피니티를 사용하면 Pod가 노드에 예약되는 것을 방지할 수 있습니다.

다음 예제에서는 노드 친화성 또는 포드 반친화성을 사용하여 클러스터의 특정 노드에 Custom Metrics Autoscaler Operator의 인스턴스를 설치하는 방법을 보여줍니다.

특정 노드에 Operator Pod를 배치하는 노드 친화성 예

apiVersion: operators.coreos.com/v1alpha1
kind: Subscription
metadata:
  name: openshift-custom-metrics-autoscaler-operator
  namespace: openshift-keda
spec:
  name: my-package
  source: my-operators
  sourceNamespace: operator-registries
  config:
    affinity:
      nodeAffinity: 
1

        requiredDuringSchedulingIgnoredDuringExecution:
          nodeSelectorTerms:
          - matchExpressions:
            - key: kubernetes.io/hostname
              operator: In
              values:
              - ip-10-0-163-94.us-west-2.compute.internal
#...
Copy to Clipboard Toggle word wrap

1
운영자의 Pod가 ip-10-0-163-94.us-west-2.compute.internal 이라는 노드에 예약되어야 하는 노드 친화성입니다.

특정 플랫폼이 있는 노드에 Operator Pod를 배치하는 노드 친화성 예

apiVersion: operators.coreos.com/v1alpha1
kind: Subscription
metadata:
  name: openshift-custom-metrics-autoscaler-operator
  namespace: openshift-keda
spec:
  name: my-package
  source: my-operators
  sourceNamespace: operator-registries
  config:
    affinity:
      nodeAffinity: 
1

        requiredDuringSchedulingIgnoredDuringExecution:
          nodeSelectorTerms:
          - matchExpressions:
            - key: kubernetes.io/arch
              operator: In
              values:
              - arm64
            - key: kubernetes.io/os
              operator: In
              values:
              - linux
#...
Copy to Clipboard Toggle word wrap

1
운영자의 Pod가 kubernetes.io/arch=arm64kubernetes.io/os=linux 레이블이 있는 노드에 예약되어야 하는 노드 친화성입니다.

하나 이상의 특정 노드에 Operator Pod를 배치하는 Pod 친화성 예

apiVersion: operators.coreos.com/v1alpha1
kind: Subscription
metadata:
  name: openshift-custom-metrics-autoscaler-operator
  namespace: openshift-keda
spec:
  name: my-package
  source: my-operators
  sourceNamespace: operator-registries
  config:
    affinity:
      podAffinity: 
1

        requiredDuringSchedulingIgnoredDuringExecution:
        - labelSelector:
            matchExpressions:
            - key: app
              operator: In
              values:
              - test
          topologyKey: kubernetes.io/hostname
#...
Copy to Clipboard Toggle word wrap

1
운영자의 Pod를 app=test 레이블이 있는 Pod가 있는 노드에 배치하는 Pod 친화성입니다.

Operator Pod가 하나 이상의 특정 노드에 접근하지 못하도록 하는 Pod 반친화성 예

apiVersion: operators.coreos.com/v1alpha1
kind: Subscription
metadata:
  name: openshift-custom-metrics-autoscaler-operator
  namespace: openshift-keda
spec:
  name: my-package
  source: my-operators
  sourceNamespace: operator-registries
  config:
    affinity:
      podAntiAffinity: 
1

        requiredDuringSchedulingIgnoredDuringExecution:
        - labelSelector:
            matchExpressions:
            - key: cpu
              operator: In
              values:
              - high
          topologyKey: kubernetes.io/hostname
#...
Copy to Clipboard Toggle word wrap

1
운영자의 포드가 cpu=high 레이블이 있는 포드가 있는 노드에 예약되는 것을 방지하는 포드 반친화성입니다.

프로세스

Operator Pod의 배치를 제어하려면 다음 단계를 완료하세요.

  1. 평소와 같이 Operator를 설치합니다.
  2. 필요한 경우, 친화성에 적절하게 응답할 수 있도록 노드에 레이블이 지정되었는지 확인하세요.
  3. 연산자 구독 객체를 편집하여 친화성을 추가합니다.

    apiVersion: operators.coreos.com/v1alpha1
    kind: Subscription
    metadata:
      name: openshift-custom-metrics-autoscaler-operator
      namespace: openshift-keda
    spec:
      name: my-package
      source: my-operators
      sourceNamespace: operator-registries
      config:
        affinity: 
    1
    
          nodeAffinity:
            requiredDuringSchedulingIgnoredDuringExecution:
              nodeSelectorTerms:
              - matchExpressions:
                - key: kubernetes.io/hostname
                  operator: In
                  values:
                  - ip-10-0-185-229.ec2.internal
    #...
    Copy to Clipboard Toggle word wrap
    1
    nodeAffinity , podAffinity 또는 podAntiAffinity를 추가합니다. 친화성 생성에 대한 자세한 내용은 다음의 추가 리소스 섹션을 참조하세요.

검증

  • 특정 노드에 포드가 배포되었는지 확인하려면 다음 명령을 실행하세요.

    $ oc get pods -o wide
    Copy to Clipboard Toggle word wrap

    출력 예

    NAME                                                  READY   STATUS    RESTARTS   AGE   IP            NODE                           NOMINATED NODE   READINESS GATES
    custom-metrics-autoscaler-operator-5dcc45d656-bhshg   1/1     Running   0          50s   10.131.0.20   ip-10-0-185-229.ec2.internal   <none>           <none>
    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