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를 생성합니다.
-
카카오클라우드 콘솔 > Beyond Storage Service > File Storage 메뉴로 이동합니다.
-
인스턴스 메뉴에서 [인스턴스 생성] 버튼을 클릭합니다.
- 인스턴스 생성 시 파일 스토리지의 VPC는 NFS를 적용하려는 클러스터의 VPC와 동일하게 설정해야 합니다.
- Kubernetes Engine 클러스터의 노드에서 접근 가능하도록 접근 제어 설정을 설정된 VPC 내 모든 프라이빗 IP에서의 접근을 허용합니다.로 설정하여 생성합니다.
File Storage 인스턴스 만들기
-
파일 스토리지 생성 후, NFS Client Provisioner 설치를 위해 인스턴스 상세 페이지에서 마운트 정보와 VPC 정보를 확인합니다. 위해 인스턴스 상세 페이지에서 마운트 정보와 네트워크 정보를 확인합니다.
콘솔 File storage 상세 페이지
Step 2. NFS Client Provisioner 설정하기
앞서 생성한 파일 스토리지를 PVC(PersistentVolumeClaim)를 통해 동적으로 영구 볼륨으로 사용하기 위해 Client Provisioner를 설치합니다. YAML 파일 또는 Helm을 사용하여 NFS Client Provisioner를 설치합니다.
YAML 파일로 NFS Client Provisioner 배포
-
다음의 명령어를 터미널에 입력하여 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
-
Deployment를 설정하는 아래의 YAML 파일을 로컬에 다운로드한 후, 스토리지의 상세 페이지에서 NFS Client Provisioner 설치 명령어의
File Storage IP
와File 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] -
이전 단계에서 입력한 스토리지의
File Storage IP
와File Storage Mount Path
정보가 저장된 YAML 파일을 실행하기 위해 다음의 명령어를 실행합니다.-
YAML 파일 적용 시, 로컬에 저장한 실제 YAML 파일명으로 적용해야 합니다.
kubectl --kubeconfig=$KUBE_CONFIG apply -f {YAML 파일명}.yaml
-
Helm으로 NFS Client Provisioner 배포
쿠버네티스 패키지 관리 도구인 Helm을 사용하여 NFS Client Provisioner를 설치합니다.
-
NFS Client Provisioner 설치하기 전, Helm client를 설치합니다.
- 운영체제별 Helm 설치에 대한 자세한 설명은 Helm 공식 문서 > 헬름 설치하기 문서를 참고하시기 바랍니다.
-
다음의 명령어를 실행하여 공식 Helm chart repository를 먼저 추가합니다.
공식 Helm chart repository 추가 명령어helm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner/
-
스토리지의 상세 페이지에서 NFS Client Provisioner 설치 명령어의
File Storage IP
와File 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를 확인하기 위해 다음의 명령어를 실행합니다.
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 공식 문서를 참고하시기 바랍니다.
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)을 확인합니다.
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