NFS Client Provisioner 이용 가이드

NFS Client Provisioner는 기존에 구성된 NFS 서버에 PVC(Persistent Volume Claim)를 통한 PV(Persistent Volume)를 자동 생성해주는 Provisioner입니다.

이 가이드에서는 Helm CLI를 이용해 nfs-client-provisioner를 설치하여 NAS 상품에 생성된 볼륨을 연동하는 방법을 설명합니다.

이 가이드는 Helm v3 기준으로 작성했습니다. Helm을 사용하기 위해서는 kubectl 설치 및 kubeconfig 설정이 선행되어야 합니다.

NAS Volume 생성

NAS 상품에서 NFS 프로토콜로 볼륨을 생성합니다.

NAS 볼륨 생성 시 NFS 접근 제어 설정을 통해 클러스터 내의 모든 워커 노드 서버를 ACL에 등록해야 합니다.

NAS 볼륨이 생성되면 마운트 정보의 IPPATH 정보를 확인합니다.

IP와 PATH 정보는 nfs-client-provisioner를 설치할 때 설정값으로 사용됩니다.

Helm CLI 설치

Helm CLI는 아래 링크에서 사용 환경에 맞는 방법으로 설치를 진행합니다.

Helm Repo 추가

Helm CLI 설치 후 공식 Helm chart repository를 CLI에 추가합니다.

$ helm repo add stable https://kubernetes-charts.storage.googleapis.com/

NFS Client Provisioner 설치

helm install 명령을 이용하여 클러스터에 nfs-client-provisioner를 설치합니다.

$ helm --kubeconfig=$KUBE_CONFIG install storage stable/nfs-client-provisioner \
--set nfs.server=__NAS_IP__ \
--set nfs.path=__NAS_PATH__
NAME: storage
LAST DEPLOYED: Mon Jun  8 15:03:25 2020
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None

위 명령의 __NAS_IP__, __NAS_PATH__ 값은 다음 예제를 참고하여 설정값을 지정합니다.

예제

  • __NAS_IP__: 169.254.0.13
  • __NAS_PATH__: /n000693_provisioner

StorageClass 확인하기

nfs-client-provsioner 설치가 완료되면 kubectl --kubeconfig=$KUBE_CONFIG get storageclass 명령으로 StorageClass를 조회할 수 있습니다.

$ kubectl --kubeconfig=$KUBE_CONFIG get storageclass
NAME                          PROVISIONER                                    AGE
nfs-client                    cluster.local/storage-nfs-client-provisioner   5m49s
nks-block-storage (default)   blk.csi.ncloud.com                             3h39m

Default Storage Class 확인 및 변경하기

클러스터에 기본적으로 block storage csi가 설치되어 있기 때문에 storage class 조회 시 nks-block-storagedefault로 설정되어 있는 것을 확인하실 수 있습니다.

PVC에 대해 nfs-client-provsioner로 PV를 자동 생성하고 싶다면 defaultnfs-client로 변경해야 합니다. 변경 방법은 다음 공식 문서를 참고하시기 바랍니다.

애플케이션 설치하여 볼륨 생성해보기

Helm을 이용하여 PV를 필요로 하는 Jenkins 설치 및 생성된 볼륨을 확인합니다.

Jenkins 설치하기

helm install 명령으로 Jenkins를 클러스터에 설치합니다.

$ helm --kubeconfig=$KUBE_CONFIG install ci stable/jenkins
NAME: ci
LAST DEPLOYED: Mon Jun  8 15:27:00 2020
NAMESPACE: default
STATUS: deployed
REVISION: 1
NOTES:
1. Get your 'admin' user password by running:
  printf $(kubectl get secret --namespace default ci-jenkins -o jsonpath="{.data.jenkins-admin-password}" | base64 --decode);echo
2. Get the Jenkins URL to visit by running these commands in the same shell:
  export POD_NAME=$(kubectl get pods --namespace default -l "app.kubernetes.io/component=jenkins-master" -l "app.kubernetes.io/instance=ci" -o jsonpath="{.items[0].metadata.name}")
  echo http://127.0.0.1:8080
  kubectl --namespace default port-forward $POD_NAME 8080:8080

3. Login with the password from step 1 and the username: admin

4. Use Jenkins Configuration as Code by specifying configScripts in your values.yaml file, see documentation: http:///configuration-as-code and examples: https://github.com/jenkinsci/configuration-as-code-plugin/tree/master/demos

For more information on running Jenkins on Kubernetes, visit:
https://cloud.google.com/solutions/jenkins-on-container-engine
For more information about Jenkins Configuration as Code, visit:
https://jenkins.io/projects/jcasc/

PVC, PV 확인하기

Jenkins 설치 완료 후 다음 명령들로 PVC 및 PV를 확인합니다.

$ kubectl --kubeconfig=$KUBE_CONFIG get pvc
NAME         STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
ci-jenkins   Bound    pvc-6ddce683-4b6b-49d3-a26e-76ae92dde6dd   8Gi        RWO            nfs-client     25s

$ kubectl --kubeconfig=$KUBE_CONFIG get pv
NAME                                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                STORAGECLASS   REASON   AGE
pvc-6ddce683-4b6b-49d3-a26e-76ae92dde6dd   8Gi        RWO            Delete           Bound    default/ci-jenkins   nfs-client              39s

주의사항

nfs-client-provisioner를 통해 NAS에 마운트된 Worker Node를 정지하는 경우 정지 실패 상태가 될 수 있습니다. 이는 OS의 버그로, 마운트된 NAS에 대해 I/O가 존재할 경우 발생합니다. 따라서 정지하기 전에 노드 유지보수 가이드를 참고하여 종료할 Node를 미리 Drain 후 정지하는 것을 권장합니다.

""에 대한 건이 검색되었습니다.

    ""에 대한 검색 결과가 없습니다.

    처리중...