참고
- AKS에서 Azure Files를 사용하여 수동으로 볼륨을 만들고 사용 - Azure Docs
- AKS에서 Azure Files를 사용하여 영구 볼륨을 동적으로 만들어 사용 - Azure Docs
수동으로 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 준비
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 준비
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 작성
포탈에서 스토리지 어카운트 없는 것 확인하고
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 준비
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가 배포 되어도 재사용되는 볼륨이 아니기 때문에 새로운 볼륨이 생성되어야 합니다.
- 테스트 yaml 배포 (reclaimPolicy = retain)
- yaml로 삭제
- pv, fileshare 남아 있는 것 확인
- 다시 yaml 배포
- 새로운 pv, fileshare 추가로 생성 되는것 확인
reclaimpolicy를 retain으로 변경하고 다시 배포 합니다.
yaml 준비
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>
'IT > Kubernetes' 카테고리의 다른 글
하나의 AGIC에 여러 Ingress 사용이 가능한가? (다른 포트 배포) (0) | 2023.04.11 |
---|---|
Application Gateway를 AKS 인그레스 컨트롤러로 사용하기 (0) | 2023.04.11 |
K8S 퍼시스턴트볼륨 테스트 - Azure Disk (0) | 2023.04.11 |
PV, PVC는 무엇인가? (0) | 2023.04.10 |
Jenkins로 AKS CI/CD 구축 1/2 - Jenkins 구성 (0) | 2023.04.10 |