- 인쇄
- PDF
NAS 볼륨 CSI 예제
- 인쇄
- PDF
VPC 환경에서 이용 가능합니다.
NAS 볼륨 CSI에서 설명한 CSI 사용법을 바탕으로 다양한 방식을 통해 볼륨을 할당하는 예제입니다.
NAS 볼륨 추가
NAS CSI 드라이버를 통해 NAS 볼륨을 추가하려면 아래 yaml 코드를 통해 PersistentVolumeClaim (PVC)을 요청해 주십시오. NAS CSI 드라이버가 해당 PVC를 확인하여 필요한 PersistentVolume (PV)을 자동으로 생성합니다.
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: nas-csi-pvc
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 500Gi
storageClassName: nks-nas-csi
AccessMode
: NAS CSI에서는 다양한 Access Mode를 지원합니다.
모드 | 설명 |
---|---|
ReadWriteOnce | 하나의 노드에서 볼륨을 읽기-쓰기로 마운트 |
ReadOnlyMany | 여러 노드에서 볼륨을 읽기 전용으로 마운트 |
ReadWriteMany | 여러 노드에서 볼륨을 읽기-쓰기로 마운트 |
Resources
: 생성할 스토리지의 크기입니다. 기본값은 500 GB이며, 최소 500 GB부터 최대 10,000 GB 사이에서 100 GB 단위로 Gi를 사용해 입력할 수 있습니다.
Pod에 단일 신규 볼륨 할당
새 NAS 볼륨을 생성하여 마운트하려면 아래 yaml 코드를 사용해 주십시오.
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: nas-csi-pvc
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 500Gi
storageClassName: nks-nas-csi
---
kind: Pod
apiVersion: v1
metadata:
name: my-csi-app
spec:
containers:
- name: my-frontend
image: busybox
volumeMounts:
- mountPath: "/data"
name: my-volume
command: [ "sleep", "1000000" ]
volumes:
- name: my-volume
persistentVolumeClaim:
claimName: nas-csi-pvc
- Pod
spec.container
: volumeMounts에 마운트할 스토리지 이름을 입력한 후 mountPath에 마운트 경로를 입력해 주십시오.spec.volumes
: 컨테이너에 마운트될 스토리지를 정의하기 위해 생성된 PersistentVolumeClaim의 이름을 persistentVolumeClaim.claimName에 입력해 주십시오.
NAS 볼륨이 Pod에 마운트 된 상태에서 클러스터를 삭제하면 NAS 볼륨은 자동으로 삭제되지 않습니다. 이 경우 네이버 클라우드 플랫폼 콘솔이나 API를 통해 반납해야 합니다.
하나의 NAS 볼륨을 여러 Pod에 마운트해서 사용
하나의 신규 NAS 볼륨을 생성하고 두 개의 Pod에 마운트하여 해당 볼륨을 공유하여 사용하는 예제입니다.
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: nas-csi-pvc
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 500Gi
storageClassName: nks-nas-csi
---
kind: Pod
apiVersion: v1
metadata:
name: my-csi-app-1
spec:
containers:
- name: my-frontend
image: busybox
volumeMounts:
- mountPath: "/data"
name: my-volume
command: [ "sleep", "1000000" ]
volumes:
- name: my-volume
persistentVolumeClaim:
claimName: nas-csi-pvc
---
apiVersion: v1
kind: Pod
metadata:
name: my-csi-app-2
spec:
containers:
- name: my-frontend
image: busybox
volumeMounts:
- mountPath: "/data"
name: my-volume
command: [ "sleep", "1000000" ]
volumes:
- name: my-volume
persistentVolumeClaim:
claimName: nas-csi-pvc
이미 생성된 NAS 볼륨을 Pod에 마운트
NAS에서 NFS 프로토콜로 볼륨을 생성합니다.
NAS 볼륨이 생성되면 마운트 정보의 IP 및 PATH 정보를 확인합니다.
이미 생성된 NAS 볼륨를 사용하여 StorageClass을 생성한 후 Pod에 마운트하려면 아래 yaml 코드를 사용해 주십시오.
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: static-nks-nas-csi
provisioner: nas.csi.ncloud.com
parameters:
server: __NAS_IP__
share: __NAS_PATH__
reclaimPolicy: Retain
volumeBindingMode: WaitForFirstConsumer
mountOptions:
- hard
- nolock
- nfsvers=3
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: static-pvc
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 500Gi
storageClassName: static-nks-nas-csi
---
kind: Pod
apiVersion: v1
metadata:
name: my-csi-app
spec:
containers:
- name: my-frontend
image: busybox
volumeMounts:
- mountPath: "/data"
name: my-volume
command: [ "sleep", "1000000" ]
volumes:
- name: my-volume
persistentVolumeClaim:
claimName: static-pvc
kind: StorageClass
이미 존재하는 NAS 볼륨을 Kubernetes 클러스터에서 사용할 수 있도록 정보를 입력합니다.provisioner
: 네이버 클라우드 플랫폼 NAS 볼륨의 Provisioner인 nas.csi.ncloud.com를 입력해 주십시오.parameters.server
: 이미 생성한 NAS 볼륨 마운트 정보의 IP를 입력해 주십시오.parameters.path
: 이미 생성한 NAS 볼륨 마운트 정보의 PATH를 입력해 주십시오.reclaimPolicy
: 사용이 끝난 PVC가 삭제될 때 NAS 볼륨이 삭제되지 않도록 반드시 Retain으로 설정합니다.
kind: PersistentVolumeClaim
생성된 PersistentVolume과 바인딩되는 PersistentVolumeClaim을 생성합니다.resources.storage
: 필수 입력 항목으로 이미 생성한 NAS 볼륨의 크기를 입력해 주십시오. 하지만 PVC의 크기는 NAS 볼륨 크기에 의존하기 때문에 입력하는 값은 의미가 없습니다.storageClassname
: NAS 스토리지 클래스 이름인 static-nks-nas-csi를 입력해 주십시오.volumeName
: 생성한 PersistentVolume의 이름을 입력해 주십시오.
kind: Pod
볼륨 요청인 PersistentVolumeClaim을 지정하여 사용할 볼륨을 마운트합니다.volumes.persistentVolumeClaim.claimName
: 지정할 PersistentVolumeClaim의 이름을 입력합니다.
반납보호 설정이 되어있는 NAS 볼륨의 경우, PersistentVolumeClaim은 삭제되지만 실제 볼륨은 유지됩니다.
실제 NAS볼륨은 NAS 콘솔에서 삭제 가능합니다.
볼륨 리사이징
네이버 클라우드 플랫폼의 NAS 볼륨은 이미 생성되어 있는 볼륨에 대한 리사이징 기능을 제공합니다.
NAS 볼륨을 리사이징하는 방법은 다음과 같습니다. 아래 설명에서는 500 GB 크기의 NAS 볼륨을 예시로 들어 설명합니다.
- 아래 yaml 코드를 사용하여 500 GB 크기의 신규 블록 스토리지 볼륨 생성을 요청해 주십시오.
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: csi-deployment-pvc
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 500Gi
storageClassName: nks-nas-csi
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-csi-app
spec:
selector:
matchLabels:
app: my-csi-app
replicas: 1
template:
metadata:
labels:
app: my-csi-app
spec:
containers:
- name: my-frontend
image: busybox
volumeMounts:
- mountPath: "/data"
name: my-volume
command: [ "sleep", "1000000" ]
volumes:
- name: my-volume
persistentVolumeClaim:
claimName: csi-deployment-pvc
- 아래 명령어를 실행하여 PersistentVolumeClaim의 Volume Request 크기를 500 GB에서 600 GB로 조정해 주십시오.
kubectl --kubeconfig $KUBE_CONFIG patch pvc csi-deployment-pvc -p '{"spec":{"resources":{"requests":{"storage":"600Gi"}}}}'
암호화가 적용 된 NAS 볼륨을 위한 StorageClass 사용
암호화가 적용된 NAS 볼륨을 위한 StorageClass는 NAS CSI 버전 2.0.2 이상부터 사용 가능합니다.
NAS CSI 드라이버는 기본적으로 볼륨 암호화가 적용되지 않은 NAS 볼륨을 생성합니다. 하지만 StorageClass에 encryption을 명시하여 볼륨 암호화가 적용된 NAS 볼륨을 생성할 수 있습니다. 아래 예시로 사용된 yaml 코드를 통해 볼륨 암호화가 적용된 NAS 볼륨을 생성할 수 있습니다.
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: nks-nas-csi-encryption
mountOptions:
- hard
- nolock
- nfsvers=3
provisioner: nas.csi.ncloud.com
parameters:
encryption: "true"
reclaimPolicy: Delete
volumeBindingMode: WaitForFirstConsumer
allowVolumeExpansion: true
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: nas-csi-pvc
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 500Gi
storageClassName: nks-nas-csi-encryption
---
kind: Pod
apiVersion: v1
metadata:
name: my-csi-app
spec:
containers:
- name: my-frontend
image: busybox
volumeMounts:
- mountPath: "/data"
name: my-volume
command: [ "sleep", "1000000" ]
volumes:
- name: my-volume
persistentVolumeClaim:
claimName: nas-csi-pvc
PersistentVolumeClaim 제거
Kubernetes의 PersistentVolumeClaim은 Deployment, StatefulSet, ReplicaSet, Pod 등 요청된 리소스를 삭제하더라도 함께 삭제되지 않으므로, 삭제하려면 별도의 명령어가 필요합니다.
PersistentVolumeClaim을 확인한 후 제거하려면 다음 명령어를 각각 사용해 주십시오.
- PVC 조회
$ kubectl --kubeconfig $KUBE_CONFIG get pvc
- PVC 삭제
$ kubectl --kubeconfig $KUBE_CONFIG delete pvc static-pvc
NAS를 파드에서 바로 접근하기
만약 NAS-CSI를 통하지 않고 NAS에 직접 접근하고자 하는 경우, 아래와 같이 NFS를 사용하여 파드에서 NAS를 직접 마운트할 수 있습니다. 아래 예시에서는 nfs 볼륨 타입을 사용하여 NAS 서버를 직접 마운트합니다. server 필드에 NAS의 IP 주소를, path 필드에 NAS의 경로를 입력하여 사용합니다. volumeMounts를 통해 컨테이너 내부에서 사용할 경로를 지정할 수 있습니다.
NAS-CSI 를 사용하지 않으므로 NAS ACL을 수동으로 등록해야 합니다.
kind: Deployment
metadata:
name: my-csi-app
spec:
replicas: 1
selector:
matchLabels:
app: my-csi-app
template:
metadata:
labels:
app: my-csi-app
spec:
containers:
- name: my-csi-app
image: nginx
volumeMounts:
- name: web
mountPath: /web
- name: was
mountPath: /was
volumes:
- name: web
nfs:
server: __NAS_IP__
path: __NAS_PATH__/web
readOnly: false
- name: was
nfs:
server: __NAS_IP__
path: __NAS_PATH__/was
readOnly: false