Cloud SA's This and That

[NCP] Kubernetes - NAS 사용하기 (NFS Client Provisioner를 통한 Persistent Volume 동적 프로비저닝) 본문

Naver-Cloud/Containers

[NCP] Kubernetes - NAS 사용하기 (NFS Client Provisioner를 통한 Persistent Volume 동적 프로비저닝)

뽀삐누냐 2023. 8. 23. 14:16
SMALL

파드에서 실행 중인 애플리케이션이 디스크에 데이터를 유지해야 하고 파드가 다른 노드로 재스케줄링된 경우 동일한 데이터를 사용해야 한다면 이전에 언급한 볼륨 유형  emptyDir이나 hostPath 등은 사용할  없다.(참 : https://jyyoon94.tistory.com/16) 

그렇다면 해당 데이터들은 NAS 유형에 저장되어야 하는데 테스트  PersistentVolume과 PersistentVolumeClaim에 대해 간단히 알아보도록 한다.

 

PersistentVolume(PV) & PersistentVolumeClaim(PVC)

퍼시스턴트 볼륨은 파드 개발자가 실제 네트워크 스토리지 인프라에 관한 지식을 갖추고 있어야 한다.(NFS 기반의 볼륨을 생성하려면 개발자는 NFS 익스포트가 위치하는 실제 서버를 알아야 ) 

인프라스트럭처의 세부사항을 처리하지 않고 애플리케이션이 쿠버네티스 클러스터에 스토리지를 요청할  있도록하는 것이 바로 퍼시스턴트 볼륨(PV) 퍼시스턴트볼륨클레임(PVC)이다.

 

  1. 클러스터 관리자는 네트워크 스토리지 유형을 설정한다.(NFS 익스포트나 그와 유사한)
  2. 관리자는 쿠버네티스 API PV 디스크립터를 게시해 퍼시스턴트볼륨(PV) 생성한다.
  3. 사용자는 퍼시스턴트볼륨클레임(PVC) 생성한다.
  4. 쿠버네티스는 적정한 크기와 접근 모드의 PV 찾고 PVC PV 바인딩한다.
  5. 사용자는 PVC 참조하는 볼륨을 가진 포드를 생성한다.

 

  • 개발자가 파드에 세부사항을 기재한 볼륨을 추가하는 대신 관리자가 기반 스토리지를 설정하고 쿠버네티스 API 서버로 퍼시스턴트볼륨 리소스를 생성하여 쿠버네티스에 등록한다퍼시스턴트 볼륨이 생성되면 관리자는 크기과 지원 가능한 접근 모드를 지정한다.
  • 클러스터 사용자는 먼저 최소 크기와 필요한 접근모드를 명시한 퍼시스턴트볼륨클레임 매니페스트를 쿠버네티스 API 서버에 게시하고 쿠버네티스는 적절한 퍼시스턴트볼륨을 찾아 클레임에 볼륨을 바인딩한다.
  • 퍼시스턴트볼륨클레임은 파드 내부의 볼륨  하나로 사용될  있다. 퍼시스턴트볼륨클레임의 바인딩을 삭제해 릴리스될 때까지 다른 사용자는 동일한 퍼시스턴트볼륨을 사용할  없다.

 

 

참고 : 쿠버네티스 인 액션

============================================================================================

 

Kubernetes - NAS 서비스 사용하기 (NFS Client Provisioner 통한 Persistent Volume 동적 프로비저닝)

(NFS Client Provisioner 설치 : https://guide.ncloud-docs.com/docs/k8s-k8suse-nfs)

 

쿠버네티스에서 PVC 연결할 PV 별도로 생성하는 대신 NFS Client Provisioner 통해 PVC 자동으로 생성된 PV 바인딩 되도록 설정한다.(Persistent Volume 동적 프로비저닝)

Helm CLI 통해 NCP의 NAS 생성된 볼륨 연동이 가능하다.(프로비저너가 프로비저닝하는 실제 스토리지를 NCP NAS 설정)

 

<사전 구성>

- Kubernetes Cluster(수동구성 - master & worker1,2)

- Container Registry(Container image)

- NAS

 

[NAS 생성] - https://guide.ncloud-docs.com/docs/nas-start-vpc

생성한 NAS 마운트 정보를 확인한다. Provisioner 설치  사용해야 한다.

 

 

[Helm 설치] - https://helm.sh/docs/intro/install/ - 사용 중인 운영체제에 알맞는 방법으로 설치

 

 > 공 Helm chart repository CLI 추가한다.

$ helm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner/

 

> NFS Client Provisioner 설

$ helm install --kubeconfig=$KUBE_CONFIG  nfs-subdir-external-provisioner nfs-subdir-external-provisioner/nfs-subdir-external-provisioner \
--set nfs.server=__NAS_IP__ \
--set nfs.path=__NAS_PATH__ \
--set storageClass.defaultClass=true

 

> StorageClass 리소스는 PV StorageClass 요청할  어떤 Provisioner PV 프로비저닝하는  사용돼야 할지를지정한다.

> PVC 생성시 StorageClass 따로 지정하지 않는 경우 기본(default) StorageClass PV 동적 프로비저닝하는  사용된다.

 

 

*만약 설치  해당 에러(cannot re-use a name that is still in use) 뜬다면 helm list 삭  다시 설치해보도록 한다.

 

 

[PVC]

 > 해당 메니페스트로 생성된 PVC ACCESS MODES CAPACITY 확인해보면 RWX 500Gi 확인할  있을 것이다.(크기  접근모드 지정 가능)

 > 사용할 StorageClass 지정할  있으며 해당 메니페스트에서는 따로 지정하지 않았기에 default 지정된 nfs-client가 사용될 것이다.(존재하지 않는 StorageClass 참조하면 PV 프로비저닝은 실패한다)

 

 

*만약 쿠버네티스의 모든 노드에 NFS 마운트를 지원하기 위한 헬퍼프로그램이 없다면 해당 오류가 발생할  있다. (클러스터 내에서 PV 사용하려면 볼륨 유형과 관련된 헬퍼프로그램이 필요하다)

모든 노드에 설치 - $ apt install nfs-common (Ubuntu 기) / $ yum install nfs-utils (CentOs 기준)

 

 

<동적 프로비저닝된 PV 생성된 PVC 검사>

 

> Volume : 클레임에 바인딩된 PV 표시한다.

 

> ACCESS MODES :  RWX(ReadWriteMany - 다 노드가 읽기/쓰기용으로 볼륨을 마운트 가능) / RWO(ReadWriteOnly - 단일 노드만이 읽기/쓰기용으로 볼륨 마운트 가능) / ROX(ReadOnlyMany - 다 노드가 읽기용으로 볼륨 마운트 가능)

 

> STORAGECLASS : nfs-client

 

> STATUS : Bound (바인딩 되지 않았을 경우 Available 표시된다) / Release (클레임이 삭제되었지만 클러스터에서 아직 리소스를 반환하지 않은 경우) / Failed (볼륨이 자동 반환에 실패함)

 

> CLAIM : default/nas-pvc-test (바인딩 되어있는 PVC Namespace / PVC Name)

 

> RECLAIM POLICY : Delete (PVC 삭제되면 PV 삭제됨) / Retain (PVC 삭제되면 PV 기존 데이터는 유지하지만 Release 상태가 ) / Recycle (볼륨의 콘텐츠를 삭제하고 볼륨이 다시 클레임될  있도록 사용 가능하게 ) - 리클레임 정책은 변경할  있다.

 

> PV 특정 네임스페이스에 속하지 않으며 노드와 같은 클러스터 수준 리소스이다. (StorageClass 리소스도 네임스페이스에 속하지 않는다)

 

[Pod]

 > PVC 위에서 생성한 nas-pvc-test 컨테이너를 가진 파드 2 생성

 > 컨테이너 이미지는 NCP의 Container Registry에서 가져오도록  (참 : https://jyyoon94.tistory.com/2 )

 

 > 생성된 드 2개가 각자 다른 워커노드에서 생성된  확인(yjy-worker001, yjy-worker002)

 

 > 파드 app1 접속  /var/www/html/index.html 텍스트 생성

 

 > 파드 app2 접속  /var/www/html/index.html 텍스트 확인

 > 정상적으로  파드가 NAS 사용하고 있는  확인됨

 

 > 추가로 PVC 동일한 파드 하나를  생성

 

 > 해당 파드 접속  동일한 데이터 확인 가능

LIST