[golang] kubernetes Operator 만들기 Controller-runtime 1 - Controller
[golang] kubernetes Operator 만들기 Controller-runtime 2 - Overview
[golang] kubernetes Operator 만들기 Controller-runtime 3 - Manager
[golang] kubernetes Operator 만들기 Controller-runtime 4 - Builder
Overview
이전 글에서는 간단한 controller-runtime을 이용해 example controller를 만들어 보았다.
이번엔 controller-runtime의 컴포넌트들에 대해 자세히 알아보자
Architecture
kubebuilder 아키텍처의 메인 컴포넌트 들이다.
(kubebuilder는 내부적으로 controller-runtime을 사용함)
대부분의 컨트롤러는 이전 글의 example controller에서 사용된걸 알 수있다.
- Manager
- Controller
- Reconciler
- Client
- Cache
- Webhook
Flow of Kubernetes controller
위의 그림과는 다르게 이 그림을 통해 전체적인 flow를 이해하는데에 도움이 됨
그림에서는 Manager, Controller, Reconciler를 중심으로 controller-runtime이 쿠버네티스에서 동작하는 것을 설명해 준다.
- Reconciler는 코어 reconcil 로직을 구현하는 컴포넌트이다.
- Reconciler는 모든 controller를 실행하기 위한 컴포넌트인 매니저에 등록된다.
- Reconciler가 등록되었을 때, 우리는 Pod, Deploy, CR(custom resource) 등 대상 리소스를 지정할 수 있다.
또한 각 컴포넌트들은 내부적으로 몇개의 컴포넌트 등을 가지고 있음
- Controller가 Manager에 의해 실행 될때, 리소스들의 변경을 감지하고 그 정보를 WorkQueue에 보내는 Source 컴포넌트가 실행 된다.
- Client는 API 서버와 통신하며 Cluster라고 불리는 컴포넌트의 Manager로 초기화 된다. 초기화된 Client는 등록된 controller들에게 공유되며, Client는 Reconclier에게 로직에 따른 Kubernetes object가 변경됨
지금까지 controller-runtime의 컴포넌트들이 쿠버네티스에서 어떻게 동작 하는지 작동 방식에 대해 알아 보았다.
controller-runtime 없이 이러한 개발을 진행한다면 코드는 다르겠지만 flow는 거의 바뀌지 않으니 만들어 놓은걸 감사하게 사용하자
Reperence
* 본 글은 Masato Naka의 medium 게시글을 참조 & 번역함
'golang' 카테고리의 다른 글
[golang] kubernetes Operator 만들기 Kubebuilder Controller-runtime 4 - Builder (1) | 2023.11.14 |
---|---|
[golang] kubernetes Operator 만들기 Kubebuilder Controller-runtime 3 - Manager (1) | 2023.11.14 |
[golang] kubernetes Operator 만들기 Kubebuilder Controller-runtime 1 - Controller (0) | 2023.11.14 |
[golang] go kubernetes client-go를 이용한 쿠버네티스 관리 (0) | 2023.11.14 |
[golang] Golang pointer, routine 포인터, 고루틴 (2) | 2023.11.13 |