🚀 요약
SUMMARY
쉘 스크립트 기반 클러스터 구축의 한계를 극복하고 멱등성(Idempotency)과 유지보수 효율성을 확보하기 위해 Ansible을 선정했다. Kubespray와 NVIDIA roles를 활용해 클러스터 관리 자동화를 구현한다.
💡 개요
이 문서는 쿠버네티스(Kubernetes) 클러스터 구축 및 관리를 위한 도구 선정 과정과 그 배경을 설명한다. 과거 쉘 스크립트 기반 자동화의 문제점을 분석하고, 이를 해결하기 위한 새로운 접근 방식으로 Ansible을 채택하게 된 이유를 다룬다.
INFO
안정적인 운영과 효율적인 유지보수를 위해 클러스터링 도구를 신중하게 선정하는 과정은 매우 중요하다.
📋 선정 배경
약 3년 전, 처음 쿠버네티스 클러스터를 구축할 당시에는 kubeadm
기반의 쉘 스크립트(shell script)를 활용하여 OS 설정부터 클러스터링, 애플리케이션 설치까지 전 과정을 자동화했다. 초기 설치는 성공적이었으나, 시간이 지나면서 다음과 같은 문제점들에 직면했다.
- 높은 유지보수 비용: 쉘 스크립트의 복잡성이 증가함에 따라 전체 로직을 파악하기 어려워졌고, 기능 추가나 변경 시 많은 시간과 노력이 필요했다. 이는 장기적인 관점에서 유지보수 비용(maintenance cost)을 크게 증가시키는 요인이 되었다.
- 운영체제(OS) 호환성 문제: 당시에는 특정 RHEL(Red Hat Enterprise Linux) 버전에서만 설치를 진행했기 때문에 큰 문제가 없었지만, 향후 Ubuntu와 같은 다른 OS 환경에 적용해야 할 경우 스크립트의 대대적인 수정이 필요할 것으로 예상했다.
IMPORTANT
이러한 문제들을 해결하고, 멱등성(Idempotency)을 보장하며 쉘 스크립트보다 효율적인 관리 방안을 모색해야 할 필요성을 느꼈다.
📊 비교
쿠버네티스 클러스터 구축에서 쉘 스크립트와 Ansible은 근본적으로 다른 접근 방식을 제공한다. 과거 쉘 스크립트 기반의 자동화는 초기 구축에는 유용했으나, 장기적인 관점에서 다음과 같은 명확한 한계를 보였다.
구분 | 쉘 스크립트 (Shell Script) | Ansible |
---|---|---|
접근 방식 | 절차 지향적(Procedural) | 선언적(Declarative) |
멱등성 | 보장하기 어려움 (수동 처리 필요) | 기본적으로 보장 |
유지보수 | 복잡성 증가 시 어려움, 가독성 저하 | YAML 기반, 모듈화 용이, 가독성 높음 |
오류 처리 | 수동 개입 필요, 재실행 시 부작용 우려 | 자동화된 오류 처리, 안정적인 재실행 |
이식성 | OS 환경 변화에 민감, 낮음 | 다양한 OS 및 환경 지원, 높음 |
재사용성 | 낮음 (특정 환경에 종속) | 높음 (Roles, Collections 활용) |
학습 곡선 | 낮음 (기존 쉘 지식 활용) | 중간 (Ansible 개념 및 YAML 학습 필요) |
-
쉘 스크립트의 한계: 쉘 스크립트는 명령어를 순차적으로 실행하는 절차 지향적(procedural) 방식으로, 로직이 복잡해질수록 가독성이 떨어지고 유지보수가 어려워진다. 특히, 스크립트 실행 중 오류가 발생하면 수동 개입이 필요하거나, 재실행 시 이전 상태를 고려하지 않아 예상치 못한 부작용을 초래할 수 있다.
-
Ansible의 장점: Ansible은 원하는 최종 상태를 정의하면 그 상태에 도달하도록 작업을 수행하는 선언적(declarative) 자동화 도구다. 이는 멱등성(Idempotency)을 보장하여 동일한 플레이북을 여러 번 실행해도 항상 같은 결과를 만든다. YAML 기반의 플레이북은 가독성이 높고, 역할(Roles)과 컬렉션(Collections)을 통해 재사용성을 극대화할 수 있다.
✅ 선정 사유
앞서 언급된 문제점들을 해결하고 더 효율적인 클러스터 관리 환경을 구축하기 위해 Ansible을 핵심 도구로 최종 선정했다.
- 멱등성 보장: Ansible은 플레이북(Playbook)을 여러 번 수행해도 항상 같은 결과를 보장하는 멱등성을 제공한다. 이는 클러스터의 상태를 안정적으로 유지하고, 예상치 못한 오류를 줄이는 데 결정적인 역할을 한다.
NOTE
멱등성은 자동화에서 매우 중요한 개념이다. 예를 들어, 특정 패키지가 설치되어 있는지 확인하고 없다면 설치하는 작업을 여러 번 실행해도, 이미 설치된 상태에서는 추가 작업을 수행하지 않아 시스템의 불필요한 변경을 방지한다.
-
유지보수 효율성 증대: 쉘 스크립트 대비 구조화된 플레이북을 통해 코드의 가독성과 재사용성이 높아져 유지보수 비용을 크게 절감할 수 있다.
-
생태계 활용 (Kubespray, NVIDIA roles): 쿠버네티스 클러스터링을 위한 검증된 Ansible 플레이북인 Kubespray와 GPU 설정을 자동화하는 NVIDIA roles가 이미 존재했다. 이를 기존 플레이북에 통합하여 클러스터 구축 및 관리를 더욱 자동화하고 표준화할 수 있다고 판단했다.
INFO
Kubespray는 프로덕션 레디(production-ready) 쿠버네티스 클러스터를 배포하기 위한 Ansible 기반 도구다. NVIDIA roles는 GPU 드라이버 및 CUDA 툴킷 설치 등 NVIDIA GPU 관련 설정을 자동화하여 AI/ML 워크로드를 위한 환경 구축을 용이하게 한다.