[Storage] Volumes

IMKUNYOUNG·2024년 7월 29일
0

KCNA

목록 보기
28/56

Kubernetes에서의 볼륨 사용에 대해 알아보겠습니다.

Docker에서의 볼륨

Kubernetes와 Docker는 많은 부분에서 유사한 구조를 가지고 있습니다. Docker 컨테이너는 일시적인 성격을 가지며, 짧은 기간 동안만 지속되도록 설계되었습니다. 이는 데이터 처리 후 컨테이너가 종료되면, 컨테이너 내의 데이터도 함께 사라진다는 의미입니다. 따라서 영구적인 데이터 저장이 필요한 경우, Docker에서는 컨테이너에 볼륨을 첨부하여 데이터를 지속시킬 수 있습니다. 컨테이너가 삭제되더라도 볼륨에 저장된 데이터는 그대로 유지됩니다.

Kubernetes에서의 볼륨

Kubernetes에서도 유사한 방식으로 데이터를 지속시킬 수 있습니다. Kubernetes에서 생성된 Pod도 일시적인 성격을 가지며, Pod가 삭제되면 그 안의 데이터도 함께 사라집니다. 이를 방지하기 위해, Pod에 볼륨을 첨부하여 데이터를 영구적으로 저장할 수 있습니다.

볼륨 사용 예제

간단한 볼륨 사용 예제를 통해 이해를 돕겠습니다. 단일 노드 Kubernetes 클러스터를 가정하고, 임의의 숫자를 생성하여 이를 파일에 기록하는 Pod를 생성해 보겠습니다.

  1. 먼저, 호스트의 디렉터리를 사용하여 볼륨을 구성합니다. 예를 들어, 호스트의 /data 경로를 사용하여 볼륨을 생성합니다.
  2. 이 볼륨을 Pod에 마운트하여, 데이터를 /opt 디렉터리에 기록하도록 합니다.
  3. Pod가 생성되어 임의의 숫자를 파일에 기록한 후, Pod가 삭제되더라도 데이터는 호스트의 /data 디렉터리에 남아 있습니다.

다음은 이를 구현한 Kubernetes YAML 파일입니다:

apiVersion: v1
kind: Pod
metadata:
  name: random-number-generator
spec:
  containers:
  - name: number-generator
    image: busybox
    command: ['sh', '-c', 'echo $RANDOM > /opt/number.out && sleep 3600']
    volumeMounts:
    - name: data-volume
      mountPath: /opt
  volumes:
  - name: data-volume
    hostPath:
      path: /data
      type: Directory

이 예제에서는 호스트의 /data 디렉터리를 볼륨으로 사용하고, 이를 컨테이너의 /opt 디렉터리에 마운트하여 데이터를 저장합니다. Pod가 삭제된 후에도 임의의 숫자가 기록된 파일은 호스트의 /data 디렉터리에 남아 있게 됩니다.

멀티 노드 클러스터에서의 볼륨

위의 예제는 단일 노드에서 잘 작동하지만, 멀티 노드 클러스터에서는 권장되지 않습니다. 멀티 노드 환경에서는 모든 노드가 동일한 데이터 디렉터리를 사용해야 하는데, 이는 각 노드가 다른 서버에 위치할 수 있기 때문에 동일하지 않을 수 있습니다. 이 문제를 해결하기 위해, 외부 복제 클러스터 스토리지 솔루션을 사용하는 것이 좋습니다.

Kubernetes는 다양한 스토리지 솔루션을 지원합니다. 예를 들어, NFS, GlusterFS, Flocker, Fiber Channel, CephFS, ScaleIO 등을 사용할 수 있습니다. 또한, 퍼블릭 클라우드 솔루션인 AWS EBS, Azure Disk 또는 File, Google Persistent Disk 등도 지원합니다.

다음은 AWS Elastic Block Store(EBS)를 사용하는 예제입니다:

apiVersion: v1
kind: Pod
metadata:
  name: random-number-generator
spec:
  containers:
  - name: number-generator
    image: busybox
    command: ['sh', '-c', 'echo $RANDOM > /opt/number.out && sleep 3600']
    volumeMounts:
    - name: ebs-volume
      mountPath: /opt
  volumes:
  - name: ebs-volume
    awsElasticBlockStore:
      volumeID: <your-ebs-volume-id>
      fsType: ext4

이 예제에서는 AWS EBS 볼륨을 사용하여 데이터를 저장합니다. awsElasticBlockStore 필드를 사용하여 EBS 볼륨 ID와 파일 시스템 유형을 지정하면, 데이터가 AWS EBS에 저장되므로 데이터의 영구성을 보장할 수 있습니다.

마치며

Kubernetes에서의 볼륨 사용은 애플리케이션 데이터를 영구적으로 저장하는 데 필수적인 기능입니다. 단일 노드 클러스터에서는 호스트 경로 볼륨을 사용할 수 있지만, 멀티 노드 클러스터에서는 외부 스토리지 솔루션을 사용하는 것이 좋습니다. Kubernetes는 다양한 스토리지 옵션을 제공하므로, 애플리케이션의 요구 사항에 맞는 스토리지를 선택하여 사용할 수 있습니다.

0개의 댓글