본문으로 건너뛰기

NFS Client Provisioner 설정

클러스터에서 영구 볼륨을 사용하기 위해 일반적으로 스토리지와 PersistentVolume 객체를 직접 구성해야 합니다. Kubernetes Engine에서는 NFS Client Provisioner를 사용하여 카카오클라우드 File storage를 영구 볼륨으로 사용할 수 있습니다. 클러스터에 NFS Client Provisioner를 설치하면, 간단하게 PersistentVolumeClaim를 생성하여 영구 볼륨을 생성할 수 있습니다.
NFS Client Provisioner를 설정하는 방법은 다음과 같습니다.

Step 1. 사전 작업하기

NFS Client Provisioner를 설정하기 위해서는 다음의 사전 작업이 필요합니다. 본 사전 작업은 클러스터당 한 번만 진행합니다.

kubectl 제어 설정

배포를 진행하기 전, 클러스터에 대한 kubectl 제어를 설정합니다.

안내

kubectl 제어 설정이 되어 있지 않은 경우, kubectl 제어 설정을 참고하여 kubectl을 설정하시기 바랍니다.

File Storage 생성

Kubernetes Engine 클러스터에 대한 File Storage를 생성합니다.

  1. 카카오클라우드 콘솔 > Beyond Storage Service > File Storage 메뉴로 이동합니다.

  2. 인스턴스 메뉴에서 [인스턴스 생성] 버튼을 클릭합니다.

    • 인스턴스 생성 시 파일 스토리지의 VPC는 NFS를 적용하려는 클러스터의 VPC와 동일하게 설정해야 합니다.
    • Kubernetes Engine 클러스터의 노드에서 접근 가능하도록 접근 제어 설정설정된 VPC 내 모든 프라이빗 IP에서의 접근을 허용합니다.로 설정하여 생성합니다.

    이미지. 콘솔 File storage 인스턴스 만들기 File Storage 인스턴스 만들기

  3. 파일 스토리지 생성 후, NFS Client Provisioner 설치를 위해 인스턴스 상세 페이지에서 마운트 정보VPC 정보를 확인합니다. 위해 인스턴스 상세 페이지에서 마운트 정보네트워크 정보를 확인합니다.

    이미지. 콘솔 File storage 상세 페이지 콘솔 File storage 상세 페이지

Step 2. NFS Client Provisioner 설정하기

앞서 생성한 파일 스토리지를 PVC(PersistentVolumeClaim)를 통해 동적으로 영구 볼륨으로 사용하기 위해 Client Provisioner를 설치합니다. YAML 파일 또는 Helm을 사용하여 NFS Client Provisioner를 설치합니다.

YAML 파일로 NFS Client Provisioner 배포

  1. 다음의 명령어를 터미널에 입력하여 NFS Client Provisioner를 설치합니다.

    배포 진행 명령어
    kubectl --kubeconfig=$KUBE_CONFIG apply -f https://raw.githubusercontent.com/kakaoicloud-guide/kubernetes-engine/main/guide-samples/NFSclientprovisioner/nfs-subdir-external-provisioner.yml
  2. Deployment를 설정하는 아래의 YAML 파일을 로컬에 다운로드한 후, 스토리지의 상세 페이지에서 NFS Client Provisioner 설치 명령어의 File Storage IPFile Storage Mount Path 값에 해당하는 정보를 spec > template > spec > containers > env와, spec > template > spec > volumes에 입력하여 파일을 저장합니다.

    Deployment 설정 YAML 명세 확인
    # Source: nfs-subdir-external-provisioner/templates/deployment.yaml
    apiVersion: apps/v1
    kind: Deployment
    metadata:
    name: nfs-subdir-external-provisioner
    labels:
    chart: nfs-subdir-external-provisioner-4.0.18
    heritage: Helm
    app: nfs-subdir-external-provisioner
    release: nfs-subdir-external-provisioner
    spec:
    replicas: 1
    strategy:
    type: Recreate
    selector:
    matchLabels:
    app: nfs-subdir-external-provisioner
    release: nfs-subdir-external-provisioner
    template:
    metadata:
    annotations:
    labels:
    app: nfs-subdir-external-provisioner
    release: nfs-subdir-external-provisioner
    spec:
    serviceAccountName: nfs-subdir-external-provisioner
    securityContext:
    {}
    containers:
    - name: nfs-subdir-external-provisioner
    image: "registry.k8s.io/sig-storage/nfs-subdir-external-provisioner:v4.0.2"
    imagePullPolicy: IfNotPresent
    securityContext:
    {}
    volumeMounts:
    - name: nfs-subdir-external-provisioner-root
    mountPath: /persistentvolumes
    env:
    - name: PROVISIONER_NAME
    value: cluster.local/nfs-subdir-external-provisioner
    - name: NFS_SERVER
    value: [File Storage IP]
    - name: NFS_PATH
    value: [File Storage Mount Path]
    volumes:
    - name: nfs-subdir-external-provisioner-root
    nfs:
    server: [File Storage IP]
    path: [File Storage Mount Path]
  3. 이전 단계에서 입력한 스토리지의 File Storage IPFile Storage Mount Path 정보가 저장된 YAML 파일을 실행하기 위해 다음의 명령어를 실행합니다.

    • YAML 파일 적용 시, 로컬에 저장한 실제 YAML 파일명으로 적용해야 합니다.

      kubectl --kubeconfig=$KUBE_CONFIG apply -f {YAML 파일명}.yaml

Helm으로 NFS Client Provisioner 배포

쿠버네티스 패키지 관리 도구인 Helm을 사용하여 NFS Client Provisioner를 설치합니다.

  1. NFS Client Provisioner 설치하기 전, Helm client를 설치합니다.

  2. 다음의 명령어를 실행하여 공식 Helm chart repository를 먼저 추가합니다.

    공식 Helm chart repository 추가 명령어
    helm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner/
  3. 스토리지의 상세 페이지에서 NFS Client Provisioner 설치 명령어의 File Storage IPFile Storage Mount Path 값에 해당하는 정보를 입력한 후 명령어를 실행합니다.

    NFS Client Provisioner 설치 명령어
    helm install --kubeconfig=$KUBE_CONFIG nfs-subdir-external-provisioner nfs-subdir-external-provisioner/nfs-subdir-external-provisioner --set nfs.server=[File Storage IP] --set nfs.path=[File Storage Mount Path]
    항목설명
    File Storage IP파일 스토리지의 ‘네트워크’
    File Storage Mount Path파일 스토리지의 ‘마운트 정보’

Step 3. StorageClass 확인 및 자동 프로비저닝 테스트하기

StorageClass 확인

NFS Client Provisioner를 설치한 후, StorageClass를 확인하기 위해 다음의 명령어를 실행합니다.

StorageClass 확인 명령어
kubectl --kubeconfig=$KUBE_CONFIG get sc
실행 결과
NAME         PROVISIONER                                     RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
nfs-client cluster.local/nfs-subdir-external-provisioner Delete Immediate true 12m

PersistentVolumeClaim 생성 및 자동 프로비저닝 테스트

PVC(PersistentVolumeClaim)를 생성하여 자동 프로비저닝 테스트를 진행합니다. PVC를 사용하기 위해 파드를 배포하면서 PVC를 함께 선언하고, 해당 PVC를 사용하도록 설정하면, 파일 스토리지 볼륨 및 PV(PersistentVolume) 객체를 동적으로 생성합니다.

안내

PVC 사용에 대한 자세한 설명은 Kubernetes 공식 문서를 참고하시기 바랍니다.

PVC 생성 예제 파일
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: test-claim
spec:
storageClassName: nfs-client
accessModes:
- ReadWriteMany
resources:
requests:
storage: 1Mi

Step 4. File Storage 할당하기

NFS Client Provisioner 설치를 완료한 후, 영구 볼륨으로 사용할 파일 스토리지를 확인합니다. 다음의 명령어를 실행하여 PVC(PersistentVolumeClaim)과 PV(PersistentVolume)을 확인합니다.

PVC와 PV 확인 명령어
kubectl --kubeconfig=$KUBE_CONFIG get pvc // PVC 확인
kubectl --kubeconfig=$KUBE_CONFIG get pv // PV 확인
실행 결과
NAME         STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
test-claim Bound pvc-4724b46a-557d-46f9-97a9-dc94225c2d49 1Mi RWX nfs-client 13h

NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
pvc-4724b46a-557d-46f9-97a9-dc94225c2d49 1Mi RWX Delete Bound default/test-claim nfs-client 13h