본문 바로가기

Cloud

(Kubernetes) - operator pattern

반응형

🍳머리말

k8s docs 복붙글입니다.


📕 Operator

📔 정의

 operator는 CustomDefinitionResouce를 사용해 application 및 해당 component를 관리하는 k8s의 software extension입니다. Operator는 k8s 원칙, control loop를 따릅니다.

📔 목표

 operator pattern은 service 또는 service set을 관리하는 운영자의 주요 목표를 포착하는 것을 목표로 합니다. 특정 application 및 service를 돌보는 운영자는 system의 작동 방식, 배포 방법 및 문제가 있는 경우 대처 방법에 대해 깊이 알고 있습니다. k8s에서 workload를 실행하는 사람들은 반복 작업을 처리하기 위해 자동화를 사용하는 것을 좋아합니다. operator pattern은 k8s 자체가 제공하는 것 이상의 작업을 자동화하기 위해 code를 작성하는 방법을 포착합니다.

📔 기능

operator를 사용하면 k8s를 통해 많은 built-in 자동화 기능을 수행할 수 있습니다. workload 배포 및 실행을 자동화할 수 있고 k8s가 수행하는 방식을 자동화할 수 있습니다.

k8s의 controller 개념을 통해 k8s code자체를 수정하지 않고도 cluster의 동작을 확장할 수 있습니다. operator는 CRD(Custom Resource Definition)의 controller 역할을 하는 k8s api의 client입니다.

📔 예시

operator를 사용해 자동화할 수 있는 몇 가지 사항은 다음과 같습니다.

  • 주문형 application 배포
  • 해당 application의 상태를 backup하고 복원
  • database schema 또는 추가 구성 설정과 같은 관련 변경 사항에 따른 application code upgrade
  • k8s API를 지원하지 않는 application에 service를 게시해 검색을 지원
  • cluster의 전체 또는 일부에서 장애를 simulation해 가용성 test
  • 내부 member 선출 절차없이 분산 application의 leader를 선택

operator를 더 자세하게 볼 수 있는 방법은?

  1. cluster에 구성할 수 있는 SampleDB라는 CRD
  2. operator의 controller 부분이 포함됨 pod의 실행을 보장하는 deployment
  3. operator code의 container image
  4. control plane을 query해 어떤 SampleDB resource가 구성되어 있는지 알아내는 controller code
  5. operator의 핵심은 API server에 구성된 resource와 현재 상태를 일치시키는 방법을 알려주는 code입니다.
    • 새 SampleDB를 추가하면 operator는 PVC(Persistent Volume Claim)을 설정해 내구성있는 database storage, SampleDB를 실행하는 StatefulSet 및 초기 구성을 처리하는 job을 제공합니다.
    • SampleDB를 삭제하면 operator는 snap shot을 생성한 다음, StatefulSet과 volume도 제거되었는지 확인합니다.
  6. operator는 정기적인 database backup도 관리합니다. operator는 각 SampleDB resource에 대해 db에 연결하고 back up을 수행할 수 있는 pod를 생성하는 시기를 결정한다. 이 pod는 db연결 세부 정보 및 자격 증명이 있는 configmap 및 '/'또는 secret에 의존합니다. 
  7. operator는 관리하는 resource에 견고한 자동화를 제공하는 것을 목표로 하기 때문에 추가 지원 code가 있습니다. 이 예제에서 code는 db가 이전 version을 실행 중인지 확인하고, upgrade된 경우 이를 upgrade하는 job object를 생성합니다.

📔 배포

CRD의 정의 밑 연관 controller를 cluster에 추가함으로써 이뤄집니다. container화된 application을 실행하는 것처럼 controller는 일반적으로 control plane 외부에서 실행됩니다. 예를 들어 cluster에서 contoller를 deployment로 실행할 수 있습니다. 

📔 사용

operator가 배포되면 operator가 사용하는 resource의 종류를 추가, 수정 또는 삭제하여 사용합니다. 위의 예에 따라 operator 자체에 대한 deployment를 설정한 후 다음을 수행합니다.

kubectl get SampleDB                   # 구성된 데이터베이스 찾기
kubectl edit SampleDB/example-database # 일부 설정을 수동으로 변경하기

📔 자신만의 operator 작성

echosystem에 원하는 동작을 구현하는 operator가 없다면 직접 coding할 수 있습니다. 또한 k8s API client 역할을 할 수 있는 모든 언어 / runtime을 사용해 operator(즉, controller)를 구현합니다. 


📕참조

https://kubernetes.io/ko/docs/concepts/extend-kubernetes/operator/

 

오퍼레이터(operator) 패턴

오퍼레이터(Operator)는 사용자 정의 리소스를 사용하여 애플리케이션 및 해당 컴포넌트를 관리하는 쿠버네티스의 소프트웨어 익스텐션이다. 오퍼레이터는 쿠버네티스 원칙, 특히 컨트롤 루프를

kubernetes.io

 

'Cloud' 카테고리의 다른 글

(Kubernetes) - application에 data 주입 1  (0) 2021.12.06
(Kubernetes) - Custom Resource  (0) 2021.12.01
(Kubernetes) - init container  (0) 2021.11.15
(Kubernetes) - pod lifecycle  (0) 2021.11.15
(Kubernetes) - k8s namespace 생성하기  (0) 2021.11.09