ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • storage class in Kubernetes backed by Synology NFS
    IT 2021. 8. 14. 16:37
    반응형

    기존에 Kubernetes Persistant Storage로 Ceph를 사용하였다. 하지만 Homelab 환경이 Synology + Workstation으로 구성되어 있고 Ceph이 실행되고 있는 스토리지가 Synology이므로 이는 필연적으로 오버헤드가 발생 할 수 밖에 없다. 그리고 테스트를 하다보면 K8S를 새로 배포하는 일이 빈번한데 이때마다 Ceph를 계속 배포하는건 매우 번거로운 작업이므로 Layer를 하나 제거하여 좀 더 편리한 Homelab 환경을 구축해보고자 한다.

     

    Synology NAS 환경 설정

    Synology에서 NAS 설정을 해주어야 한다. NAS 설정 작업은 구글 검색을 해보면 매우 많은 내용들이 있으므로 여기에서 따로 정리하지 않도록 하겠다. 세부적인 설정 방법은 Reference 1, 2번을 확인하면 된다.

     

    nfs-client-privisioner Repo 추가

    helm을 이용하여 nfs-client-privisioner repository를 추가하도록 하자.

    [root@k8smaster1 ~]# /usr/local/bin/helm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner/
    "nfs-subdir-external-provisioner" has been added to your repositories
    [root@k8smaster1 ~]# /usr/local/bin/helm repo list
    NAME                           	URL
    nfs-subdir-external-provisioner	https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner/
    [root@k8smaster1 ~]#

     

    nfs-client-privisioner repo 설치

    helm을 이용하여 nfs-client-privisioner repository를 설치한다. 설치할때 synology IP와 Path가 필요하다.

    • nfs.server(Synology IP) : 192.168.11.6
    • nfs.path(Synology Path) : /volume1/homelab/kubernetes-storageclass
    [root@k8smaster1 ~]# /usr/local/bin/helm install nfs-subdir-external-provisioner nfs-subdir-external-provisioner/nfs-subdir-external-provisioner \
        --set nfs.server=192.168.11.4 \
        --set nfs.path=/volume1/homelab/kubernetes-storageclass
    NAME: nfs-subdir-external-provisioner
    LAST DEPLOYED: Sat Aug 14 16:29:54 2021
    NAMESPACE: kube-system
    STATUS: deployed
    REVISION: 1
    TEST SUITE: None
    [root@k8smaster1 ~]# /usr/local/bin/helm list
    NAME                           	NAMESPACE  	REVISION	UPDATED                                	STATUS  	CHART                                 	APP VERSION
    cilium                         	kube-system	1       	2021-08-10 23:24:37.371173597 +0900 KST	deployed	cilium-1.8.6                          	1.8.6
    nfs-subdir-external-provisioner	kube-system	1       	2021-08-14 16:29:54.879880795 +0900 KST	deployed	nfs-subdir-external-provisioner-4.0.13	4.0.2
    [root@k8smaster1 ~]#

     

    nfs-client를 default로 설정

    추가한 storage class를 기본으로 사용하기 위해서는 추가한 storage class를 기본으로 설정해주어야 한다. storage class는 멀티로 default로 설정되므로 반드시 사전에 default로 설정된 storage class가 있는지 확인 후 default stroage class로 설정한다.

    [root@k8smaster1 ~]# kubectl get storageclass
    NAME         PROVISIONER                                     RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
    nfs-client   cluster.local/nfs-subdir-external-provisioner   Delete          Immediate           true                   2m26s
    [root@k8smaster1 ~]# kubectl patch storageclass nfs-client \
        -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
    storageclass.storage.k8s.io/nfs-client patched
    [root@k8smaster1 ~]# kubectl get storageclass
    NAME                   PROVISIONER                                     RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
    nfs-client (default)   cluster.local/nfs-subdir-external-provisioner   Delete          Immediate           true                   4m42s
    [root@k8smaster1 ~]#

     

    Known Issues

    - kubernetes.io~nfs/nfs-subdir-external-provisioner-root: bad option; for several filesystems (e.g. nfs, cifs) you might need a /sbin/mount.<type> helper program.

      오류와 함께 pod가 제대로 생성되지 않을 수 있다. 이때는 모든 node에 nfs-utils을 설치해주도록 하자.

     

    Referencies

    https://benyoung.blog/persistent-storage-class-in-kubernetes-backed-by-synology-nfs/

     

    Persistent storage class in Kubernetes backed by Synology NFS

    Now that we have a cluster up and running (see part 1 [https://benyoung.blog/setting-up-a-kubernetes-cluster-with-k3s-and-k3os-via-cloud-init/] ) I wanted to add a storage class for  workloads to dynamically request and provision storage as required. I ha

    benyoung.blog

    https://tuananh.net/2020/05/01/using-synology-nfs-as-external-storage-with-k8s/

    반응형
Designed by Tistory.