5장. Operator 개발

5.1. Operator SDK 정보

Operator 프레임워크Operator라는 Kubernetes 네이티브 애플리케이션을 효율적이고 확장 가능하며 자동화된 방식으로 관리하는 오픈 소스 툴킷입니다. Operator는 Kubernetes 확장성을 활용하여 클라우드 서비스(예: 프로비저닝, 스케일링, 백업, 복원) 자동화의 이점을 제공하는 동시에 Kubernetes를 실행할 수 있는 모든 위치에서 실행할 수 있습니다.

Operator를 사용하면 Kubernetes 상의 복잡한 상태 저장 애플리케이션을 쉽게 관리할 수 있습니다. 그러나 현재는 하위 API 사용, 상용구 작성, 중복으로 이어지는 모듈성 부족과 같은 문제로 인해 Operator를 작성하기 어려울 수 있습니다.

Operator 프레임워크의 구성 요소인 Operator SDK는 Operator 개발자가 Operator를 빌드, 테스트, 배포하는 데 사용할 수 있는 CLI(명령줄 인터페이스) 툴을 제공합니다.

Operator SDK를 사용하는 이유는 무엇입니까?

Operator SDK는 Kubernetes 네이티브 애플리케이션 구축 프로세스를 간소화하는데 이를 위해서는 애플리케이션별 운영 지식이 필요할 수 있습니다. Operator SDK를 사용하면 이러한 문제가 완화될 뿐만 아니라 미터링 또는 모니터링과 같이 다수의 공통 관리 기능에 필요한 상용구 코드의 양을 줄이는 데 도움이 됩니다.

Operator SDK는 controller-runtime 라이브러리를 사용하여 다음과 같은 기능을 제공함으로써 Operator를 더 쉽게 작성할 수 있는 프레임워크입니다.

  • 운영 논리를 더 직관적으로 작성할 수 있는 고급 API 및 추상화
  • 새 프로젝트를 신속하게 부트스트랩하기 위한 스캐폴드 및 코드 생성 툴
  • OLM(Operator Lifecycle Manager) 통합을 통해 클러스터에서 수행되는 Operator 패키지, 설치, 실행 작업 간소화
  • 일반적인 Operator 사용 사례를 포함하는 확장 기능
  • Prometheus Operator가 배포된 클러스터에서 사용할 수 있도록 생성되는 모든 Go 기반 Operator에 자동으로 설정된 지표

OpenShift Container Platform과 같은 Kubernetes 기반 클러스터에 대한 클러스터 관리자 액세스 권한이 있는 Operator 작성자는 Operator SDK CLI를 사용하여 Go, Ansible 또는 Helm을 기반으로 자체 Operator를 개발할 수 있습니다. Kubebuilder는 Go 기반 Operator의 스캐폴드 솔루션으로 Operator SDK에 포함되어 있습니다. 즉 기존 Kubebuilder 프로젝트를 그대로 Operator SDK와 함께 사용할 수 있으며 계속 작업할 수 있습니다.

참고

OpenShift Container Platform 4.6에서는 Operator SDK v0.19.4를 지원합니다.

5.1.1. Operator란 무엇인가?

기본 Operator 개념 및 용어에 대한 개요는 Operator 이해를 참조하십시오.

5.1.2. 개발 워크플로

Operator SDK는 다음 워크플로를 제공하여 새 Operator를 개발합니다.

  1. Operator SDK CLI(명령줄 인터페이스)를 사용하여 Operator 프로젝트를 생성합니다.
  2. CRD(사용자 정의 리소스 정의)를 추가하여 새 리소스 API를 정의합니다.
  3. Operator SDK API를 사용하여 조사할 리소스를 지정합니다.
  4. 지정된 핸들러에서 Operator 조정 논리를 정의하고 Operator SDK API를 사용하여 리소스와 상호 작용합니다.
  5. Operator SDK CLI를 사용하여 Operator 배포 매니페스트를 빌드하고 생성합니다.

그림 5.1. Operator SDK 워크플로

osdk 워크플로

Operator SDK를 사용하는 Operator는 Operator 작성자가 정의한 핸들러에서 조사하는 리소스에 대한 이벤트를 처리하고 애플리케이션 상태를 조정하는 작업을 수행합니다.

5.1.3. 추가 리소스