본문 바로가기

Cloud/Kubernetes

[CKA - 5] 스토리지 관리

CKA 시험에서는 스토리지 관리 영역이 중요하게 다뤄진다. Kubernetes 클러스터는 다양한 방식으로 데이터를 저장하고 관리할 수 있으며, 특히 Pod의 일시적인 성격 때문에 지속적인 스토리지가 필요하다. 이번 포스팅에서는 기본적인 Volume부터 PersistentVolume, StorageClass, 그리고 CSI까지 다룬다.


1. Volume 기본 개념

Kubernetes의 Volume은 Pod가 재시작되더라도 데이터를 유지할 수 있도록 한다. 다만, Volume은 Pod의 생명주기와 함께 사라지는 경우가 많으므로 종류를 구분해야 한다.

예시: emptyDir

apiVersion: v1
kind: Pod
metadata:
  name: pod-emptydir
spec:
  containers:
  - name: app
    image: nginx
    volumeMounts:
    - name: cache-volume
      mountPath: /cache
  volumes:
  - name: cache-volume
    emptyDir: {}
  • emptyDir: Pod가 삭제되면 데이터도 삭제된다.
  • 임시 저장소 용도로 활용한다.

2. hostPath

호스트 노드의 파일시스템을 Pod에 마운트할 수 있다. 하지만 보안상의 이유로 실무에서는 잘 사용하지 않는다.

apiVersion: v1
kind: Pod
metadata:
  name: pod-hostpath
spec:
  containers:
  - name: app
    image: nginx
    volumeMounts:
    - mountPath: /data
      name: host-data
  volumes:
  - name: host-data
    hostPath:
      path: /var/data

3. ConfigMap & Secret

애플리케이션 설정값과 민감 정보를 관리할 때 사용한다.

ConfigMap 예시

apiVersion: v1
kind: ConfigMap
metadata:
  name: app-config
data:
  APP_ENV: "production"
  APP_PORT: "8080"

Secret 예시 (base64 인코딩 필요)

apiVersion: v1
kind: Secret
metadata:
  name: app-secret
type: Opaque
data:
  DB_PASSWORD: cGFzc3dvcmQ=   # "password"를 base64로 인코딩

4. PersistentVolume (PV) & PersistentVolumeClaim (PVC)

PersistentVolume은 클러스터 관리자가 생성하는 스토리지 자원이며,
PersistentVolumeClaim은 사용자가 이를 요청하는 방식이다.

PV 예시

apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv-example
spec:
  capacity:
    storage: 1Gi
  accessModes:
  - ReadWriteOnce
  hostPath:
    path: /mnt/data

PVC 예시

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pvc-example
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 500Mi

PVC를 Pod에서 사용하는 방법:

apiVersion: v1
kind: Pod
metadata:
  name: pod-pvc
spec:
  containers:
  - name: app
    image: nginx
    volumeMounts:
    - name: storage
      mountPath: /app/data
  volumes:
  - name: storage
    persistentVolumeClaim:
      claimName: pvc-example

5. StorageClass

스토리지 동적 프로비저닝을 가능하게 한다. 관리자가 직접 PV를 만들 필요 없이 PVC 생성 시 자동으로 PV가 생성된다.

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: standard
provisioner: kubernetes.io/aws-ebs
parameters:
  type: gp2

PVC에서 StorageClass 지정:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pvc-dynamic
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi
  storageClassName: standard

6. CSI (Container Storage Interface)

CSI는 Kubernetes가 다양한 외부 스토리지를 사용할 수 있도록 하는 표준 인터페이스이다.
AWS EBS, GCP PD, Ceph, Longhorn 등 다양한 CSI 드라이버를 활용할 수 있다.

예: AWS EBS CSI 드라이버 설치

kubectl apply -k "github.com/kubernetes-sigs/aws-ebs-csi-driver/deploy/kubernetes/overlays/stable/ecr/?ref=release-1.20"

마무리

이번 시간에는 Kubernetes에서 스토리지 관리를 위해 꼭 알아야 할 개념들을 살펴보았다.

  • Volume 종류 (emptyDir, hostPath 등)
  • ConfigMap, Secret
  • PV & PVC
  • StorageClass
  • CSI

CKA 시험에서는 주어진 시나리오에 따라 PVC를 생성하고 Pod에 마운트하거나, StorageClass를 활용한 동적 프로비저닝을 요구하는 문제가 자주 출제된다. 따라서 실제로 여러 번 실습해보는 것이 중요하다.