-
storage class in Kubernetes backed by Synology NFSIT 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/
https://tuananh.net/2020/05/01/using-synology-nfs-as-external-storage-with-k8s/
반응형'IT' 카테고리의 다른 글
Kubernetes SSO with OIDC and Keycloak (0) 2021.08.20 ROOT CA 생성 및 Self Signed Certificate 만들기 (0) 2021.08.15 PostgreSQL 13 Streaming Replication Installation (0) 2021.06.01 Fedora CoreOS PXE Boot 가이드 (0) 2021.01.30 Home Assistant 설치 (0) 2021.01.17