Reconiliation Loop란

설명

- K8s에서 선언된 desired state와 실제 current state의 차이를 감지하고 해소하는 반복 루프

- Reconiliation Loop과 흔히 Controller 패턴, Operator 패턴는 비슷해서 크게 구분 안함

동작

[ 핵심 3개 동작 ]
Watch 
 - Controller가 API Server의 etcd 변경 이벤트를 watch
 - Pod 생성/수정/샂게 등의 이벤트가 Informer를 통해 들어옴

Compare(= Analyze)
 - 현재 상태와 선언된 desired state를 비교
 - 변화가 차이를 탐지함

Reconsile(= Act)
 - 차이를 해소하기 위해 액션을 수행
 - Pod가 부족하면 생성, 초과하면 삭제함

동작 flow

image.png

[ 핵심 ]
- 기본 K8s Resoruce의 Reconsiliation Loop를 동작하는건 각 리소스의 Controller Manager
- Controller 종류
		1. Deployment Controller
		   - Deployment 리소스를 watch -> ReplicaSet 생성/관리
		2. ReplicaSet Controller
		   - ReplicaSet을 watch -> Pod 수 유지
		3. DaemonSet Controller
		   - DaemonSet을 watch -> 노드당 Pod 1개 보장
		4. StatefulSet Controller
		   - StatefulSet을 watch -> 순서 보장하며 Pod 관리
		5. CronJob Controller
		   - CronJob을 watch -> 스케줄에 맞춰 Job 생성
		6. ServiceAccount Controller
	  	 - ServiceAccount를 watch -> 토큰 생성/관리

Operator란

설명

- K8s Resource가 아닌 특정 CR을 reconcile하는 전담 Controller

- 정확히는 CRD + Custom Controller(CC) + CR 관리 전체를 하나로 묶은 패키지

- Helm chart나 OLM(Operator Lifecycle Manager)으로 설치하면 한 번에 설치 가능

구조

image.png

[ 핵심 차이 ]
- Contorller Manager와 다른 점은 Controller가 Master Node가 아닌 밖에 있다는 점

- 그 외에 동작은 동일