본문 바로가기
IT/Kubernetes

K8S 퍼시스턴트볼륨 테스트 - Azure File

by rapker 2023. 4. 11.
반응형

참고

 

수동으로 Azure File 볼륨으로 설정

storage account에서 볼륨으로 사용할 파일공유를 생성합니다.

 

storage account의 Access Key를 복사해 둡니다.

 

k8s secret 만들기

kubectl create secret generic azure-secret --from-literal=azurestorageaccountname=<storage account name> --from-literal=azurestorageaccountkey=<storage key>

kubectl create secret generic azure-secret ^
--from-literal=azurestorageaccountname=satestfile998 ^
--from-literal=azurestorageaccountkey=HTiIaBjjINnsYv9bl1YTGrPe0bdunlSzA8lm+rLg6zHM5HochNwDR00BJ5n9sbFuJiS7KfN0KnF40l5uRb5mYg==

 

생성된 secret 확인

kubectl get secret

 

kubernetes 버전 1.18.15, 1.19.7, 1.20.2, 1.21.0부터 인라인 azureFile 볼륨의 비밀 네임 스페이스는 기본 네임 스페이스로만 설정할 수 있습니다.

다른 비밀 네임 스페이스를 지정하려면 대신 퍼시스턴트볼륨 으로 사용해야 합니다.

kubectl describe secret azure-secret

 

인라인 볼륨 yaml 준비

pvc-files-inline.yaml
0.00MB

kind: Pod
apiVersion: v1
metadata:
  name: mypod
spec:
  containers:
  - name: mypod
    image: ubuntu/nginx
    volumeMounts:
    - mountPath: "/mnt/azure"
      name: volume
  volumes:
    - name: volume
      azureFile:
        secretName: azure-secret
        shareName: test-volume
        readOnly: false

 

yaml 배포

kubectl apply -f pvc-files-inline.yaml

 

배포된 pod 확인

kubectl describe pod mypod

 

pod로 진입

kubectl exec -it mypod bash
df -h

 

테스트 파일 생성

cd /mnt/azure
ll
touch aaa.txt
ll

 

포탈에서 file에 생성된 aaa.txt파일 확인

 

pod 삭제

kubectl delete -f pvc-files-inline.yaml

 

pod 삭제 되어도 fileshare에 aaa.txt 파일은 그대로 남아 있습니다.

 

그냥 확인차 포탈에서 새로운 파일 bbb-fromportal.txt 파일을 업로드 하고

아까 배포했던 inline 볼륨 사용하는 pod를 다시 생성해 봅니다.

 

포탈에서 bbb-fromportal.txt 파일 생성

 

아까 사용했던 yaml로 pod 배포

kubectl apply -f pvc-files-inline.yaml

 

pod에 bash로 진입해서

kubectl exec -it mypod bash

 

마운트된 공간에 파일 리스트 확인

cd /mnt/azure
ll

 

이전에 만들었던 aaa.txt 파일과 포탈에서 업로드 했던 bbb-fromportal.txt파일 pod에서 확인 가능한 모습

 

리소스 정리

kubectl delete -f pvc-files-inline.yaml

 


 

static 볼륨을 pvc 형태로 테스트

pv, pvc 방식의 static 볼륨을 생성해 봅니다.

 

앞서inline 볼륨 방식에서  테스트에서 사용했던 fileshare를 다시 붙였을 때 두 개 파일이 잘 복원 되는지도 확인해 봅니다.

 

yaml 준비

 

pvc-files-static.yaml
0.00MB

 

yaml 적용

kubectl apply -f pvc-files-static.yaml

 

pv, pvc 적용 확인

kubectl get pv
kubectl get pvc

 

pod에 들어가서 fileshare에 있던 파일 확인

kubectl exec -it mypod -- bash
cd /mnt/azure
ll

 

fileshare에 있던 파일들 그대로 노출되고 있습니다.

리소스 정리

kubectl delete -f pvc-files-static.yaml

 


 

pvc dynamic 볼륨 생성

 

테스트 확인 항목

  • 동적으로 azure files가 생성되는지 확인
  • azure files를 스토리지로 사용할 때 필요한 k8s secret 오브젝트가 자동생성 되는지 확인
  • azure files 스토리지 클래스의 reclaiming이 delete 일 때 삭제되는 범위 확인

결과

  • azure file 동적 볼륨 생성 시 k8s secret 자동생성 되고
  • reclaiming이 delete 인 경우 스토리지 어카운트는 유지되고 file share만 삭제됨

 

AzureFiles를 동적 볼륨을 사용하기위해 storage class를 추가 합니다.

azure files의 storage class에서 사용할 수 있는 azure fileshare의 sku 종류

  • Standard_LRS
  • Standard_GRS
  • Standrad_ZRS
  • Standard_RAGRS
  • Premium_LRS
  • Premium_ZRS

premium fileshare는 최소 크기는 100GB 입니다.

 

yaml 작성

pvc-files-dynamic.yaml
0.00MB

 

포탈에서 스토리지 어카운트 없는 것 확인하고

 

k8s secret도 없고

kubectl get secret

 

자 그럼  yaml 배포

kubectl apply -f pvc-files-dynamic.yaml

 

스토리지 클래스 생성

kubectl get sc

 

k8s secret

kubectl get secret

 

pv, pvc 확인

kubectl get pv
kubectl get pvc

 

포탈에서 스토리지 어카운트 확인

 

정상적으로 배포 되었구요

 

이제 yaml 파일로 삭제 했을 때 스토리지 어카운트는 유지되고 files만 삭제가 되는부분 확인해 봅니다.

 

yaml로 리소스 정리

kubectl delete -f pvc-files-dynamic.yaml

 

sc, pv, pvc 확인

kubectl get sc
kubectl get pv
kubectl get pvc

 

깨끗하게 삭제 되었구요

 

k8s secret 확인

kubectl get secret

secret은 삭제되지 않고 남아 있습니다.

 

포탈에서 file share 확인

스토리지 어카운트도 남아 있고 file share만 삭제 되었습니다.

 

스토리지 어카운트와 k8s secret 삭제

스토리지 어카운트는 포탈에서 삭제 해주고 아래 커맨드로 k8s secret 도 삭제 합니다.

kubectl delete secret <secret name>

 


reclaiming이 retain인 pvc dynamic 볼륨 생성

 

테스트 목표

reclaiming이 delete, retain 일 때 pod 재 배포 하는 경우 어떤 차이가 있는지 알아 봅니다.

 

yaml 준비

files-dy-delete-sc.yaml
0.00MB
files-dy-pvc.yaml
0.00MB
files-dy-pod.yaml
0.00MB

 

yaml 적용

kubectl apply -f files-dy-delete-sc.yaml
kubectl apply -f files-dy-pvc.yaml
kubectl apply -f files-dy-pod.yaml

 

배포 확인

kubectl get sc
kubectl get pv
kubectl get pvc
kubectl get secret

 

잘 배포 되었고 reclaim policy도 delete인것 확인 되었습니다.

 

이제 pod와 pvc를 제거 해 봅니다.

kubectl delete -f files-dy-pod.yaml
kubectl delete -f files-dy-pvc.yaml

 

삭제 확인

kubectl get pv
kubectl get pvc

 

azure Disk 가 삭제 되는 것처럼 fileshare 가 삭제 되었습니다.

 

이번엔 리소스를 모두 정리하고 storage class의 reclaim을 retain으로 테스트 합니다.

 

스토리지 클래스 정리

kubectl delete -f files-dy-delete-sc.yaml

 

리소스 삭제 확인

 

모든 리소스들 삭제 되었고

아까 만들었던 스토리지 어카운트와 k8s secret는 삭제하지 않고 남겨놔 보겠습니다.

 

리소스 삭제 확인

 

모든 리소스들 삭제 되었고

아까 만들었던 스토리지 어카운트와 k8s secret는 삭제하지 않고 남겨놔 보겠습니다.

 

이제 reclaim policy가 delete가 아닌 retain일 때 pod, pvc를 삭제하면 어떻게 될지 확인해볼 건데요

아마 pod, pvc가 삭제 되어도 pv, fileshare는 남아 있어야 합니다.

이 후 새로운 pod가 배포 되어도 재사용되는 볼륨이 아니기 때문에 새로운 볼륨이 생성되어야 합니다.

  1. 테스트 yaml 배포 (reclaimPolicy = retain)
  2. yaml로 삭제
  3. pv, fileshare 남아 있는 것 확인
  4. 다시 yaml 배포
  5. 새로운 pv, fileshare 추가로 생성 되는것 확인

reclaimpolicy를 retain으로 변경하고  다시 배포 합니다.

 

yaml 준비

files-dy-retain-sc.yaml
0.00MB
files-dy-pvc.yaml
0.00MB
files-dy-pod.yaml
0.00MB

 

yaml 배포

kubectl apply -f files-dy-retain-sc.yaml
kubectl apply -f files-dy-pvc.yaml
kubectl apply -f files-dy-pod.yaml

 

리소스 확인

kubectl get sc
kubectl get pv
kubectl get pvc
kubectl get secret

 

스토리지 클래스는 retain으로 잘 배포 되었고, k8s secret은 새로 생성되지 않았습니다.

포탈에서 fileshare 확인 해봐도 storage account는 그대로 이며 fileshare만 새로 생성 되었습니다.

 

yaml 파일로 pod와 pvc를 제거 합니다.

kubectl delete -f files-dy-pod.yaml
kubectl delete -f files-dy-pvc.yaml

 

리소스 확인

kubectl get pod
kubectl get pvc
kubectl get pv

 

reclaiming이 delete 일 때와는 다르게 pvc가 삭제 되어도 pv와 fileshare는 남아 있습니다.

 

이 상태에서 pod와 pvc를 새로 배포해 봅니다.

kubectl apply -f files-dy-pvc.yaml
kubectl apply -f files-dy-pod.yaml

 

배포된 리소스 확인

kubectl get pod
kubectl get pvc
kubectl get pv

새로운 pv와 fileshare가 생성되었습니다.

 

리소스 정리

kubectl delete -f files-dy-pod.yaml
kubectl delete -f files-dy-pvc.yaml
kubectl delete -f files-dy-retain-sc.yaml

 

 

k8s secret, azure storage account도 삭제 합니다.

kubectl delete secret <secret name>

 

반응형
LIST