NAVER Cloud
kubernetes Pod 에서 NAS 공유 볼륨 사용하기
한크크
2021. 12. 1. 12:21
Deployment 로 배포된 여러개의 pod 에서 동일한 파일에 접근하기 위해서는 오브젝트 스토리지를 사용하는 방법도 있지만, 상황에 따라서는 NAS 볼륨을 사용하는 것이 더 효율적일 수도 있다.
네이버클라우드의 kubernetes 에서 NAS 볼륨을 사용하는 방법을 제공하긴 했으나, worker node 가 증가되면 수동으로 설정해줘야 하는 부분들이 있었는데, NAS CSI 가 출시되면서 상당히 편리해졌다.
기본적으로 block storage csi 는 클러스터 생성 시 배포되어 있는데, NAS csi 역시 클러스터 생성 시 배포에 포함된다. (21년 11/25 이후 배포된 nks 클러스터)
11/25 이전에 생성하여 사용하던 클러스터라면 수동으로 NAS csi 를 배포해줘야 한다.
1. 기존 사용 nks 클러스터에 nas csi 배포 / 확인
kubectl --kubeconfig=$KUBE_CONFIG apply -f https://nks.apigw.ntruss.com/static/v1/nas-csi/real/pub/1.0/latest/nas-csi-nks-driver.yaml
kubectl --kubeconfig=$KUBE_CONFIG get storageclass
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
nks-block-storage (default) blk.csi.ncloud.com Delete WaitForFirstConsumer true 146d
nks-nas-csi nas.csi.ncloud.com Delete WaitForFirstConsumer true 126m
kubectl --kubeconfig $KUBE_CONFIG get deployment -n kube-system
NAME READY UP-TO-DATE AVAILABLE AGE
nks-nas-csi-controller 1/1 1 1 120m
kubectl --kubeconfig $KUBE_CONFIG get daemonset -n kube-system
NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE
nks-nas-csi-node 4 4 4 4 4 kubernetes.io/os=linux 120m
2. CSI 볼륨 추가 및 pod 배포
# pod_share_vol.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: nas-csi-pvc
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 500Gi
storageClassName: nks-nas-csi
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment-volume
spec:
selector:
matchLabels:
app: nginx
replicas: 3
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
volumeMounts:
- name: shared-data
mountPath: "/www"
volumes:
- name: shared-data
persistentVolumeClaim:
claimName: nas-csi-pvc
kubectl --kubeconfig $KUBE_CONFIG apply -f pod_share_vol.yaml
kubectl --kubeconfig $KUBE_CONFIG get deployment
NAME READY UP-TO-DATE AVAILABLE AGE
nginx-deployment-volume 3/3 3 3 98m
kubectl --kubeconfig $KUBE_CONFIG get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
nas-csi-pvc Bound pvc-669ea7618ed54f518 500Gi RWX nks-nas-csi 118m
3. pod 에 접근해서 /www 마운트 여부 확인 및 파일 생성
kubectl --kubeconfig $KUBE_CONFIG exec -it nginx-deployment-volume-786d7648cf-4rb5k /bin/sh
kubectl --kubeconfig $KUBE_CONFIG exec -it nginx-deployment-volume-786d7648cf-4rb5k /bin/sh
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
#
df -h
Filesystem Size Used Avail Use% Mounted on
overlay 48G 16G 30G 34% /
tmpfs 64M 0 64M 0% /dev
tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup
169.254.82.85:/n2534632_pvc669ea7618ed54f518/pvc669ea7618ed54f518 500G 384K 500G 1% /www
/dev/xvda1 48G 16G 30G 34% /etc/hosts
cd /www
touch ttt.txt
4. deployment 내 다른 pod 접근해서 /www 마운트 여부 및 ttt.txt 파일 유무 확인
kubectl --kubeconfig $KUBE_CONFIG exec -it nginx-deployment-volume-786d7648cf-cnwfn /bin/sh
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
df -h
Filesystem Size Used Avail Use% Mounted on
overlay 48G 13G 33G 29% /
tmpfs 64M 0 64M 0% /dev
tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup
169.254.82.85:/n2534632_pvc669ea7618ed54f518/pvc669ea7618ed54f518 500G 384K 500G 1% /www
/dev/xvda1 48G 13G 33G 29% /etc/hosts
cd /www
ls
ttt.txt
Node Pool 내 node 를 추가한 이후에 pod 를 scale out 해도 같은 nas 볼륨을 공유해서 사용할 수 있다.
반응형