5.6.6. Operator 조건 활성화

OLM(Operator Lifecycle Manager)에서는 Operator에 Operator를 관리하는 동안 OLM 동작에 영향을 미치는 복잡한 상태를 보고하는 채널을 제공합니다. 기본적으로 OLM은 Operator를 설치할 때 OperatorCondition CRD(사용자 정의 리소스 정의)를 생성합니다. OperatorCondition CR(사용자 정의)에 설정된 조건에 따라 OLM의 동작이 적절하게 변경됩니다.

Operator 조건을 지원하려면 Operator가 OLM에서 생성한 OperatorCondition CR을 읽고 다음 작업을 완료할 수 있어야 합니다.

  • 특정 조건을 가져옵니다.
  • 특정 조건의 상태를 설정합니다.

이 작업은 operator-lib 라이브러리를 사용하여 수행할 수 있습니다. Operator 작성자는 라이브러리에서 클러스터의 Operator 보유 OperatorCondition CR에 액세스할 수 있도록 Operator에 controller-runtime 클라이언트를 제공할 수 있습니다.

라이브러리에서는 일반 Conditions 인터페이스를 제공합니다. 이 인터페이스는 OperatorCondition CR에서 다음과 같은 방법으로 conditionTypeGetSet합니다.

Get
라이브러리는 특정 조건을 가져오기 위해 controller-runtimeclient.Get 함수를 사용합니다. 이 함수에는 conditionAccessor에 있는 types.NamespacedName 유형의 ObjectKey가 필요합니다.
Set
특정 조건의 상태를 업데이트하기 위해 라이브러리는 controller-runtimeclient.Update 함수를 사용합니다. conditionType이 CRD에 없으면 오류가 발생합니다.

Operator는 CR의 status 하위 리소스만 수정할 수 있습니다. Operator는 조건을 포함하도록 status.conditions 어레이를 삭제하거나 업데이트할 수 있습니다. 조건에 있는 필드의 형식 및 설명에 대한 자세한 내용은 업스트림 조건 GoDocs를 참조하십시오.

참고

Operator SDK v1.3.0은 operator-lib v0.3.0을 지원합니다.

사전 요구 사항

  • Operator SDK를 사용하여 생성한 Operator 프로젝트입니다.

프로세스

Operator 프로젝트에서 Operator 조건을 활성화하려면 다음을 수행합니다.

  1. Operator 프로젝트의 go.mod 파일에 operator-framework/operator-lib을 필수 라이브러리로 추가합니다.

    module github.com/example-inc/memcached-operator
    
    go 1.15
    
    require (
      k8s.io/apimachinery v0.19.2
      k8s.io/client-go v0.19.2
      sigs.k8s.io/controller-runtime v0.7.0
      operator-framework/operator-lib v0.3.0
    )
  2. Operator 논리에 다음과 같은 결과가 발생하는 자체 생성자를 작성합니다.

    • controller-runtime 클라이언트를 허용합니다.
    • conditionType을 허용합니다.
    • Condition 인터페이스를 반환하여 조건을 업데이트하거나 추가합니다.

    OLM은 현재 Upgradeable 조건을 지원하므로 Upgradeable 조건에 액세스할 수 있는 인터페이스를 생성할 수 있습니다. 예를 들면 다음과 같습니다.

    import (
      ...
      apiv1 "github.com/operator-framework/api/pkg/operators/v1"
    )
    
    func NewUpgradeable(cl client.Client) (Condition, error) {
      return NewCondition(cl, "apiv1.OperatorUpgradeable")
    }
    
    cond, err := NewUpgradeable(cl);

    이 예제에서는 유형 Condition의 변수 cond를 생성하는 데 NewUpgradeable 생성자가 추가로 사용됩니다. 결국 cond 변수에는 OLM Upgradeable 조건을 처리하는 데 사용할 수 있는 GetSet 방법이 포함됩니다.

추가 리소스