1. OpenStack Magnum 소개
OpenStack Magnum은 Kubernetes-as-a-Service(K8s-aaS) 를 제공하는 OpenStack의 핵심 프로젝트입니다. 사용자는 복잡한 인프라 설정 없이 OpenStack API 호출만으로 즉시 사용 가능한 쿠버네티스 클러스터를 생성할 수 있습니다. 기존의 Magnum은 Heat 기반 오케스트레이션 방식을 통해 쿠버네티스 클러스터를 제공하고 있었습니다. 그러나 후에 소개할 Heat 기반 드라이버의 한계 때문에 쿠버네티스 생태계의 표준인 Cluster API 기반 아키텍처로 전환하고 있습니다.
2. Heat 기반 드라이버
기존 Magnum은 OpenStack의 오케스트레이션 서비스인 Heat를 사용해 VM, 네트워크, 스토리지 등의 인프라 리소스를 템플릿 기반으로 프로비저닝했습니다. 초기에는 효과적인 방식이었으나, 클라우드 네이티브 환경이 고도화되면서 다음과 같은 한계가 있었습니다.
- 업그레이드 및 복구의 복잡성
노드 업그레이드, 자가 치유(Self-healing), 오토스케일링과 같은 핵심 로직을 Magnum 드라이버 내부에서 직접 구현해야 했습니다. 이로 인해 드라이버 코드가 복잡해지고, 쿠버네티스 버전 업그레이드 시 유지보수 비용이 급격히 증가했습니다.
- 호스트 OS 변경 대응의 어려움
드라이버가 Fedora CoreOS와 같은 특정 호스트 운영체제에 강하게 종속되어 있었습니다. 이로 인해 OS의 변경 사항을 추적하고 드라이버에 적시에 반영하는 것이 매우 어려웠으며, 사용자가 원하는 다양한 OS를 지원하는 데에도 제약이 따랐습니다.
이러한 이유로 OpenStack Magnum 20.0.0 릴리스부터 기존 Heat 드라이버는 공식적으로 Deprecated 되었습니다. 현재 Heat 기반 클러스터 생성은 여전히 가능하지만, 점차 CAPI 드라이버로 대체되고 있습니다.
3. Cluster API (CAPI)
Cluster API (CAPI) 는 쿠버네티스 클러스터의 생성, 구성, 관리를 자동화하기 위한 선언적(declarative) API를 제공하는 쿠버네티스의 공식 하위 프로젝트입니다. CAPI의 핵심 목표는 쿠버네티스를 사용하여 쿠버네티스를 관리하는 것입니다.
3.1. 핵심 개념
- 관리 클러스터 (Management Cluster): 다른 쿠버네티스 클러스터의 생명주기를 관리하는 특별한 목적의 쿠버네티스 클러스터입니다. 워크로드 클러스터의 의도된 상태(desired state) 를 정의하고, 실제 상태(actual state)가 이를 만족하도록 지속적으로 조정하는 역할을 수행합니다.
- 워크로드 클러스터 (Workload Cluster): 실제 사용자 애플리케이션이 배포되고 실행되는 최종 목적지 클러스터입니다. 관리 클러스터에 의해 생성, 업그레이드, 삭제 등 전체 생명주기가 관리됩니다.
3.2. 선언적 상태 관리와 자가 치유
CAPI의 가장 중요한 특징은 선언적 API를 통한 지속적인 상태 관리입니다. 사용자가 "워커 노드 3개"라는 상태를 선언하면, CAPI 컨트롤러는 지속적으로 실제 상태를 모니터링합니다. 만약 노드 1개가 장애로 중단되면, 컨트롤러가 자동으로 불일치를 감지하고 손실된 노드를 재프로비저닝함으로써 선언된 상태를 복원합니다.
4. Magnum + CAPI 아키텍처
4.1. 전체 프로세스 흐름

사용자가 OpenStack CLI를 통해 쿠버네티스 클러스터 생성을 요청했을 때부터 최종 워크로드 클러스터가 생성되기까지의 전체 프로세스는 다음과 같습니다.
- 사용자는 openstack coe cluster create 명령을 통해 OpenStack API에 클러스터 생성을 요청합니다.
- Magnum API가 요청을 수신하여 Magnum Driver를 호출합니다. 드라이버는 Magnum API 객체를 CAPI 네이티브 객체로 변환하는 역할을 수행합니다.
- 드라이버는 변환된 CRD 매니페스트를 관리 클러스터(Management Cluster) 의 쿠버네티스 API 서버에 제출합니다.
- 관리 클러스터 내에서 실행 중인 CAPI Core 컨트롤러가 새로 생성된 Cluster, Machine 등의 범용 CRD를 감지합니다.
- CAPO(Cluster API Provider for OpenStack) 컨트롤러가 OpenStackCluster, OpenStackMachine 같은 OpenStack 특화 CRD를 처리하여 실제 OpenStack API(Nova, Neutron, Octavia 등)를 호출하고 가상 머신, 네트워크, 로드밸런서와 같은 인프라 리소스를 생성합니다.
- 인프라 리소스가 생성되면, 각 가상 머신(VM)은 Kubeadm을 통해 쿠버네티스 노드로 부트스트랩되어 워크로드 클러스터(Workload Cluster)를 구성합니다.
- 모든 프로비저닝 과정이 성공적으로 완료되면, Magnum은 클러스터의 상태를 CREATE_COMPLETE로 업데이트하고 사용자에게 결과를 반환합니다.
4.2. 핵심 구성 요소
Magnum API
사용자 요청의 진입점으로, OpenStack CLI/API를 통해 클러스터 생성, 삭제, 업데이트 요청을 수신합니다. 인증/인가를 처리하고 적절한 드라이버로 요청을 라우팅합니다.
Magnum Driver (magnum-cluster-api or magnum-capi-helm)
Magnum API와 CAPI 사이의 변환 계층입니다. 두 가지 주요 구현체가 있습니다.
- magnum-cluster-api: Python 코드를 사용하여 직접 CAPI 리소스를 생성/관리합니다. 코드 수준에서 세밀한 제어가 가능하지만, 복잡한 클러스터 구성에서는 코드 관리가 어려울 수 있습니다.
- magnum-capi-helm: Helm 차트를 사용하여 CAPI 리소스를 템플릿화하고 관리합니다. 선언적 방식으로 클러스터를 정의하며, 재사용 가능한 템플릿을 통해 유지보수가 용이합니다. 복잡한 구성도 YAML 기반으로 명확하게 표현할 수 있습니다.
CAPI (Cluster API)
관리 클러스터에서 실행되는 핵심 오케스트레이션 엔진입니다. Cluster, Machine, MachineDeployment 등의 CRD를 통해 워크로드 클러스터의 생명주기를 관리합니다.
CAPO (Cluster API Provider for OpenStack)
CAPI의 선언적 명령을 실제 OpenStack API 호출로 변환하는 핵심 구현체입니다. 관리 클러스터에서 실행되는 capo-controller-manager는 OpenStackCluster, OpenStackMachine 같은 CRD의 상태를 지속적으로 감시하고, OpenStack 인프라가 정의된 상태와 일치하도록 조정합니다.
5. 참고
OpenStack Magnum 공식 문서
magnum-cluster-api
magnum-capi-helm
Cluster API
Cluster API OpenStack Provider
- https://github.com/kubernetes-sigs/cluster-api-provider-openstack
- https://github.com/k-orc/openstack-resource-controller
기타 구현 및 이해에 도움이 된 문서들