이번 게시글에서는 쿠버네티스 오퍼레이터에 대해 정리합니다.
게시글을 읽기전 쿠버네티스 아키텍쳐와 동작원리, cr, crd, 게시글을 읽어보시면 이해가 더 수월할 것 같습니다.
1. controller란
SW에서의 컨트롤러는 보통 어딘가 쌓여있는 요청을 처리하는 장치를 얘기합니다.(device controller, spring controller 등)
쿠버네티스의 컨트롤러는 etcd를 감시하여 선언된 api에 맞게 원하는 상태로 만들어주려고 노력하는 컴포넌트입니다.
대표적으로 pod을 생성하여 etcd에 넣어놓으면 그 변경을 컨트롤러가 감지하여 컨테이너를 띄워주게 됩니다.
2. custom controller란
커스텀 컨트롤러란 일반적인 pod, deployment, service가 아닌 custom resource(cr)을 처리하는 컴포넌트입니다.
cr과 crd를 사용하여 만든 커스텀 리소스는 etcd에 올라가는 구조화된 데이터일 뿐입니다.
커스텀리소스를 이용해서 원하는 동작을 하기위해서는 커스텀 컨트롤러가 필요합니다. 커스텀 리소스를 이용하여 사용자가 원하는 상태를 선언하면(etcd에 올라가면) 커스텀 컨트롤러가 그 상태를 맞추기 위해 동작하게 됩니다.
3. operator란
- CR의 컨트롤러 역할을 할 수 있는 쿠버네티스 API 서버의 클라이언트(개발 패턴, 익스텐션을 칭하기도합니다.)
- k8s 컨트롤러 개념을 통해 쿠버네티스 코드를 수정하지않고 클러스터의 동작을 확장합니다.
- 컨트롤러의 역할을 할 뿐 아니라 쿠버네티스 운영에 필요한 모든것을 포함합니다.
우리는 쿠버네티스를 만든 개발자가 아닙니다. 쿠버네티스 컨트롤러를 직접 만들수는 없습니다.
대신 쿠버네티스는 operator를 제공합니다.
쿠버네티스는 클라이언트를 붙여 서버의 동작을 제어할 수 있는 컴포넌트를 만들어놨습니다.
쿠버네티스의 소스를 몰라도 operator를 만들어놓으면 cr과 crd에 의한 etcd의 변경을 감지하고 쿠버네티스에 원하는 동작을 하게 할 수 있습니다.
4. operator 개발방법
- client-go, controller-runtime, Metaccontroller 등의 Go 라이브러리로 밑바닥부터 개발
- 오퍼레이터 프레임워크 사용(operator-sdk) - (golang으로 개발해야합니다)
엔서블, 헬름에서도 지원하는것들이 많지만, go를 이용해 개발하게되면 원하는 로직을 디버깅하며 개발할 수 있습니다.
다음게시글에서 오퍼레이터 프레임워크인 operator-sdk를 통해 쿠버네티스 operator 구축을 해보겠습니다.
'kubernetes' 카테고리의 다른 글
[kubernetes] 쿠버네티스 QOS란 (0) | 2021.11.25 |
---|---|
[kubernetes] operator-sdk를 사용하여 쿠버네티스 오퍼레이터 구축하기 (operator sdk 예제) (0) | 2021.11.05 |
[kubernetes] 쿠버네티스 cr과 crd란?(쿠버네티스 확장) (4) | 2021.07.14 |
[kubernetes] 쿠버네티스 인증, 인가(rbac) (0) | 2021.07.14 |
[kubernetes] 쿠버네티스(kubernetes) cronjob 이란 (0) | 2021.07.14 |
댓글