ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [k8s] 동적 볼륨 프로비저닝
    클라우드/kubernetes 2021. 3. 30. 23:32
    728x90

    동적 볼륨 프로비저닝

    관리자가 스토리지 기능 및 분류 정보를 담고 있는 스토리지 클래스(StorageClass) 리소스만 정의해 놓고 개발자가 PVC를 요청하면 스토리지 클래스 리소스에 의해 PV가 자동으로 프로비저닝되어 사용할 수 있도록 동적 프로비저닝 기능을 제공한다.

     

    1. 스토리지 클래스

    쿠버네티스의 스토리지 클래스 리소스는 스토리지의 클래스(분류, 정책, 종류)에 대한 정보를 정의할 수 있는 리소스다. 쿠버네티스는 자체적으로 클래스에 무엇을 정의해야 하는지에 대한 강제성은 없다. 필요한 스토리지의 여러 정보를 정의할 수 있다. 

     

    2. 동적 볼륨을 위한 스토리지 클래스 리소스 확인

    $ kubectl get storageclasses.storage.k8s.io 
    No resources found in default namespace.

     

     

    • 스토리지 클래스 정의

    # rook git download (github.com/rook/rook)

    git clone --single-branch --branch release-1.2 https://github.com/rook/rook.git

     

    # access the directory

    cd ~/rook/cluster/examples/kubernetes/ceph

     

    # rook-ceph deploy

    kubectl create -f common.yaml

    kubectl create -f operator.yaml

     

    # rook-ceph-operator 파드가 running 상태가 될 때 까지 기다림 (4개)

    kubectl -n rook-ceph get pod

    $ kubectl -n rook-ceph get pod
    NAME                                 READY   STATUS    RESTARTS   AGE
    rook-ceph-operator-b676fc78d-xqslm   1/1     Running   0          6m5s
    rook-discover-6cfkt                  1/1     Running   0          5m7s
    rook-discover-6ptb4                  1/1     Running   0          5m7s
    rook-discover-b9tmc                  1/1     Running   0          5m7s

     

    # 단일노드일 경우 cluster-test.yaml 생성

    kubectl create -f cluster-test.yaml

     

    # ceph toolbox pod

    kubectl create -f toolbox.yaml



    # storage class 생성

    kubectl create -f csi/rbd/storageclass-test.yaml

    kubectl get storageclasses.storage.k8s.io

    $ kubectl get storageclasses.storage.k8s.io
    NAME              PROVISIONER                  AGE
    rook-ceph-block   rook-ceph.rbd.csi.ceph.com   13s

     

    # cephfs 생성

    kubectl create -f filesystem-test.yaml

    kubectl -n rook-ceph get pod

    kubectl -n rook-ceph get pod -l app=rook-ceph-mds

    $ kubectl -n rook-ceph get pod -l app=rook-ceph-mds
    No resources found in rook-ceph namespace.

     

    # cephfs 스토리지 클래스 생성

    kubectl create -f csi/cephfs/storageclass.yaml

    kubectl get storageclasses.storage.k8s.io

    $ kubectl get storageclasses.storage.k8s.io
    NAME              PROVISIONER                     AGE
    csi-cephfs        rook-ceph.cephfs.csi.ceph.com   11s
    rook-ceph-block   rook-ceph.rbd.csi.ceph.com      53s
    • csi-cephfs: CephFS 파일시스템
    • rook-ceph-block: Ceph RBD 블록

     

    3. 동적 볼륨을 위한 PVC 리소스 생성

    mynapp-pvc-dynamic.yml
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: mynapp-pvc-dynamic
    spec:
      accessModes:
        - ReadWriteMany
      resources:
        requests:
          storage: 1Gi
      storageClassName: csi-cephfs
    $ kubectl create -f mynapp-pvc-dynamic.yml 
    persistentvolumeclaim/mynapp-pvc-dynamic created
    
    
    # PVC 리소스 확인
    
    $ kubectl get persistentvolumeclaims 
    NAME                 STATUS    VOLUME   CAPACITY   ACCESS MODES   STORAGECLASS   AGE
    mynapp-pvc-dynamic   Pending                                      csi-cephfs     10s
    
    $ kubectl get persistentvolumeclaims 
    NAME                 STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
    mynapp-pvc-dynamic   Bound    pvc-473f7a3c-14f9-4ee6-b5a3-bf927202e8b1   1Gi        RWX            csi-cephfs     25s
    

    PV 프로비저닝에 사용한 스토리지 클래스는 csi-cephfs 이고, 상태는 연결된 상태이다. PVC 리소스는 지정한 스토리지 클래스 리소스에 의해 이미 PV 리소스가 프로비저닝 되었고 연결도 되었다는 것을 예상할 수 있다.

    # PV 리소스 확인
    
    $ kubectl get persistentvolume
    NAME                                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                        STORAGECLASS   REASON   AGE
    pvc-473f7a3c-14f9-4ee6-b5a3-bf927202e8b1   1Gi        RWX            Delete           Bound    default/mynapp-pvc-dynamic   csi-cephfs              3m15s
    

     

    4. 기본 스토리지 클래스

    PVC 리소스 정의시 PV 프로비저닝에 사용할 스토리지 클래스 리소스를 직접 정의할 수도 있지만, 따로 사용할 스토리지 클래스를 지정하지 않더라도 기본으로 적용될 스토리지 클래스를 구성할 수 있다.

    # csi-cephfs 스토리지 클래스를 기본 스토리지 클래스로 설정
    
    $ kubectl patch storageclasses.storage.k8s.io csi-cephfs -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
    
    
    # 스토리지 클래스 리소스의 상세 정보 확인
    
    $ kubectl describe storageclasses.storage.k8s.io csi-cephfs 
    Name:                  csi-cephfs
    IsDefaultClass:        Yes
    Annotations:           storageclass.kubernetes.io/is-default-class=true
    Provisioner:           rook-ceph.cephfs.csi.ceph.com
    Parameters:            clusterID=rook-ceph,csi.storage.k8s.io/controller-expand-secret-name=rook-csi-cephfs-provisioner,csi.storage.k8s.io/controller-expand-secret-namespace=rook-ceph,csi.storage.k8s.io/node-stage-secret-name=rook-csi-cephfs-node,csi.storage.k8s.io/node-stage-secret-namespace=rook-ceph,csi.storage.k8s.io/provisioner-secret-name=rook-csi-cephfs-provisioner,csi.storage.k8s.io/provisioner-secret-namespace=rook-ceph,fsName=myfs,pool=myfs-data0
    AllowVolumeExpansion:  True
    MountOptions:          <none>
    ReclaimPolicy:         Delete
    VolumeBindingMode:     Immediate
    Events:                <none>
    
    
    # 스토리지 클래스 목록 확인
    
    $ kubectl get storageclasses.storage.k8s.io 
    NAME                   PROVISIONER                     AGE
    csi-cephfs (default)   rook-ceph.cephfs.csi.ceph.com   144m
    rook-ceph-block        rook-ceph.rbd.csi.ceph.com      145m
    
    

     스토리지 클래스 이름 옆에 (default) 라는 표시가 지정되어 있다.

    '클라우드 > kubernetes' 카테고리의 다른 글

    [k8s] 인그레스(Ingress) 컨트롤러  (0) 2021.03.30
    [k8s] 워드프레스 구축  (0) 2021.03.16

    댓글

Designed by Tistory.