🍳머리말
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를 더 자세하게 볼 수 있는 방법은?
- cluster에 구성할 수 있는 SampleDB라는 CRD
- operator의 controller 부분이 포함됨 pod의 실행을 보장하는 deployment
- operator code의 container image
- control plane을 query해 어떤 SampleDB resource가 구성되어 있는지 알아내는 controller code
- operator의 핵심은 API server에 구성된 resource와 현재 상태를 일치시키는 방법을 알려주는 code입니다.
- 새 SampleDB를 추가하면 operator는 PVC(Persistent Volume Claim)을 설정해 내구성있는 database storage, SampleDB를 실행하는 StatefulSet 및 초기 구성을 처리하는 job을 제공합니다.
- SampleDB를 삭제하면 operator는 snap shot을 생성한 다음, StatefulSet과 volume도 제거되었는지 확인합니다.
- operator는 정기적인 database backup도 관리합니다. operator는 각 SampleDB resource에 대해 db에 연결하고 back up을 수행할 수 있는 pod를 생성하는 시기를 결정한다. 이 pod는 db연결 세부 정보 및 자격 증명이 있는 configmap 및 '/'또는 secret에 의존합니다.
- 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 |