참고
- AKS에서 Azure Disk가 포함된 볼륨을 수동으로 만들어 사용 - Azure Docs
- AKS에서 Azure Disk를 사용하여 영구 볼륨을 동적으로 만들어 사용 - Azure Docs
정적 볼륨 - Azure Disk
정적 볼륨의 데이터 재 사용성을 확인하기 위한 테스트 입니다.
볼륨에 사용할 Azure Disk 생성
yaml 작성
apiVersion: v1
kind: Pod
metadata:
name: mypod
spec:
containers:
- image: ubuntu/nginx
name: mypod
volumeMounts:
- name: azure
mountPath: /mnt/azure
volumes:
- name: azure
azureDisk:
kind: Managed
diskName: azureDisk
diskURI: /subscriptions/9a5fbf78-8626-4402-8f1c-f0ae7fc988fa/resourcegroups/MC_rgAKS_aksTest998_koreacentral/providers/Microsoft.Compute/disks/azureDisk
yaml 적용
kubectl apply -f ststic-disk.yaml
pod로 접속
kubectl exec -it mypod bash
볼륨 확인
df -h
마운트된 볼륨에 파일 생성
cd /mnt/azure
ll
touch aaa.txt
ll
pod 삭제 후 static-disk.yaml 파일 배포해도 aaa.txt 파일 남아 있음
kubectl delete -f static-disk.yaml
kubectl apply -f static-disk.yaml
당연히 pv, pvc는 존재하지 않고
kubectl get pv
kubectl get pvc
테스트에 사용했던 pod 삭제
kubectl delete -f static-disk.yaml
aaa.txt 파일이 들어 있는 Managed Disk 삭제하지 않습니다.
다음번 테스트할 pcv 정적 볼륨 - azure disk 에서 마운트 했을 때 aaa.txt 파일이 살아 있는지 확인하기 위함입니다.
PVC 정적 볼륨
정적 디스크의 재사용성 테스트 입니다.
위에서 테스트 했던 managed disk를 pv static 볼륨으로 마운트 했을 때 aaa.txt파일이 살아 있는지 확인합니다.
yaml 파일 작성
kind: Pod
apiVersion: v1
metadata:
name: mypod
spec:
containers:
- name: mypod
image: ubuntu/nginx
volumeMounts:
- mountPath: "/mnt/azure"
name: volume
volumes:
- name: volume
persistentVolumeClaim:
claimName: pvc-azure-managed-disk
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc-azure-managed-disk
spec:
accessModes: ["ReadWriteOnce"]
storageClassName: ""
resources:
requests:
storage: 4Gi
volumeName: pv-azure-disk
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-azure-disk
spec:
storageClassName: ""
capacity:
storage: 4Gi
accessModes: ["ReadWriteOnce"]
azureDisk:
kind: Managed
diskName: azureDisk
diskURI: /subscriptions/9a5fbf78-8626-4402-8f1c-f0ae7fc988fa/resourcegroups/MC_rgAKS_aksTest998_koreacentral/providers/Microsoft.Compute/disks/azureDisk
yaml 배포
kubectl apply -f pvc-static-disk.yaml
당연히 pv, pvc 잘 생성되어 있고
kubectl get pv
kubectl get pvc
마운트 확인
df -h
aaa.txt 파일 확인
cd /mnt/azure
ll
azure disk는 남겨두고 azure disk를 참조하는 pod만 지웠다가 다시 생성하는건 무리없이 사용 가능해 보임
pod제거와 Managed disk 제거
pod가 실행중일 때 portal에서 managed disk 삭제 버튼 비활성화 되어 있음 오~~ 당연한 거지만 신통하네
pod 제거
kubectl delete -f pvc-static-disk.yaml
managed disk 제거
pvc 동적 볼륨 - 기본제공 클래스
기본 스토리지 클래스로 동적 볼륨으로 pod 배포시 azure disk가 같이 생성되는지 확인해보고,
pod 삭제 시 자동으로 배포 되었던 azure disk도 같이 삭제 되는지 확인 (기본 스토리지 클래스는 회수 정책이 delete)
먼저 aks 리소스 그룹에 managed disk 가 없는것을 확인 하고
yaml 작성
- storage class : managed-premium
- reclaiming : delete
kind: Pod
apiVersion: v1
metadata:
name: mypod
spec:
containers:
- name: mypod
image: ubuntu/nginx
volumeMounts:
- mountPath: "/mnt/azure"
name: volume
volumes:
- name: volume
persistentVolumeClaim:
claimName: pvc-azure-managed-disk
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc-azure-managed-disk
spec:
accessModes: ["ReadWriteOnce"]
storageClassName: managed-premium
resources:
requests:
storage: 4Gi
yaml 배포
kubectl apply -f pvc-dynamic-disk.yaml
pv, pvc 확인
kubectl get pv
kubectl get pvc
포탈에 생성된 디스크 확인
pod에 들어가서 마운트된 디스크에 bbb.txt 파일 생성
kubectl exec -it mypod bash
reclaimPolicy가 delete 니까 아래 내용되로 진행되는 부분 확인
- yaml 파일로
- pod, pvc를 삭제 하면 disk도 삭제 될거고,
- pod를 다시 배포하면 아까와는 다른 disk가 새로 생성 될거니까
pod 삭제
kubectl delete -f pvc-dynamic-disk.yaml
포탈에서 삭제된 disk 확인
자 그러면 다시 pvc-dynamic-disk.yaml 배포
kubectl apply -f pvc-dynamic-disk.yaml
pv, pvc 배포 확인 및 포탈에서 disk 생성 확인
kubectl get pv
kubectl get pvc
당연하게도 처음 동적 생성했던 disk와 새로 생성된 disk 이름이 다르고
또 당연히 pod에는 아까 만든 bbb.txt가 없겠지만 그래도 굳이 한번 더 확인
리소스 정리
kubectl delete -f pvc-dynamic-disk.yaml
pvc 동적 볼륨 - 기본제공 클래스
storage class - default 배포 되는지만 테스트 해봄
yaml 작성
kind: Pod
apiVersion: v1
metadata:
name: mypod
spec:
containers:
- name: mypod
image: ubuntu/nginx
volumeMounts:
- mountPath: "/mnt/azure"
name: volume
volumes:
- name: volume
persistentVolumeClaim:
claimName: pvc-azure-managed-disk
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc-azure-managed-disk
spec:
accessModes: ["ReadWriteOnce"]
storageClassName: default
resources:
requests:
storage: 4Gi
yaml 배포
kubectl apply -f pvc-dynamic-default-disk.yaml
pv, pvc 확인
kubectl get pv
kubectl get pvc
디스크도 생성 되어 있고
리소스 정리
kubectl delete -f pvc-dynamic-default-disk.yaml
Custom Storage Class - pvc 동적 볼륨
custom storage class - reclaim = retain
sku = 표준 HDD, reclaim = retain
pod 삭제 시 디스크 남아 있어야 하고
pod가 다시 배포 되었을 때 새로운 디스크를 할당 받아야 하는데
결과는 어찌 될까?
storage class 생성 확인
kubectl get sc
pv, pvc 확인
kubectl get pv
kubectl get pvc
포탈에서 디스크 확인
pod에 마운트된 공간에 ccc.txt 생성
표준 HDD로 잘 배포 되었고
이제 pod 삭제 후 디스크는 유지 되는지 보자
pod 삭제
kubectl delete -f pvc-dynamic-standard-hdd-disk.yaml
포탈에서 디스크 확인해보면 unattached 상태이지만 삭제는 안되고 있는 상태 확인
자! 그럼 다시한번 pod 배포
kubectl apply -f pvc-dynamic-standard-hdd-disk.yaml
pv, pvc 확인
kubectl get pv
kubectl get pvc
처음 배포했을 때와는 달리 두 개의 디스크가 출력되고 각 디스크의 상태 정보가 다름을 확인할 수 있습니다.
사용중인 디스크는 Bound로 출력되고 사용되었던(지금 사용하지 않는) 디스크는 Reclaim Policy가 Retain이라 Released상태로 남아 있습니다.
이것은 정상이고 k8s에서는 다시 사용하지 않습니다. Released 상태의 디스크의 내용을 수동으로 백업하거나 삭제할 수 있습니다.
당연히 존재하지 않겠지만 아까 생성했던 ccc.txt 파일 존재 하는지 확인
역시 ccc.txt 파일은 존재하지 않습니다.
리소스 정리
kubectl delete -f pvc-dynamic-standard-hdd-disk.yaml
지금 테스트에 사용되는 yaml 파일 안에는 pvc, pod, sc가 같이 정의가 되어 있어서 yaml로 삭제하면 스토리지 클래스도 삭제 됩니다.
실제 환경에서는 반드시 스토리지 클래스는 별도 yaml 파일로 분리 하는게 바람직 합니다.
포탈에서 디스크 삭제 해주세요
reclaiming이 retain인 경우 yaml로 리소스들 삭제 했고 포탈에서 디스크를 삭제 했더라도 PV는 살아 있습니다.
delete pv api로 삭제 해 줍니다.
kubectl get pv
kubectl delete pv [pv1 이름]
kubectl delete pv [pv2 이름]
사용중인 PV, PVC 보호 확인
동적 pv 사용중에 pv 삭제 했을 때 pv의 terminating 값 확인
사용된 yaml
kind: Pod
apiVersion: v1
metadata:
name: mypod
spec:
containers:
- name: mypod
image: ubuntu/nginx
volumeMounts:
- mountPath: "/mnt/azure"
name: volume
volumes:
- name: volume
persistentVolumeClaim:
claimName: pvc-azure-managed-disk
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc-azure-managed-disk
spec:
accessModes: ["ReadWriteOnce"]
storageClassName: managed-standard-retain
resources:
requests:
storage: 4Gi
---
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: managed-standard-retain
provisioner: kubernetes.io/azure-disk
reclaimPolicy: Retain
parameters:
storageaccounttype: Standard_LRS
kind: Managed
allowVolumeExpansion: true
pvc-dynamic-standard-hdd-disk.yaml에 포함된 storage class
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: managed-standard-retain
provisioner: kubernetes.io/azure-disk
reclaimPolicy: Retain
parameters:
storageaccounttype: Standard_LRS
kind: Managed
allowVolumeExpansion: true
yaml 배포
kubectl apply -f pvc-dynamic-standard-hdd-disk.yaml
배포된 리소스 확인
kubtctl get sc
kubectl get pv
kubectl get pvc
pv, pvc 보호 상태 확인
pv
pv 삭제하려고 api를 날렸는데 20분이 지나도록 api 완료가 되지 않고 있습니다.
kubectl delete pv <pv name>
Ctrl+C로 빠져나와서 pv 상태를 살펴 봅니다.
kubectl get pv
kubectl describe pv <pv name>
pv가 Terminating 상태로 살아 있습니다.
pvc도 삭제를 해봐야 겠죠~
kubectl delete pvc <pvc name>
pvc 삭제도 delete api 날렸는데 완료가 되지 않고 있습니다
아까만큼 오래 기다려 보진 않았지만 이미 api가 실행된 상태라 추측되므로 곧바로 Ctrl+C로 중지 시키고 pvc상태를 확인해 봅니다.
pvc도 terminating 상태로 잘 동작하고 있는것을 확인할 수 있습니다.
자 그러면 현재 pv, pvc는 삭제가 예약되어 있고, reclaiming은 retain 이니까
pod만 삭제하면 pv, pvc는 자동으로 삭제 될거고
스토리지 클래스와 azure disk는 남아 있어야 정상
pod만 지워봅니다.
kubectl delete pod mypod
pod는 잘 삭제 되었고 pv, pvc도 확인해 봅니다.
kubectl get pv
kubectl get pvc
pv,pvc도 제대로 삭제 되었고 이제 sc랑 azureDisk도 확인해 봅니다.
kubectl get sc
오~~ 깔끔합니다.
스토리지 클래스 남아 있고 Azure Disk도 남아 있습니다.
자 그럼 리소스 정리
스토리지 클래스 삭제하고 포탈에서도 Azure Disk 삭제합니다.
kubectl delete sc <sc name>
볼륨 확장
pvc를 통해 사용중인 볼륨의 크기를 상향 조정할 수 있습니다.
볼륨의 사이즈를 변경하려면 스토리지 클래스에 볼륨확장 플래그가 활성화 상태로 설정되어 있어야 합니다.
볼륨 확장이 설정되어 있는 스토리지 클래스를 생성하고 4Gi를 요청하는 pvc와 이를 사용하는 pod를 배포 합니다.
yaml 파일 준비
yaml 파일 배포
kubectl apply -f pvc-expansion-sc.yaml
kubectl apply -f pvc-expansion-pvc.yaml
kubectl apply -f pvc-expansion-pod.yaml
배포 확인
볼륨 사이즈를 변경하기 전에 pod를 제거하여 AzureDisk를 Unattached 상태로 만들어야 합니다.
pod 삭제
kubectl delete pod mypod
pvc의 사이즈 수정
kubectl edit pvc pvc-azure-managed-disk
pv, pvc 용량 확인
kubectl get pv
kubectl get pvc
pv는 용량변경되었는데 pvc는 변경전의 사이즈 그대로 출력되고 있습니다.
pvc를 자세하게 살펴 봅니다.
kubectl describe pvc pvc-azure-managed-disk
pod가 실행 되어야 사이즈 변경이 완료 되는 모양입니다.
pod를 다시 배포 하고 pvc 의 size 확인
kubectl apply -f pvc-expansion-pod.yaml
kubectl get pvc
container os에 별다른 설정을 하지 않아도 변경된 용량으로 마운트 되어 있습니다.
kubectl exec -it mypod bash
df -h
리소스 정리
kubectl delete -f pvc-expansion-pod.yaml
kubectl delete -f pvc-expansion-pvc.yaml
kubectl delete -f pvc-expansion-sc.yaml
reclaimpolicy가 retain이였으므로 포탈에서도 삭제해 주어야 합니다.
(portal에서 삭제하는 내용은 생략)
'IT > Kubernetes' 카테고리의 다른 글
Application Gateway를 AKS 인그레스 컨트롤러로 사용하기 (0) | 2023.04.11 |
---|---|
K8S 퍼시스턴트볼륨 테스트 - Azure File (0) | 2023.04.11 |
PV, PVC는 무엇인가? (0) | 2023.04.10 |
Jenkins로 AKS CI/CD 구축 1/2 - Jenkins 구성 (0) | 2023.04.10 |
K8S 인증서 적용방법 (0) | 2023.04.10 |