본문 바로가기

카테고리 없음

커스텀 리소스와 컨트롤러

반응형

 

명령형
특정 명령을 처리하는 주체와 통신해 그 작업을 수행하고 그 결괏값을 돌려받는 방식을 쿠버에서는 명령형이라 한다.
$kubectl create -f [파일].yaml

선언형
최종적으로 도달해야 하는 바람직한 상태를 정의한 뒤, 현재 상태가 바람직한 상태와 다를 경우 이를 일치하도록 만드는 방법. 여기에선 이 yaml 파일이 원하는 최종 상태다. 최종 완성되어야 하는 상태가 되기 위해 어떠한 동작을 취할지는 쿠버에서 컨트롤러라고 불리는 개체가 내부적으로 결정한다.
$kubectl apply -f [파일].yaml

create의 명령은 그 명령을 곧대로 바로 실행하기 때문에, 같은 파드가 올라와있을 경우 create은 중복 오류가 뜬다.
그러나 apply는 바람직한 상태가 아니면 파드를 띄우고 이미 파드가 올라온 경우 파드를 띄우지 않기 때문에 apply를 몇번 실행하든 오류가 발생하지 않는다.

이 바람직한 상태 또한 etcd에 저장돼 있으며 컨트롤러는 쿠버네티스 API서버의 watch api를 통해 etcd에 저장된 상태 데이터를 받아와 동작을 수행한다.

 

이론적으로 쿠버의 컨트롤러는 모두 개별적으로 존재할 수도 있으나, 쿠버에서는 전체 구성의 복잡성을 줄이기 위해 컨트롤러 로직을 쿠버네티스 컨트롤러 매니저라는 하나의 컴포넌트에서 구현해놓았다.

 

 

커스텀 리소스: 직접 정의해 사용할 수 있는 사용자 정의 리소스
1. 현재 상태를 커스텀 리소승 대한 바람직한 상태로 변화시킬 수 있는 컨트롤러를 구현하고, 이를 실행한다.
2. 커스텀 리소스의 상세 정보를 정의하는 CRD 리소스를 생성한다.
3. CRD에 정의된 데이터에 맞춰 커스텀 리소스를 생성한다.
4. 1번에서 실행한 컨트롤러는 커스텀 리소스의 생성을 감지하고 커스텀 리소스가 원하는 바람직한 상태가 되도록 적절한 작업을 수행한다.

 

리소스 그 자체는 etcd에 저장된 단순한 데이터 일 뿐 실제로 동작하는 포드/서비스가 아니다.
커스텀 리소스 생성 시, 특정 동작을 ㅜㅅ행하도록 정의하는 컨트롤러르 별도로 궇ㄴ해야만 커스텀 리소스가 비로소 의미를 갖는다.

현재 상태가 바람직한 상태가 되도록 특정 동작을 수행하는 것을 쿠버에서는 Reconcile이라 부른다.

 

 

 

 

반응형