Cloud Controller Manager 개발하기

Cloud Controller Manager 개발하기 (Developing Cloud Controller Manager)

기능 상태: Kubernetes v1.11부터 Beta.

cloud-controller-manager는 클라우드 특정 제어 로직을 내장한 쿠버네티스 컨트롤 플레인 컴포넌트예요. cloud controller manager를 사용하면 클러스터를 클라우드 제공업체의 API에 연결할 수 있고, 그 클라우드 플랫폼과 상호작용하는 컴포넌트를 클러스터와만 상호작용하는 컴포넌트와 분리할 수 있어요.

쿠버네티스와 기반 클라우드 인프라스트럭처 사이의 상호운용성 로직을 분리함으로써, cloud-controller-manager 컴포넌트는 클라우드 제공업체가 메인 쿠버네티스 프로젝트와 다른 속도로 기능을 릴리스할 수 있게 해줘요.

출처: 문서

본문

배경 (Background)

클라우드 제공업체가 쿠버네티스 프로젝트와 다른 속도로 개발하고 릴리스하기 때문에, 제공업체 특정 코드를 cloud-controller-manager 바이너리로 추상화하면 클라우드 공급업체가 코어 쿠버네티스 코드와 독립적으로 발전할 수 있어요.

쿠버네티스 프로젝트는 Go 인터페이스를 갖춘 스켈레톤 cloud-controller-manager 코드를 제공해 당신(또는 클라우드 제공업체)이 자체 구현을 연결(plug in)할 수 있게 해줘요. 즉, 클라우드 제공업체는 쿠버네티스 코어에서 패키지를 임포트해 cloud-controller-manager를 구현할 수 있어요. 각 cloudprovider는 cloudprovider.RegisterCloudProvider를 호출해 사용 가능한 클라우드 제공업체의 전역 변수를 업데이트함으로써 자체 코드를 등록해요.

개발하기 (Developing)

트리 외부 (Out of tree)

클라우드용 out-of-tree cloud-controller-manager를 빌드하려면:

  • cloudprovider.Interface를 충족하는 구현이 있는 go 패키지를 만들어요.
  • 쿠버네티스 코어의 cloud-controller-manager에 있는 main.gomain.go의 템플릿으로 사용해요. 위에서 언급했듯이 유일한 차이는 임포트할 클라우드 패키지여야 해요.
  • main.go에서 클라우드 패키지를 임포트하고, 패키지에 cloudprovider.RegisterCloudProvider를 실행하는 init 블록이 있는지 확인하세요.

많은 클라우드 제공업체가 자신의 controller manager 코드를 오픈 소스로 공개해요. 처음부터 새 cloud-controller-manager를 만든다면 기존 out-of-tree cloud controller manager를 출발점으로 삼을 수 있어요.

트리 내부 (In tree)

in-tree 클라우드 제공업체의 경우 in-tree cloud controller manager를 클러스터에서 DaemonSet으로 실행할 수 있어요. 자세한 내용은 Cloud Controller Manager Administration을 참고하세요.

더 알아보기 (Learn more)