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.go를main.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을 참고하세요.