기본적으로 pod가 삭제되거나 컨테이너가 재시작 됨에 따라 파일 시스템의 데이터가 삭제된다. stateless 응용 프로그램의 경우 상관없으나, statefl 응용 프로그램과 같이 데이터를 지속적으로 저장해야 하는 경우 저장소가 필요하다.
k8s에는 여러가지가 볼륨이 있는데 AKS에선 PV(영구적 볼륨)는 Kubernetes API에서 만들어지고 관리되는 스토리지 리소스로 만들 수 있다.
- Azure Disk, Azure Files로 사용 가능
- Azre Disk의 경우 ReadWriteOnce로 탑재, 단일 노드
- Azure Files의 경우 여러 노드에 동시에 액세스 해야 할 경우 사용
리소스 그룹 확인: AKS 클러스터의 리소스 그룹 이름을 확인합니다.
az aks show --resource-group <yourResourceGroup> --name <yourAKSCluster> --query nodeResourceGroup -o tsv

디스크 생성: 이제 Azure CLI를 사용하여 디스크를 생성합니다.
az disk create --resource-group MC_myResourceGroup_myAKSCluster_eastus --name myAKSDisk --size-gb 20 --query id --output tsv

디스크 ID는 다음 단계에서 사용됩니다.
pv-azuredisk.yaml 파일 생성: 다음 내용을 포함하는 파일을 생성합니다. 여기서 volumeHandle에는 이전 단계에서 생성된 디스크 ID를 입력합니다.
apiVersion: v1
kind: PersistentVolume
metadata:
annotations:
pv.kubernetes.io/provisioned-by: disk.csi.azure.com
name: pv-azuredisk
spec:
capacity:
storage: 20Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
storageClassName: managed-csi
csi:
driver: disk.csi.azure.com
volumeHandle: <디스크 ID>
volumeAttributes:
fsType: ext4

pvc-azuredisk.yaml 파일 생성: 다음 내용을 포함하는 파일을 생성합니다.
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc-azuredisk
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 20Gi
volumeName: pv-azuredisk
storageClassName: managed-csi

kubectl을 사용하여 리소스를 생성합니다.
kubectl apply -f pv-azuredisk.yaml
kubectl apply -f pvc-azuredisk.yaml
kubectl get pvc pvc-azuredisk

azure-disk-pod.yaml 파일 생성: 다음 내용을 포함하는 파일을 생성합니다.
apiVersion: v1
kind: Pod
metadata:
name: mypod
spec:
containers:
- name: mypod
image: nginx
volumeMounts:
- mountPath: /mnt/azure
name: azure
volumes:
- name: azure
persistentVolumeClaim:
claimName: pvc-azuredisk

Pod 리소스를 생성합니다.
kubectl apply -f azure-disk-pod.yaml

확인

https://learn.microsoft.com/ko-kr/azure/aks/azure-csi-disk-storage-provision
https://learn.microsoft.com/ko-kr/azure/aks/concepts-storage#persistent-volumes