Kubernetes

Resizing StatefulSet Persistent Volumes with zero downtime

DevelopC 2022. 9. 20. 11:54
728x90

Resizing StatefulSet Persistent Volumes with zero downtime

kubernetes statefulset에서 사용중인 persistent volume의 사이즈를 다운타임없이 용량을 증가하는 방법입니다.

Storage Class 설정 확인

StatefuleSet에 설정한 storageClassName을 확인하여, 아래의 storage class의 설정을 확인해주세요. allowVolumeExpansion 값이 true인 경우에만 resize 가능합니다.

allowVolumeExpansion: true
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  annotations:
    meta.helm.sh/release-name: aws-ebs-csi-driver
    meta.helm.sh/release-namespace: amazon-ebs
    storageclass.kubernetes.io/is-default-class: "true"
  labels:
    app.kubernetes.io/managed-by: Helm
  name: gp3
parameters:
  csi.storage.k8s.io/fstype: ext4
  type: gp3
provisioner: ebs.csi.aws.com
reclaimPolicy: Delete
volumeBindingMode: WaitForFirstConsumer

StatefulSet 삭제

cascade 옵션을 사용하여, POD을 삭제하지않고, statefulset만 삭제합니다. 삭제 후 statefulset을 복구하기위해 yaml 파일로 저장해야합니다.

# StatefulSet yaml 파일 저장
$ kubectl get sts prometheus-server -n prometheus -o yaml > prometheus-server.yaml

# POD 유지한채 StatefulSet 삭제
$ kubectl delete sts prometheus-server -n prometheus --cascade=orphan

# POD 확인
$ kubectl get pod -n prometheus

Persistent Volume 사이즈 변경

statefuleset에 설정된 PVC를 조회하여, spec.resources.requests.storage에 설정된 사이즈를 수정하여 반영합니다.

$ kubectl get pvc storage-volume-prometheus-server-0 -n prometheus -o yaml

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  annotations:
  ...
  name: storage-volume-prometheus-server-0
  namespace: prometheus
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      # 사이즈 수정
      storage: 100Gi
  storageClassName: gp3
  ...

StatefulSet 복구

PVC 용량이 변경되기까지 시간이 조금 걸립니다. 확인 후 statefuleset을 복구합니다.

$ kubectl apply -f prometheus-server.yaml
728x90

'Kubernetes' 카테고리의 다른 글

Amazon EFS CSI Driver  (0) 2022.09.23
Kubernetes RBAC 알아보기  (0) 2022.09.22
CoreDNS NXDOMAIN 오류 해결  (0) 2022.09.21
Kubernetes ServiceAccount로 kubeconfig 파일 생성  (0) 2022.09.20
Amazon EBS CSI driver  (4) 2022.09.19