생성형 AI(LLM)나 데이터 분석, 머신러닝 워크로드의 급증에 따라 GPU를 비롯한 컴퓨팅 리소스 확보와 효율적인 운영이 기업의 큰 과제가 되고 있습니다.
본 기사에서는 최근 주목받고 있는 컴포저블 Kubernetes 개념을 다음 세 가지 관점에서 기술적으로 알기 쉽게 설명합니다.
Kubernetes의 장점 ※ -
**LIQID CDI (Composable Disaggregated Infrastructure)**의 장점 - 두 가지를 결합한
컴포저블 Kubernetes가 제공하는 진정한 가치
※참고 자료: Kubernetes 공식 문서를 기반으로 주요 장점을 발췌 및 재구성했습니다.
Kubernetes는 컨테이너화된 애플리케이션의 배포(Deployment), 스케일링, 운영 관리를 자동화하는 오픈소스 컨테이너 오케스트레이션 플랫폼입니다.
선언적 구성과 셀프 힐링(Self-healing)
애플리케이션이 '있어야 할 상태'를 YAML 등으로 선언적으로 정의함으로써, Pod 생성, 스케줄링, 장애 발생 시 자동 재시작 및 재배치(셀프 힐링)가 자동으로 실행됩니다.
높은 포터빌리티와 개발 운영 효율화
온프레미스부터 멀티 클라우드 환경, 개발 환경에서 프로덕션 환경까지, 하위 물리 인프라 구성을 의식할 필요 없이 동일한 구성 정보로 애플리케이션을 원활하게 운영할 수 있습니다.
유연한 오토 스케일링(Auto Scaling)
CPU/메모리 등의 리소스 사용량에 따라 Pod 수를 동적으로 증감시키는 수평 Pod 자동 스케일링(HPA: Horizontal Pod Autoscaler) 등을 활용하여, 수요 변화에 대응하는 유연한 리소스 최적화를 실현합니다.
LIQID CDI (Composable Disaggregated Infrastructure)는 서버에서 GPU, 스토리지, NIC 등의 각 PCIe 장치를 개별 풀로 구성하고, 이를 PCIe 연결된 확장 섀시에 집약하며, 고속 PCIe 패브릭을 통해 소프트웨어적으로 동적 연결(Compose)/분리(Disaggregate)하는 기술입니다.
물리 하드웨어의 동적 연결(Compose)과 분리(Disaggregate)
PCIe Gen5의 고속 패브릭을 거쳐, 필요할 때 필요한 수량의 GPU나 NVMe 스토리지를 특정 워커 노드(서버)에 즉시 연결하여 베어메탈 수준으로 구성을 할 수 있습니다.
사일로화 해소 및 리소스 이용률 극대화
'노드 A에는 GPU가 남았는데, 노드 B에서는 부족하다'와 같은 기존의 물리적 제약을 해소합니다. 작업 완료 후 GPU를 프리 풀(Free Pool)에 반환(Disaggregate)하여, 다른 작업을 실행하는 다른 노드에 재할당(Compose)이 가능합니다.
LIQID Matrix 소프트웨어를 통한 구성 변경
서버 케이스를 열어 PCIe 카드를 다시 꽂거나 케이블을 물리적으로 연결할 필요 없이, WebUI나 REST API 조작만으로 각 노드의 GPU 개수나 시스템 구성을 즉시 변경할 수 있습니다.
기존의 Kubernetes는 '노드에 고정 배치된 정적인 물리 리소스'를 대상으로 Pod를 스케줄링합니다. 따라서 컨테이너가 사용할 수 있는 리소스의 상한선은 배치가 이루어지는 노드의 물리 사양에 제약을 받았습니다.
반면, LIQID CDI를 적용하면 '노드에 존재하는 물리 리소스 그 자체'를 동적으로 변경할 수 있게 됩니다. 여기에 두 가지를 연계하는 컨트롤 레이어인 'LIQID Kubernetes Composer'를 도입함으로써 실현되는 것이 컴포저블 Kubernetes입니다. 이를 통해 애플리케이션 계층의 요구와 물리 인프라 계층의 자동화가 융합되어, 리소스의 극단적인 유효 활용이 가능해집니다.
【컴포저블 Kubernetes 동작 플로우】
[Pod 배포 (GPU 요청)] ──> [k8s: Pending 상태]
│
...
일반적인 Kubernetes에서는 GPU를 요청하는 Pod를 배포했을 때, 사용 가능한 GPU 노드가 존재하지 않으면 해당 Pod는 Pending 상태로 정지합니다.
컴포저블 Kubernetes에서는 nvidia.com/gpu: 2나 nodeSelector 등을 지정하여 Pod를 투입하면, LIQID Composer가 Pending 상태를 감지하고 프리 풀에서 필요한 GPU를 대상 노드로 컴포즈(Compose)합니다. 처리 완료 후 일정 시간 유휴 상태가 지속되면, GPU는 해제되어 풀로 돌아갑니다.
“각 워커 노드에 GPU를 4개씩 고정 탑재하는” 기존 접근 방식에서는, 야간이나 저부하 시점에 대량의 GPU가 유휴화됩니다.
Composable Kubernetes를 사용하면, 필요 최소한의 GPU 풀을 여러 워커 노드 간에 동적으로 공유 및 할당할 수 있어, 높은 가동률과 비용 최적화(ROI 향상)를 높은 차원에서 동시에 달성합니다.
물리적인 GPU 단위의 탈착에 그치지 않고, NVIDIA GPU Operator와 연계된 “MIG(공간 분할)”, “MPS(프로세스 다중화)”, “Time-Slicing(시간 분할)”과 같은 세밀한 리소스 공유 기술 역시 Kubernetes 매니페스트(YAML)를 통해 일원적으로 제어 및 운영할 수 있습니다.
Composable Kubernetes 환경을 구축할 때는, 컨트롤 플레인과 워커 노드에서 각각 역할이 다릅니다.
컨트롤 플레인에는 클러스터 전체를 모니터링하는 컨트롤러 Pod로서 LIQID Kubernetes Composer를 배포합니다. Helm을 통해 매니페스트를 적용함으로써, Kubernetes가 적절한 노드에 Composer Pod를 자동으로 스케줄링하여 구동시킵니다.
작업 디렉터리에서 설정 파일을 작성합니다. Liqid Director의 IP 주소, 인증 정보, 타임아웃 값 등을 정의합니다.
image:
repository: liqid/composer
tag: 0.1.1
...
참고: 실제 환경에 맞춘 내용이 필요합니다.
공식 Helm 차트를 가져와서 작성한 설정 파일을 적용하여 배포합니다.
# 1. Helm 차트의 가져오기
helm fetch https://liqid-composer-URL
# 2. 리소스 영속화용 디렉터리 생성(HostPath를 이용하는 경우)
...
워커 노드 측에서는, 컨트롤 플레인으로부터의 지시를 받을 수 있도록 사전에 다음 설정을 완료해야 합니다.
- Kubernetes 컴포넌트 설치(
kubelet,
kube-proxy
등) - NVIDIA 드라이버, 플러그인 및 NVIDIA GPU Operator 설치
- LIQID CDI Stack 설정
- 워커 노드 설정: 하드웨어 배선 및 NVIDIA 드라이버 등의 기본 환경을 준비합니다.
- 클러스터 구축: 컨트롤 플레인 측에서 클러스터를 초기화하고, 워커 노드를 조인(참가)시킵니다.
- LIQID Composer 적용: 컨트롤 플레인 측에서 Helm으로
liqid-composer
를 배포합니다.
이 단계를 거치면, Kubernetes 클러스터와 LIQID CDI가 긴밀하게 연동하여 GPU를 자동으로 탈착하는 “Composable Kubernetes” 환경이 완성됩니다.
| 계층 | 기술 | 역할 |
|---|
| 애플리케이션 계층 | Kubernetes | 컨테이너의 라이프사이클 관리 및 자동 스케일링 |
| 하드웨어 계층 | LIQID CDI | PCIe 패브릭을 통한 물리 리소스의 동적 분할/결합 |
| 통합 오케스트레이션 | Kubernetes Composer | Pod의 수요에 따라 하드웨어 구성을 자동 추종 |
Composable Kubernetes는 AI/ML 시대의 “컴퓨팅 리소스 부족”과 “하드웨어 운영 비용(CAPEX/OPEX) 고가화”라는 두 가지 큰 과제를 동시에 해결하는, 매우 강력하고 실용적인 인프라 아키텍처입니다.