[CKA] Kubernetes Volume
Kubernetes Volume의 핵심 개념과 구성 방법, 실습 풀이를 정리합니다.
Volumes
당연하지만 Docker의 컨테이너와 k8s의 파드는 동일한 볼륨 특성을 가지며 정리하면 다음과 같습니다.
- Docker의 볼륨
- 컨테이너는 임시적(ephemeral) 특성을 가짐
- 컨테이너 삭제 시 내부 데이터도 함께 삭제
- 데이터 보존을 위해 볼륨을 컨테이너에 연결
- 볼륨에 저장된 데이터는 컨테이너가 삭제되어도 유지됨
- 쿠버네티스의 볼륨
- Pod 역시 임시적 특성을 가짐 (Docker 컨테이너와 유사)
- Pod 삭제 시 처리된 데이터도 함께 삭제
- 데이터 보존을 위해 Pod에 볼륨을 연결
- 볼륨에 저장된 데이터는 Pod가 삭제되어도 유지됨
따라서 정리하면 Docker나 쿠버네티스 모두 워크로드(컨테이너/Pod)는 임시적이지만, 볼륨을 사용하면 데이터를 영구적으로 보존하는 방식입니다.
Volume Storage Options
해당 옵션들을 설명하기 위해 예시 시나리오 설명 하겠습니다.
- 예시 시나리오
- 단일 노드 쿠버네티스 클러스터
- 1-100 사이의 난수를 생성 후 /opt/number.out 파일에 저장하는 파드 생성
- 볼륨 구성
- 파드의 데이터를 보존하기 위한 볼륨 생성
- 예시에서는 hostPath를 사용하여 /data 디렉토리를 직접 지정합니다.
- 볼륨을 컨테이너의 /opt 디렉토리에 마운트
- hostPath 사용시 주의점
- 단일 노드에서는 잘 작동
- 다중 노드 클러스터에서는 권장하지 않음
- 이유: 각 노드의 /data 디렉토리가 서로 독립적이므로 데이터 일관성이 보장되지 않습니다.
hostPath는 Docker의 바인드 마운트와 매우 유사한 개념입니다.
- 호스트의 파일시스템을 직접 사용
- 데이터가 호스트에 영구적으로 저장
- 호스트 경로와 컨테이너 경로를 매핑
- 다양한 볼륨 스토리지 옵션
- 네트워크 스토리지: NFS, GlusterFS, Flocker
- 클라우드 스토리지: AWS EBS, Azure Disk, Google Persistent Disk
- 분산 스토리지: Ceph, ScaleIO
- 예시: AWS EBS 사용시 volumeID와 fsType 지정 필요
아래awsElasticBlockStore소스는 Kubernetes 1.27에서 제거된 과거 인트리 플러그인 예시입니다. 현재 클러스터에서는 AWS EBS CSI 드라이버와 PersistentVolume을 사용해야 합니다.
volumes:
- name: data-volume
awsElasticBlockStore:
volumeID: <volume-id>
fsType: ext4