마구잡

Kubernetes NFS-CSI 배포하기 본문

Kubernetes

Kubernetes NFS-CSI 배포하기

MAGUJOB 2024. 5. 7. 16:28
반응형

개요

쿠버네티스 클러스터를 운영 하다 보면 언젠가 필연적으로 로컬 볼륨을 넘어서 외부 스토리지를 사용할 경우가 생긴다.

그 필요에 따라 openEBS, Rook-Ceph, minIO, NFS-CSI 등 여러 스토리지 클래스를 선택하게 된다.

 

오브젝트 스토리지들은 네트워크와 보조저장장치가 뒷받침 되지 않으면 실사용하기 힘든 단점이 있다. 

그래서 벨레로 같은 특정 조건이 붙지 않으면 사용하기 편한 NFS-CSI를 필자는 자주 사용한다.

 

이 글에서는 배포하기 쉽고 배포 후 볼륨 확인이 직관적인 NFS-CSI를 배포해 본다.

OS Redhat 8.6
클러스터 버전 Kubernetes 1.29

 

https://github.com/kubernetes-csi/csi-driver-nfs

 

GitHub - kubernetes-csi/csi-driver-nfs: This driver allows Kubernetes to access NFS server on Linux node.

This driver allows Kubernetes to access NFS server on Linux node. - kubernetes-csi/csi-driver-nfs

github.com

공식 깃헙

쿠버네티스 스토리지 드라이버 지원 목록

https://kubernetes-csi.github.io/docs/drivers.html

 

Drivers - Kubernetes CSI Developer Documentation

The following are a set of CSI driver which can be used with Kubernetes: NOTE: If you would like your driver to be added to this table, please open a pull request in this repo updating this file. Other Features is allowed to be filled in Raw Block, Snapsho

kubernetes-csi.github.io

드라이버 목록


배포하기

NFS Server 구축

NFS용 패키지 설치

yum install nfs-utils bind bind-chroot bind-utils

Dependencies resolved.
==============================================================================================================================================================================================================
 Package                                           Architecture                                 Version                                                 Repository                                       Size
==============================================================================================================================================================================================================
Installing:
...
Transaction Summary
==============================================================================================================================================================================================================
...
Is this ok [y/N]: Operation aborted.

 

NFS 서버 노출 구성

vim /etc/exports
...
/data/storage  192.168.60.0/24(rw,async,no_root_squash,no_all_squash,no_subtree_check)

 

실제 볼륨이 쌓일 디렉터리 위치: /data/storage

접근 가능한 네트워크 대역 설정: 192.168.60.0

NFS 접근시 옵션들: (rw,async,no_root_squash,no_all_squash,no_subtree_check) 

 

NFS 시작 및 상태확인

systemctl enable --now nfs-server
systemctl status nfs-server

● nfs-server.service - NFS server and services
   Loaded: loaded (/usr/lib/systemd/system/nfs-server.service; enabled; vendor preset: disabled)
  Drop-In: /run/systemd/generator/nfs-server.service.d
           └─order-with-mounts.conf
   Active: active (exited) since Sun 2024-03-31 19:54:54 EDT; 1 months 5 days ago
 Main PID: 1210 (code=exited, status=0/SUCCESS)
    Tasks: 0 (limit: 48670)
   Memory: 0B
   CGroup: /system.slice/nfs-server.service

 

NFS-CSI 배포

공식 가이드를 보고 진행하려면 아래 공식 깃헙을 보고 따라하면 된다.

https://github.com/kubernetes-csi/csi-driver-nfs/blob/master/docs/install-csi-driver-v4.7.0.md

 

csi-driver-nfs/docs/install-csi-driver-v4.7.0.md at master · kubernetes-csi/csi-driver-nfs

This driver allows Kubernetes to access NFS server on Linux node. - kubernetes-csi/csi-driver-nfs

github.com

 

깃 클론 후 배포

git clone https://github.com/kubernetes-csi/csi-driver-nfs.git
cd csi-driver-nfs
./deploy/install-driver.sh v4.7.0 local

 

클러스터 csidrivers.storage.k8s.io 확인

kubectl get csidrivers.storage.k8s.io
NAME             ATTACHREQUIRED   PODINFOONMOUNT   STORAGECAPACITY   TOKENREQUESTS   REQUIRESREPUBLISH   MODES        AGE
nfs.csi.k8s.io   false            false            false             <unset>         false               Persistent   39d

 

스토리지 클래스 배포

vim nfs-csi.yaml

...
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  annotations:
    storageclass.kubernetes.io/is-default-class: "true" # <- Default 스토리즈 클래스 설정
  name: nfs-csi
mountOptions:
- nfsvers=4.1
parameters:
  server: 192.168.60.115 # NFS Server를 구축한 IP or 도메인
  share: /data/storage # NFS Server내 볼륨이 쌓이는 위치
provisioner: nfs.csi.k8s.io
reclaimPolicy: Delete
volumeBindingMode: Immediate
kubectl apply -f nfs-csi.yaml

 

스토리지 클래스 확인

kubectl get sc
NAME                    PROVISIONER      RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
nfs-csi (default)       nfs.csi.k8s.io   Delete          Immediate           false                  32d

 

PVC를 배포하여 동적 프로비저닝 되는지 확인

vim test-pvc.yaml
...
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: test-pvc
spec:
  storageClassName: nfs-csi
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi
kubectl apply -f test.yaml
kubectl get pvc
NAME                               STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   VOLUMEATTRIBUTESCLASS   AGE
test-pvc                           Bound    pvc-b481dc08-0cf9-4ac1-84c3-75792733c36b   1Gi        RWO            nfs-csi        <unset>                 29s

 

PV 동적 프로비저닝 확인

kubectl get pv
NAME                                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                                                 STORAGECLASS   VOLUMEATTRIBUTESCLASS   REASON   AGE
pvc-b481dc08-0cf9-4ac1-84c3-75792733c36b   1Gi        RWO            Delete           Bound    gitlab/test-pvc                                       nfs-csi        <unset>                          33s

 

NFS Server에서 볼륨 확인

cd /data/storage/
ll
...
drwxr-xr-x.  2 root root 4096 May  7 03:21 pvc-b481dc08-0cf9-4ac1-84c3-75792733c36b

 

배포 완료

 

다음엔 openEBS, RookCeph, minIO를 차례대로 포스팅 하겠다.

반응형