쿠버네티스 스토리지 솔루션 비교

쿠버네티스 스토리지 솔루션 비교

- Ceph, GlusterFS 등 스토리지 솔루션 비교 및 설정
- 키워드: 쿠버네티스 스토리지, Kubernetes Ceph


서론


쿠버네티스(Kubernetes)는 컨테이너화된 애플리케이션의 배포와 관리를 자동화하는 데 매우 유용한 플랫폼입니다. 그러나 데이터의 지속성 문제를 해결하기 위해서는 적절한 스토리지 솔루션이 필요합니다. 다양한 스토리지 솔루션 중 Ceph와 GlusterFS는 높은 가용성과 확장성을 제공하여 많은 사용자가 선호합니다. 이번 포스팅에서는 Ceph와 GlusterFS를 중심으로 주요 스토리지 솔루션을 비교하고, 쿠버네티스에서 이를 설정하는 방법을 초보자도 이해할 수 있도록 자세히 설명합니다.


본론


쿠버네티스 스토리지 개요


스토리지 클래스


스토리지 클래스(Storage Class)는 쿠버네티스에서 스토리지 프로비저닝을 동적으로 관리하는 방법입니다. 이를 통해 관리자는 다양한 스토리지 공급자를 설정하고, 사용자는 스토리지 클래스에 따라 필요한 스토리지를 요청할 수 있습니다.


apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: fast
provisioner: kubernetes.io/gce-pd
parameters:
  type: pd-ssd

위 예제는 GCE 퍼시스턴트 디스크를 사용하는 스토리지 클래스를 정의한 것입니다.


퍼시스턴트 볼륨과 퍼시스턴트 볼륨 클레임


퍼시스턴트 볼륨(Persistent Volume, PV)은 클러스터에서 독립적으로 프로비저닝된 스토리지 리소스입니다. 퍼시스턴트 볼륨 클레임(Persistent Volume Claim, PVC)은 사용자가 PV를 요청하는 방식입니다.


apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mypvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi
  storageClassName: fast

위 예제는 fast 스토리지 클래스를 사용하는 PVC를 정의한 것입니다.


Ceph


Ceph 개요


Ceph는 확장성과 성능이 뛰어난 오픈 소스 분산 스토리지 시스템입니다. 객체, 블록, 파일 스토리지를 모두 지원하며, 자체 복제 기능과 자가 치유 기능을 제공합니다.


Ceph 설치 및 설정


  1. Ceph 설치

Ceph 설치는 Rook을 사용하여 간단하게 수행할 수 있습니다. Rook은 쿠버네티스에서 Ceph 클러스터를 관리하는 오픈 소스 프로젝트입니다.


kubectl apply -f https://raw.githubusercontent.com/rook/rook/master/cluster/examples/kubernetes/ceph/common.yaml
kubectl apply -f https://raw.githubusercontent.com/rook/rook/master/cluster/examples/kubernetes/ceph/operator.yaml

  1. Ceph 클러스터 설정

apiVersion: ceph.rook.io/v1
kind: CephCluster
metadata:
  name: rook-ceph
  namespace: rook-ceph
spec:
  cephVersion:
    image: ceph/ceph:v15.2.4
  dataDirHostPath: /var/lib/rook
  mon:
    count: 3
    allowMultiplePerNode: false
  dashboard:
    enabled: true
  network:
    hostNetwork: false
  storage:
    useAllNodes: true
    useAllDevices: true
    config:
      databaseSizeMB: "1024"
      journalSizeMB: "1024"
      osdsPerDevice: "1"

  1. Ceph 파일 시스템 설정

apiVersion: ceph.rook.io/v1
kind: CephFilesystem
metadata:
  name: myfs
  namespace: rook-ceph
spec:
  metadataPool:
    replicated:
      size: 3
  dataPools:
    - replicated:
        size: 3
  metadataServer:
    activeCount: 1
    activeStandby: true

  1. 스토리지 클래스 설정

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: rook-ceph-block
provisioner: rook-ceph.rbd.csi.ceph.com
parameters:
  clusterID: rook-ceph
  pool: replicapool
  imageFormat: "2"
  imageFeatures: layering
  csi.storage.k8s.io/provisioner-secret-name: rook-ceph-csi
  csi.storage.k8s.io/provisioner-secret-namespace: rook-ceph
  csi.storage.k8s.io/node-stage-secret-name: rook-ceph-csi
  csi.storage.k8s.io/node-stage-secret-namespace: rook-ceph
  fsType: ext4

GlusterFS


GlusterFS 개요


GlusterFS는 확장성과 성능이 뛰어난 오픈 소스 분산 파일 시스템입니다. 서버와 클라이언트 간의 파일 시스템을 네트워크를 통해 공유하며, 높은 가용성과 확장성을 제공합니다.


GlusterFS 설치 및 설정


  1. GlusterFS 설치

GlusterFS 설치는 Heketi를 사용하여 간단하게 수행할 수 있습니다. Heketi는 GlusterFS 볼륨을 관리하는 RESTful 관리 인터페이스를 제공합니다.


kubectl apply -f https://raw.githubusercontent.com/heketi/heketi/master/deploy/kubernetes/heketi-deployment.json

  1. GlusterFS 클러스터 설정

GlusterFS 클러스터를 구성하는 JSON 파일을 작성합니다.


{
  "clusters": [
    {
      "nodes": [
        {
          "node": {
            "hostname": "node1",
            "zone": 1
          },
          "devices": [
            "/dev/sdb"
          ]
        },
        {
          "node": {
            "hostname": "node2",
            "zone": 1
          },
          "devices": [
            "/dev/sdb"
          ]
        }
      ]
    }
  ]
}

  1. 스토리지 클래스 설정

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: gluster-heketi
provisioner: kubernetes.io/glusterfs
parameters:
  resturl: "http://heketi:8080"
  restuser: "admin"
  secretName: "heketi-secret"
  secretNamespace: "default"

Ceph vs GlusterFS 비교


성능


  • Ceph: Ceph는 블록, 파일, 객체 스토리지를 모두 지원하며, 고성능을 제공합니다. 특히 대규모 데이터 처리를 위한 고성능 요구사항을 충족할 수 있습니다.
  • GlusterFS: GlusterFS는 파일 기반 스토리지를 주로 제공하며, 파일 공유와 네트워크 파일 시스템을 필요로 하는 애플리케이션에 적합합니다.

확장성


  • Ceph: Ceph는 매우 높은 확장성을 제공하며, 수천 개의 노드와 페타바이트 규모의 데이터를 처리할 수 있습니다.
  • GlusterFS: GlusterFS도 높은 확장성을 제공하지만, Ceph에 비해 상대적으로 작은 규모에 적합합니다.

관리 용이성


  • Ceph: Ceph는 Rook을 통해 관리가 용이하며, 다양한 자동화 도구와 통합되어 있습니다.
  • GlusterFS: GlusterFS는 Heketi를 통해 관리가 용이하며, 설정과 운영이 상대적으로 간단합니다.

가용성 및 복구


  • Ceph: Ceph는 자가 치유 기능과 데이터 복제 기능을 제공하여 높은 가용성과 데이터 복구 기능을 제공합니다.
  • GlusterFS: GlusterFS는 데이터 복제와 자가 치유 기능을 제공하지만, Ceph에 비해 기능이 제한적일 수 있습니다.

Ceph와 GlusterFS 설정 사례


Ceph 설정 사례


  1. 스토리지 클래스 생성

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: ceph-rbd
provisioner: rook-ceph.rbd.csi.ceph.com
parameters:
  clusterID: rook-ceph
  pool: replicapool
  imageFormat: "2"
  imageFeatures: layering
  csi.storage.k8s.io/provisioner-secret-name: rook-csi-rbd-provisioner
  csi.storage.k8s.io/provisioner-secret-namespace: rook-ceph
  csi.storage.k8s.io/node-stage-secret-name: rook-csi-rbd-node
  csi.storage.k8s.io/node-stage-secret-namespace: rook-ceph
  fsType: ext4

  1. PVC 생성

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: ceph-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi
  storageClassName: ceph-rbd

  1. 파드에 PVC 마운트

apiVersion: v1
kind: Pod
metadata:
  name: ceph-test-pod
spec:
  containers:
  - name: ceph-test-container
    image: busybox
    command: [ "sleep", "1000000" ]
    volumeMounts:
    - mountPath: "/mnt/ceph"
      name: ceph-volume
  volumes:
  - name: ceph-volume
    persistentVolumeClaim:
      claimName: ceph-pvc

GlusterFS 설정 사례


  1. 스토리지 클래스 생성

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: glusterfs
provisioner: kubernetes.io/glusterfs
parameters:
  resturl: "http://heketi:8080"
  restuser: "admin"
  secretName: "heketi-secret"
  secretNamespace: "default"

  1. PVC 생성

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: glusterfs-pvc
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 10Gi
  storageClassName: glusterfs

  1. 파드에 PVC 마운트

apiVersion: v1
kind: Pod
metadata:
  name: glusterfs-test-pod
spec:
  containers:
  - name: glusterfs-test-container
    image: busybox
    command: [ "sleep", "1000000" ]
    volumeMounts:
    - mountPath: "/mnt/glusterfs"
      name: glusterfs-volume
  volumes:
  - name: glusterfs-volume
    persistentVolumeClaim:
      claimName: glusterfs-pvc

결론


쿠버네티스에서 스토리지 솔루션을 선택하고 설정하는 것은 애플리케이션의 성능과 안정성에 중요한 영향을 미칩니다. Ceph와 GlusterFS는 높은 가용성과 확장성을 제공하는 대표적인 스토리지 솔루션입니다. 이번 포스팅에서는 Ceph와 GlusterFS의 개요, 설치 및 설정 방법, 그리고 각 솔루션의 장단점을 비교했습니다. 이를 통해 자신에게 적합한 스토리지 솔루션을 선택하고, 쿠버네티스 클러스터에서 효율적으로 사용할 수 있기를 바랍니다.

다음 이전