1. 개요
쿠버네티스 클러스터에 영구 스토리지를 주려고 NFS와 Longhorn을 구성했다. 이들이 쓸 스토리지는 여러 하드디스크를 LVM(Logical Volume Manager)으로 묶어서 마련했다. 디스크를 그냥 쓰면 나중에 용량을 늘리기가 곤란한데, LVM으로 묶어두면 운영 중에도 디스크를 붙이거나 뺄 수 있어서다.
NOTE
LVM은 여러 물리 디스크를 하나의 논리 볼륨으로 관리한다. 확장·관리가 편하고, 무엇보다 운영 중에 디스크를 추가·제거할 수 있어 유연하다.
초기 구성부터 운영 중 디스크 추가·제거·장애 대응까지 실제로 밟은 순서대로 정리했다.
2. 환경
- OS: Rocky Linux 9
- 용도: 쿠버네티스 클러스터 스토리지 (NFS, Longhorn)
- 파일 시스템: ext4
3. 초기 LVM 구성
3-1. LVM 도구 설치
먼저 LVM을 관리하기 위한 도구를 설치한다.
dnf install lvm23-2. 물리 볼륨 생성
스토리지로 사용할 디스크들을 물리 볼륨으로 초기화한다.
pvcreate /dev/sda /dev/sdb여러 디스크를 한 번에 물리 볼륨으로 생성하는 명령어다.
3-3. 볼륨 그룹 생성
물리 볼륨들을 하나의 볼륨 그룹으로 묶는다.
vgcreate vg_k8s_pv /dev/sda /dev/sdbvg_k8s_pv라는 이름의 볼륨 그룹을 생성하고, 앞서 만든 물리 볼륨들을 추가한다.
3-4. 논리 볼륨 생성
볼륨 그룹의 전체 공간을 사용하여 논리 볼륨을 생성한다.
lvcreate --extents 100%FREE --name lv_k8s_pv vg_k8s_pv--extents 100%FREE 옵션으로 볼륨 그룹의 모든 가용 공간을 사용한다.
3-5. 논리 볼륨 확인
생성된 논리 볼륨의 상태를 확인한다.
lvdisplay3-6. 파일 시스템 생성 및 마운트
논리 볼륨에 ext4 파일 시스템을 생성하고 마운트한다.
mkfs.ext4 /dev/vg_k8s_pv/lv_k8s_pv마운트 포인트를 만들고 재부팅 후에도 자동으로 붙도록 /etc/fstab에 등록한다.
mkdir -p /data/longhorn
chown aift:aift /data/longhorn
# fstab에 마운트 정보를 추가해 재부팅 시 자동 마운트되도록 한다
echo '/dev/vg_k8s_pv/lv_k8s_pv /data/longhorn ext4 defaults 0 0' | sudo tee -a /etc/fstab
# fstab이 바뀌었으니 systemd가 새 mount unit을 인식하도록 리로드
systemctl daemon-reload
mount /data/longhorn이렇게 해두면 재부팅해도 /data/longhorn이 알아서 올라온다.
4. 운영 중 디스크 추가
운영 중에 스토리지 용량이 부족해지면 새로운 디스크를 추가할 수 있다. LVM의 큰 장점 중 하나는 서비스 중단 없이 스토리지를 확장할 수 있다는 것이다.
4-1. 새 디스크 물리 볼륨 생성
새로 추가된 디스크를 물리 볼륨으로 초기화한다.
pvcreate /dev/sdX/dev/sdX는 새로 추가된 디스크의 장치명이다.
4-2. 볼륨 그룹에 추가
기존 볼륨 그룹에 새 물리 볼륨을 추가한다.
vgextend vg_k8s_pv /dev/sdX4-3. 논리 볼륨 크기 확장
새로 추가된 공간만큼 논리 볼륨을 확장한다.
lvextend -l +100%FREE /dev/vg_k8s_pv/lv_k8s_pv-l +100%FREE 옵션으로 새로 추가된 모든 공간을 사용한다.
4-4. 파일 시스템 크기 확장
논리 볼륨이 확장되었지만 파일 시스템은 여전히 기존 크기를 유지하므로, 파일 시스템도 확장해야 한다.
resize2fs /dev/vg_k8s_pv/lv_k8s_pv이 명령어는 온라인 상태에서 실행되므로 서비스 중단 없이 확장할 수 있다.
5. 운영 중 디스크 제거
디스크 교체나 용량 축소가 필요할 때는 기존 디스크를 제거할 수 있다. 단, 제거하려는 디스크에 저장된 데이터를 다른 디스크로 이동해야 한다.
IMPORTANT
디스크 제거 작업은 데이터 손실 위험이 있으므로 반드시 백업을 수행한 후 진행해야 한다.
5-1. 데이터 이동
제거할 디스크의 데이터를 다른 물리 볼륨으로 이동한다.
pvmove /dev/sdX이 명령어는 /dev/sdX에 있는 모든 데이터를 볼륨 그룹 내의 다른 물리 볼륨으로 이동한다. 데이터 양에 따라 시간이 오래 걸릴 수 있다.
5-2. 볼륨 그룹에서 제거
데이터 이동이 완료되면 볼륨 그룹에서 해당 물리 볼륨을 제거한다.
vgreduce vg_k8s_pv /dev/sdX5-3. 물리 볼륨 초기화
마지막으로 물리 볼륨을 초기화하여 LVM 메타데이터를 제거한다.
pvremove /dev/sdX이제 해당 디스크를 안전하게 시스템에서 제거할 수 있다.
6. 디스크 장애 대응
운영 중 디스크 장애가 발생하면 빠른 대응이 필요하다. LVM 환경에서는 장애 디스크를 격리하고 새 디스크로 교체할 수 있다.
6-1. 디스크 상태 확인
장애가 의심되는 디스크의 상태를 확인한다.
sudo lsblk
sudo pvs
sudo vgs
sudo lvs시스템 로그와 디스크 상태를 확인하여 장애 여부를 판단한다.
dmesg | grep sdX
smartctl -a /dev/sdXdmesg는 커널 메시지를 확인하여 하드웨어 오류를 찾고, smartctl은 디스크의 S.M.A.R.T 정보를 통해 하드웨어 상태를 확인한다.
6-2. 장애 디스크 데이터 복구
장애 디스크가 완전히 실패하지 않았다면 데이터를 다른 디스크로 이동한다.
pvmove /dev/sdX만약 디스크가 완전히 실패하여 접근이 불가능하다면, 다음 단계로 진행한다.
6-3. 장애 디스크 제거
볼륨 그룹에서 장애가 발생한 물리 볼륨을 강제로 제거한다.
vgreduce --removemissing vg_k8s_pv--removemissing 옵션은 접근할 수 없는 물리 볼륨을 강제로 제거한다.
6-4. 새 디스크 교체 및 복구
새 디스크를 설치하고 물리 볼륨으로 초기화한다.
sudo pvcreate /dev/sdc볼륨 그룹에 새 디스크를 추가한다.
sudo vgextend vg_k8s_pv /dev/sdcNOTE
디스크 장애로 인한 데이터 손실이 발생했다면 파일 시스템 복구나 LVM 메타데이터 복구가 필요할 수 있다.
필요시 파일 시스템을 검사하고 복구한다.
sudo fsck /dev/vg_k8s_pv/lv_k8s_pvLVM 메타데이터가 손상되었다면 백업에서 복구한다.
sudo vgcfgrestore vg_k8s_pv --file /etc/lvm/backup/vg_k8s_pv7. 마무리
LVM으로 클러스터 스토리지를 묶으니, 서비스를 안 멈추고도 디스크를 늘리고 줄이고 갈아끼울 수 있었다. 스토리지는 한 번 정하면 오래 끌고 가는 자원이라, 이 유연성이 생각보다 자주 도움이 됐다.
IMPORTANT
결국 제일 중요한 건 백업이다. LVM 설정을 건드리기 전에는 데이터 백업은 물론이고
/etc/lvm/backup/의 메타데이터 백업도 꼭 챙겨두자. (한 번 날려보면 안다.)