NFS 기반 Kubernetes 동적 프로비저닝 볼륨 생성

paperdoll0208·2024년 10월 29일
0

k8s

목록 보기
1/2
post-thumbnail

Kubernetes에서 볼륨은 정적 프로비저닝동적 프로비저닝 두 가지 방법으로 생성할 수 있습니다.

정적 프로비저닝은 관리자가 미리 볼륨을 생성해두고, 개발자가 PVC(PersistentVolumeClaim)를 통해 사용할 수 있게 하는 방식입니다.
동적 프로비저닝은 관리자가 StorageClass를 정의하면, 개발자가 PVC를 생성할 때 자동으로 필요한 크기의 볼륨이 생성되는 방식입니다. 이 글에서는 동적 프로비저닝 방식을 사용합니다.

NFS CSI 드라이버 설치

Kubernetes 클러스터에서 NFS를 통해 볼륨을 사용하기 위해 NFS CSI 드라이버를 설치해야 합니다. 아래 명령어로 설치할 수 있습니다.

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

StorageClass 정의

NFS 서버의 IP와 공유 폴더 경로를 지정한 StorageClass 파일을 생성합니다.

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: dev1-sc  # StorageClass 이름으로, PVC 생성 시 참조할 이름입니다.
mountOptions:
  - nfsvers=4.1  # NFS 버전 4.1을 사용하도록 설정합니다.
parameters:
  server: 211.183.3.199  # NFS 서버의 IP 주소 또는 도메인
  share: /root/shared    # NFS 서버의 공유 디렉토리 경로
provisioner: nfs.csi.k8s.io  # NFS CSI 드라이버를 사용하여 동적 프로비저닝을 수행합니다.
reclaimPolicy: Delete        # PVC가 삭제되면, 연결된 PV도 자동으로 삭제됩니다.
volumeBindingMode: Immediate  # PVC 생성 시 즉시 PV에 바인딩됩니다.

위 파일을 적용하여 StorageClass를 생성합니다.

kubectl apply -f nfs-csi.yml

PersistentVolumeClaim(PVC) 생성

StorageClass를 참조하여 특정 크기의 스토리지를 요청하는 PVC를 생성합니다. 이 PVC는 자동으로 NFS 볼륨을 동적으로 프로비저닝합니다.

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: test-pvc  # PVC 이름
spec:
  storageClassName: dev1-sc  # 앞서 생성한 StorageClass 이름을 참조합니다.
  accessModes:
    - ReadWriteOnce          # 읽기 및 쓰기를 한 Pod에서만 허용
  resources:
    requests:
      storage: 1Gi           # 요청하는 스토리지 용량

다음 명령어로 PVC를 생성합니다.

kubectl apply -f dev1-pvc.yml

생성된 PVC는 NFS 서버의 /root/shared 디렉토리에 자동으로 매핑됩니다.

아래와 같이 NFS서버에도 볼륨이름으로 폴더가 생성된 것을 확인 할 수 있습니다

Pod에서 PVC 연결 및 사용

생성된 PVC를 Pod에서 사용하려면, volumeMountsvolumes를 통해 PVC를 Pod에 연결합니다.

apiVersion: v1
kind: Pod
metadata:
  name: myapp
spec:
  containers:
  - name: myapp
    image: nginx
    resources:
      limits:
        memory: "128Mi"
        cpu: "500m"
    ports:
      - containerPort: 80
    volumeMounts:
      - name: myvol
        mountPath: /test       # Pod 내에서 볼륨을 마운트할 경로
  volumes:
    - name: myvol
      persistentVolumeClaim:
        claimName: test-pvc   # 연결할 PVC 이름

위 파일을 적용하여 Pod를 생성합니다.

kubectl apply -f dev1-pod.yml

Pod가 생성되면 /test 경로에 NFS 볼륨이 마운트됩니다.

연결 확인

Pod 내부에서 파일을 생성하여 NFS 서버에 정상적으로 연결되었는지 확인합니다.

kubectl exec myapp -- touch /test/from_dev1.txt

NFS 서버의 /root/shared 경로에 가서 from_dev1.txt 파일이 있는지 확인하면, NFS 볼륨이 성공적으로 마운트되었는지 확인할 수 있습니다.


profile
새로운 도전. 항상 배우고 성장하는것을 즐기는 IT 엔지니어 취준생 입니다!

0개의 댓글