[Kubernetes] 커스텀 리소스와 컨트롤러

연수·2021년 12월 10일
0

kubernetes

목록 보기
14/15

🥊 쿠버네티스 컨트롤러의 개념과 동작 방식

  • 명령형(Imperative): docker run처럼 특정 명령을 처리하는 주체와 통신해 그 작업을 수행하고 그 결괏값을 돌려 받는 방식
  • 선언형(Declarative): 쿠버네티스처럼 최종적으로 도달해야 하는 바람직한 상태(Desired State)를 직접 정의한 뒤, 현재 상태가 바람직한 상태와 다를 경우 이를 일치하도록 만드는 방법 → 최종적으로 완성되어야 하는 상태가 되기 위해 어떠한 동작을 취할지는 쿠버네티스에서 컨트롤러라고 불리는 개체가 내부적으로 결정한다.
  • 컨트롤러 매니저: 쿠버네티스 전체 구성의 복잡성을 줄이기 위해 컨트롤러 조직을 컨트롤러 매니저라는 하나의 컴포넌트에서 구현
  • 컨트롤러: 쿠버네티스 리소스의 상태 변화를 감지하고 적절한 작업을 수행

 

🍮 커스텀 리소스

  • 직접 정의해 사용할 수 있는 사용자 정의 리소스
  • 디플로이먼트, 서비스 등의 오브젝트의 묶음을 커스텀 리소스로 추상화함으로써 쿠버네티스 리소스를 묶어 놓은 패키지처럼 사용할 수도 있고, 쿠버네티스와 전혀 상관이 없는 로직을 커스텀 리소스와 연동할 수도 있다.
  • 사용 단계
    1. 현재 상태를 커스텀 리소스에 대한 desired state로 변화시킬 수 있는 컨트롤러를 구현하고, 컨트롤러를 실행한다.
    2. 커스텀 리소스의 상세 정보를 정의하는 CRD(Custom Resource Definition) 리소스를 생성한다.
    3. CRD에 정의된 데이터에 맞춰 커스텀 리소스를 생성한다.
    4. 1번에서 실행한 컨트롤러는 커스텀 리소스의 생성을 감지하고, 커스텀 리소스가 원하는 desired state가 되도록 적절한 작업을 수행한다.

 

🔮 커스텀 리소스를 정의하기 위한 CRD

  • 커스텀 리소스는 customerresourcedefinition이라는 오브젝트를 통해 정의할 수 있다. (crd)
  • 커스텀 리소스를 어떻게 사용할 것인지 쿠버네티스에 등록하는 선언적인 리소스이며, crd 자체가 커스텀 리소스를 의미하는 것은 아니다.

 

🎮 커스텀 리소스와 컨트롤러

  • 커스텀 리소스를 생성했을 때 특정 동작을 수행하도록 정의하는 컨트롤러를 별도로 구현해야만 커스텀 리소스가 비로소 의미를 갖게 된다.
  • 즉, 커스텀 리소스가 어떠한 목적을 위해 생성되는지 비즈니스 로직으로 구현해 놓은 별도의 컨트롤러가 필요하다.
  • 비즈니스 로직은 커스텀 리소스가 원하는 desired state를 계속해서 유지하도록 만드는 소스코드로 구현된다.
  • reconcile: 현재 상태가 desired state가 되도록 특정 동작을 수행하는 것
  • operator 패턴: 일련의 동작을 통해 crd를 사용할 수 있도록 컨트롤러를 구현하는 방법

 

[출처] 시작하세요! 도커/쿠버네티스 (용찬호 지음)

profile
DCDI

0개의 댓글