Proxmox 환경에서 K3s 클러스터를 제대로 운영하려면 생각보다 손이 많이 가는 사전 작업들이 필요합니다. Cloud-init 기반의 리눅스 이미지를 준비하고, VM을 생성한 뒤, 마스터와 워커 노드를 하나하나 연결하는 과정은 단일 노드일 때는 괜찮지만, 노드가 늘어나거나 클러스터 재구축이라는 귀찮은 작업이 반복 됩니다.
클러스터 구축에 들어가는 단순 반복적인 리소스 소모를 줄이고, 본질적인 기술 학습에 더 몰입할 수 있는 환경을 만들기 위해 자동화 스크립트를 완성했습니다.
전체 프로세스는 크게 두 단계로 나누어 설계했습니다.
- VM 프로비저닝 자동화: Proxmox에서 제공하는 CLI 명령어를 활용해 리눅스 이미지 생성부터 VM 할당 및 삭제까지 처리하는 Shell Script를 작성했습니다.
- 구성 관리 자동화(Ansible): 생성된 OS 위에 K3s를 설치하고 노드 간 클러스터 결합, 그리고 데이터 저장을 위한 NFS 클라이언트를 설정하는 과정입니다. 노드 수가 많아질수록 반복되는 이 작업은 Ansible을 통해 선언적으로 관리하도록 구성했습니다.
이번 글에서는 Proxmox의 VM 생성 자동화 과정과, Ansible을 이용해 각 노드에 K3s 및 NFS 환경을 한 번에 배포하는 대략적인 방법을 공유해보려 합니다.
▫️VM 프로비저닝 자동화 과정

9대의 VM을 일일이 수동으로 생성하는 번거로움을 해결하기 위해, 다음과 같은 4단계 자동화 파이프라인을 구축했습니다.
1. 관리용 SSH Key 동기화
- 목적: Ansible 컨트롤러가 모든 VM에 별도 인증 없이 접속하여 명령을 수행하기 위함입니다.
- 내용: 모든 PVE 노드와 생성될 VM들이 동일한 공개키를 공유하게 하여 중앙 집중형 관리 환경을 조성합니다.
2. Cloud-init 기반 베이스 이미지 준비
- 목적: 모든 노드에 동일한 OS 환경과 설정(DNS, 사용자 등)을 보장하여 환경 차이(Environment Drift) 문제를 사전에 방지합니다.
- 내용: 규격화된 리눅스 이미지를 사용함으로써 추후 K3s나 NFS 클라이언트 설치 시 발생할 수 있는 잠재적 오류를 차단합니다.
3. 골든 템플릿(Golden Template) 생성
- 목적: VM 배포 속도를 극대화하고 표준화된 원형을 유지하기 위함입니다.
- 내용: 베이스 이미지를 Proxmox 템플릿으로 변환해둡니다. 신규 VM 생성 시 매번 OS를 설치하는 대신, 이 템플릿을 복제(Clone)하여 수 초 내에 배포를 완료합니다.
4. VM 일괄 프로비저닝
- 목적: 클러스터 설계에 맞춘 리소스를 자동 할당하고 인벤토리를 관리하기 위함입니다.
- 내용: 미리 정의된 규격에 따라 9개의 VM에 각각 고유한 이름과 고정 IP를 할당하며 인프라 구성을 마무리합니다.
▫️Ansible 기반 소프트웨어 설정 자동화
가상머신(VM) 생성이 완료되면, Ansible을 통해 9대의 서버를 하나의 쿠버네티스 클러스터로 응집시키고 스토리지 환경을 구성합니다.
1. K3s 클러스터 배포 및 오케스트레이션
- 목적: 수동 명령 없이 9개의 노드를 하나의 가용성 높은 클러스터로 통합하기 위함입니다.
- 방법: * 첫 번째 마스터 노드에서 K3s Server를 초기화하고, 보안 통신을 위한 클러스터 토큰을 자동으로 추출합니다.
- 결과: 복잡한 오케스트레이션 설정 과정이 자동화되어, 실행 한 번으로 전체 클러스터가 즉시 동작 가능한 상태가 됩니다.
2. 데이터 연속성을 위한 NFS 클라이언트 구성
- 목적: Pod가 어느 노드에 배포되더라도 동일한 데이터에 접근할 수 있는 공유 저장소 환경을 구축하기 위함입니다.
- 방법:
- 결과: 클러스터를 재구축하거나 특정 노드에 장애가 발생해도 데이터가 유실되지 않는 영구 볼륨(Persistent Volume) 기반을 확보했습니다.