CSP 별 스토리지(PV) 용량 증설 방법

Print

Overview

PV(PersistentVolume)의 용량을 증설하는 방법을 소개합니다.

AWS

AWS의 Block Storage 용량 증설 방법

AWS console에서의 증설 방법

1. AWS Console(https://aws.amazon.com/console/)로 접속하여 서비스에서 “EC2”를 선택 → Elastic Block Store의 “볼륨”을 선택 → volumeHandle(또는 PV name)로 검색 후 Size를 확인 하시기 바랍니다.

2. 상단의 “작업”을 버튼을 클릭한 후 “볼륨 수정”을 선택하시기 바랍니다.

3. 변경할 Size로 수정 후 “수정” 버튼을 클릭합니다.

4. 다시 한 번 확인하는 창이 뜨면 “예” 버튼을 클릭합니다.

<참고> 최근에 볼륨을 수정하였다면 6시간 후에 변경이 가능합니다.

5. 변경이 완료되었다는 메시지를 확인합니다.

6. 변경된 용량을 확인합니다.

용량 증설 후 file system 확장

1. 해당 PV가 연결된 pod이 떠 있는 instance에 접속

2. pvc의 용량 확인

# 변경 전의 용량(1GB)으로 표시
$ df -hT | grep pvc-7e095b59-b814-4737-b672-f6b014d6e335
/dev/nvme1n1   ext4      976M  198M  763M  21% /var/lib/kubelet/plugins/kubernetes.io/csi/pv/pvc-7e095b59-b814-4737-b672-f6b014d6e335/globalmount

3. 용량이 변경된 block device확인

# 변경 후
$ lsblk
NAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
nvme0n1       259:0    0  100G  0 disk
├─nvme0n1p1   259:1    0  100G  0 part /
└─nvme0n1p128 259:2    0    1M  0 part
nvme1n1       259:3    0    2G  0 disk /var/lib/kubelet/pods/73c7b7c0-0cb4-4737-841c-4b0b01cb767e/volumes/kubernetes.io~csi/pvc-7e095b59-b814-4737-b672-f6b014d6e335/mount

4. 변경된 용량이 적용되도록 file system을 확장

# /dev/xvda1 부분은 file system name
sudo resize2fs /dev/xvda1

# 실행 예
$ sudo resize2fs /dev/nvme1n1
resize2fs 1.42.9 (28-Dec-2013)
Filesystem at /dev/nvme1n1 is mounted on /var/lib/kubelet/plugins/kubernetes.io/csi/pv/pvc-7e095b59-b814-4737-b672-f6b014d6e335/globalmount; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 1
The filesystem on /dev/nvme1n1 is now 524288 blocks long.

5. 정상적으로 적용되었는지 확인

$ df -hT | grep pvc-7e095b59-b814-4737-b672-f6b014d6e335
/dev/nvme1n1   ext4      2.0G  199M  1.8G  11% /var/lib/kubelet/plugins/kubernetes.io/csi/pv/pvc-7e095b59-b814-4737-b672-f6b014d6e335/globalmount

연결된 pod에도 들어가서 확인

df -h /consul/data
Filesystem                Size      Used Available Use% Mounted on
/dev/nvme1n1              1.9G    198.1M      1.7G  10% /consul/data

참고페이지

https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/recognize-expanded-volume-linux.html

PV와 PVC에 정의된 용량을 증설된 용량으로 표시되도록 변경

이 방법은 kubectl get pv나 kubectl get pvc로 확인하였을 때 증설된 용량으로 보이게 하기 위해서 필요합니다.

예전 용량으로 보이셔도 상관없다면 수행하지 않으셔도 됩니다.

[PV의 Reclaim Policy가 Retain인 경우]

1. PVC Backup

해당 PV의 PVC를 backup 합니다.

$ kubectl get pvc <PVC name> -o yaml > <저장하고자 하는 filename>.yaml

2. PVC yaml file 수정 <만일, Endurance의 IOPS도 변경했다면 storage-class도 변경할 것>

아래 3개의 부분을 증설된 용량으로 변경해서 저장

metadata > annotation > kubectl.kubernetes.io/last-applied-configuration

spec > resources > requests > storage

status > capacity > storage

$ vi <저장한 PVC filename>.yaml
...
    kubectl.kubernetes.io/last-applied-configuration: |
      {"apiVersion":"v1","kind":"PersistentVolumeClaim","metadata":{"annotations":{"kubernetes.io/change-cause":"kubectl apply --filename=k8s/prod/pvc.yaml --namespace=zcp-system --record=true","volume.beta.kubernetes.io/storage-class":"ibmc-block-retain-bronze"},"labels":{"billingType":"monthly"},"name":"pvc-test","namespace":"zcp-system"},"spec":{"accessModes":["ReadWriteOnce"],"resources":{"requests":{"storage":"30Gi"}}}}
...
spec:
...
  resources:
    requests:
      storage: 20Gi
...
status:
...
  capacity:
    storage: 30Gi
...

3. PVC Delete

$ kubectl delete pvc --force --grace-period=0 <PVC name>

4. PV 수정 <만일, Endurance의 IOPS도 변경했다면 storage-class도 변경할 것>

아래 2개의 부분을 증설된 용량으로 변경해서 저장합니다.

labels > CapacityGb

spec > capacity > storage

claimRef 부분은 삭제

$ kubectl edit pv <PV name>
...
  labels:
    CapacityGb: "30"
...
spec:
...
  capacity:
    storage: 30Gi
...

5. PV patch

$ kubectl patch pv <PV name> -p '{"metadata": {"annotations":{"ibm.io/autofix-resizefs":"true"}}}'

6. PVC create

Backup해둔 PVC yaml로 PVC를 생성합니다.

$ kubectl create -f <저장한 PVC filename>.yaml

[PV의 Reclaim Policy가 Delete인 경우] 

<주의> 아래 순서대로가 아닌 PVC를 먼저 삭제하게 되면 Storage가 삭제됨

1. PV, PVC backup

$ kubectl get pv <PV name> -o yaml > <저장하고자 하는 filename>.yaml

$ kubectl get pvc <PVC name> -o yaml > <저장하고자 하는 filename>.yaml

2. PV yaml 수정 <만일, Endurance의 IOPS도 변경했다면 storage-class도 변경할 것>

아래 2개의 부분을 증설된 용량으로 변경해서 저장합니다.

labels > CapacityGb

spec > capacity > storage

claimRef 부분은 삭제

$ vi <저장한 PV filename>.yaml
...
  labels:
    CapacityGb: "30"
...
spec:
...
  capacity:
    storage: 30Gi
...
  1. PVC yaml file 수정 <만일, Endurance의 IOPS도 변경했다면 storage-class도 변경할 것>

아래 3개의 부분을 증설된 용량으로 변경해서 저장합니다.

metadata > annotation > kubectl.kubernetes.io/last-applied-configuration

spec > resources > requests > storage

status > capacity > storage

$ vi <저장한 PVC filename>.yaml
...
    kubectl.kubernetes.io/last-applied-configuration: |
      {"apiVersion":"v1","kind":"PersistentVolumeClaim","metadata":{"annotations":{"kubernetes.io/change-cause":"kubectl apply --filename=k8s/prod/pvc.yaml --namespace=zcp-system --record=true","volume.beta.kubernetes.io/storage-class":"ibmc-block-bronze"},"labels":{"billingType":"monthly"},"name":"pvc-test","namespace":"zcp-system"},"spec":{"accessModes":["ReadWriteOnce"],"resources":{"requests":{"storage":"30Gi"}}}}...
spec:
...
  resources:
    requests:
      storage: 20Gi
...
status:
...
  capacity:
    storage: 20Gi
...

3. PV Delete

$ kubectl delete pv --force --grace-period=0 <PV name>

# 만일 위의 명령어 실행 후에도 상태가 Terminating가 계속 된다면 아래 patch 실행
$ kubectl patch pv <pvc name> -p '{"metadata":{"finalizers":null}}'

4. PVC Delete

$ kubectl delete pvc --force --grace-period=0 <PVC name>

5. PV create

Backup해둔 PV yaml로 PV를 생성합니다.

$ kubectl create -f <저장한 PV filename>.yaml

6. PVC create

Backup해둔 PVC yaml로 PVC를 생성합니다.

$ kubectl create -f <저장한 PVC filename>.yaml

7. PV patch

$ kubectl patch pv <PV name> -p '{"metadata": {"annotations":{"ibm.io/autofix-resizefs":"true"}}}'

kubectl에서의 용량 증설 방법

PVC에서 용량 증설

변경하고자 하는 PV의 PVC를 편집으로 연 후에 용량(5GB)을 증설하는 용량(6GB)으로 변경 후 저장합니다.

$ kubectl edit pvc zcp-oidc-postgresql
apiVersion: v1
kind: PersistentVolumeClaim
...
spec:
...
  resources:
    requests:
      storage: 5Gi
...

증설한 용량으로 변경이 되었는지 확인

kubectl CLI로 확인

  • PVC 용량 확인

$ kubectl get pvc -w
NAME                                                    STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS               AGE
elasticsearch-data-test-elasticsearch-data-test-0       Bound    pvc-xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx   200Gi      RWO            ibmc-block-retain-silver   21h
elasticsearch-data-test-elasticsearch-data-test-1       Bound    pvc-xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx   200Gi      RWO            ibmc-block-retain-silver   21h
elasticsearch-data-test-elasticsearch-data-test-2       Bound    pvc-xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx   200Gi      RWO            ibmc-block-retain-silver   21h
elasticsearch-data-test-elasticsearch-data-test-2       Bound    pvc-xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx   220Gi      RWO            ibmc-block-retain-silver   21h
  • PV 용량 확인

$ kubectl get pv
NAME                                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM                                                              STORAGECLASS               REASON   AGE
pvc-xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx   220Gi      RWO            Retain           Bound       zcp-system/elasticsearch-data-test-elasticsearch-data-test-2       ibmc-block-retain-silver            21h
  • 연결된 pod 재시작

  • pod에 들어가서 변경된 용량이 적용되었는지 확인합니다.

$ kubectl exec -it elasticsearch-data-test-2 bash
[root@elasticsearch-data-test-2 elasticsearch]# df -h
Filesystem                                     Size  Used Avail Use% Mounted on
...
/dev/mapper/3600a09803830446d463f4c454857636c  216G   60M  216G   1% /usr/share/elasticsearch/data
...

참고페이지

https://kubernetes.io/blog/2018/07/12/resizing-persistent-volumes-using-kubernetes/

https://kubernetes.io/docs/concepts/storage/persistent-volumes/#expanding-persistent-volumes-claims

AWS의 File Storage 용량 증설 방법

따로 증설할 필요가 없습니다.

AWS에서는 file Storage가 각각의 PV로 생성되는 것이 아니라 하나의 EFS를 생성하는 방식입니다.

file stroage를 생성하게 되면 EFS 안에 폴더가 생성되고, 생성 시 설정한 용량을 넘어서게 되면 늘어난 용량으로 자동적으로 증설됩니다. 참고로 EFS 전체 용량을 기준으로 과금 됩니다.

Azure

Azure의 Block Storage 용량 증설 방법

<주의> 용량 증설 전에 PV와 연결된 pod이 있으면 먼저 종료해주셔야 합니다.

1. Azure Console(https://portal.azure.com/ )에서 Resource groups → AKS resource group선택 → PV name로 검색 후 선택 → 용량을 확인 하시기 바랍니다.

2. Settings 하위 Size + performance를 클릭하십시오.

disk size를 변경을 원하는 용량으로 수정한 후 [Resize] 버튼을 클릭하십시오.

<주의> 사용 중인 disk 공간의 양에 관계없이 provisioning된 disk에 대해 동일한 요금이 청구됩니다.

예를 들어 200GiB disk는 256GiB disk에 provisioning되므로 provisioning 된 256GiB에 대해 비용이 청구됩니다.

3. 변경이 완료되었다는 메시지를 확인합니다.

4. Overview에서 변경된 용량을 확인합니다.

시작 전에 종료 했던 PV와 연결된 pod이 있으시면 재기동을 해주시기 바랍니다.

PV와 PVC에 정의된 용량을 증설된 용량으로 표시되도록 변경

이 방법은 kubectl get pv나 kubectl get pvc로 확인하였을 때 증설된 용량으로 보이게 하기 위해서 필요합니다.

예전 용량으로 보이셔도 상관없다면 수행하지 않으셔도 됩니다.

[PV의 Reclaim Policy가 Retain인 경우]

1. PVC Backup

해당 PV의 PVC를 backup 합니다.

$ kubectl get pvc <PVC name> -o yaml > <저장하고자 하는 filename>.yaml

2. PVC yaml file 수정 <만일, Endurance의 IOPS도 변경했다면 storage-class도 변경할 것>

아래 3개의 부분을 증설된 용량으로 변경해서 저장

metadata > annotation > kubectl.kubernetes.io/last-applied-configuration

spec > resources > requests > storage

status > capacity > storage

$ vi <저장한 PVC filename>.yaml
...
    kubectl.kubernetes.io/last-applied-configuration: |
      {"apiVersion":"v1","kind":"PersistentVolumeClaim","metadata":{"annotations":{"kubernetes.io/change-cause":"kubectl apply --filename=k8s/prod/pvc.yaml --namespace=zcp-system --record=true","volume.beta.kubernetes.io/storage-class":"ibmc-block-retain-bronze"},"labels":{"billingType":"monthly"},"name":"pvc-test","namespace":"zcp-system"},"spec":{"accessModes":["ReadWriteOnce"],"resources":{"requests":{"storage":"30Gi"}}}}
...
spec:
...
  resources:
    requests:
      storage: 20Gi
...
status:
...
  capacity:
    storage: 30Gi
...

3. PVC Delete

$ kubectl delete pvc --force --grace-period=0 <PVC name>

4. PV 수정 <만일, Endurance의 IOPS도 변경했다면 storage-class도 변경할 것>

아래 2개의 부분을 증설된 용량으로 변경해서 저장합니다.

labels > CapacityGb

spec > capacity > storage

claimRef 부분은 삭제

$ kubectl edit pv <PV name>
...
  labels:
    CapacityGb: "30"
...
spec:
...
  capacity:
    storage: 30Gi
...

5. PV patch

$ kubectl patch pv <PV name> -p '{"metadata": {"annotations":{"ibm.io/autofix-resizefs":"true"}}}'

6. PVC create

Backup해둔 PVC yaml로 PVC를 생성합니다.

$ kubectl create -f <저장한 PVC filename>.yaml

[PV의 Reclaim Policy가 Delete인 경우] 

<주의> 아래 순서대로가 아닌 PVC를 먼저 삭제하게 되면 Storage가 삭제됨

1. PV, PVC backup

$ kubectl get pv <PV name> -o yaml > <저장하고자 하는 filename>.yaml

$ kubectl get pvc <PVC name> -o yaml > <저장하고자 하는 filename>.yaml

2. PV yaml 수정 <만일, Endurance의 IOPS도 변경했다면 storage-class도 변경할 것>

아래 2개의 부분을 증설된 용량으로 변경해서 저장합니다.

labels > CapacityGb

spec > capacity > storage

claimRef 부분은 삭제

$ vi <저장한 PV filename>.yaml
...
  labels:
    CapacityGb: "30"
...
spec:
...
  capacity:
    storage: 30Gi
...

3. PVC yaml file 수정 <만일, Endurance의 IOPS도 변경했다면 storage-class도 변경할 것>

아래 3개의 부분을 증설된 용량으로 변경해서 저장합니다.

metadata > annotation > kubectl.kubernetes.io/last-applied-configuration

spec > resources > requests > storage

status > capacity > storage

$ vi <저장한 PVC filename>.yaml
...
    kubectl.kubernetes.io/last-applied-configuration: |
      {"apiVersion":"v1","kind":"PersistentVolumeClaim","metadata":{"annotations":{"kubernetes.io/change-cause":"kubectl apply --filename=k8s/prod/pvc.yaml --namespace=zcp-system --record=true","volume.beta.kubernetes.io/storage-class":"ibmc-block-bronze"},"labels":{"billingType":"monthly"},"name":"pvc-test","namespace":"zcp-system"},"spec":{"accessModes":["ReadWriteOnce"],"resources":{"requests":{"storage":"30Gi"}}}}...
spec:
...
  resources:
    requests:
      storage: 20Gi
...
status:
...
  capacity:
    storage: 20Gi
...

4. PV Delete

$ kubectl delete pv --force --grace-period=0 <PV name>

# 만일 위의 명령어 실행 후에도 상태가 Terminating가 계속 된다면 아래 patch 실행
$ kubectl patch pv <pvc name> -p '{"metadata":{"finalizers":null}}'

5. PVC Delete

$ kubectl delete pvc --force --grace-period=0 <PVC name>

6. PV create

Backup해둔 PV yaml로 PV를 생성합니다.

$ kubectl create -f <저장한 PV filename>.yaml

7. PVC create

Backup해둔 PVC yaml로 PVC를 생성합니다.

$ kubectl create -f <저장한 PVC filename>.yaml

8. PV patch

$ kubectl patch pv <PV name> -p '{"metadata": {"annotations":{"ibm.io/autofix-resizefs":"true"}}}'

Azure의 File Storage 용량 증설 방법

<참고> Block Stroage도 아래 방법으로 증설이 가능합니다.

PVC에서 용량 증설

변경하고자 하는 PV의 PVC를 편집으로 연 후에 용량(20GB)을 증설하는 용량(22GB)으로 변경 후 저장합니다.

$ kubectl edit pvc elasticsearch-data-elasticsearch-data-2
apiVersion: v1
kind: PersistentVolumeClaim
...
spec:
...
  resources:
    requests:
      storage: 200Gi
...

증설한 용량으로 변경이 되었는지 확인

kubectl CLI로 확인

  • PVC 용량 확인

$ kubectl get pvc
NAME                                                    STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS               AGE
...
zcp-git-gitea                                  Bound     pvc-4b3376db-4961-42a5-9b66-8b336372e744   22Gi       RWX            file-standard              448d
...
  • PV 용량 확인

$ kubectl get pv
NAME                                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM                                                              STORAGECLASS               REASON   AGE
pvc-xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx   220Gi      RWO            Retain           Bound       zcp-system/elasticsearch-data-test-elasticsearch-data-test-2       ibmc-block-retain-silver            21h
  • pod에 들어가서 확인합니다.

bash-5.0# df -h
Filesystem                                     Size  Used Avail Use% Mounted on
...
//f8dc90c65c805484399c8b0.file.core.windows.net/kubernetes-dynamic-pvc-4b3376db-4961-42a5-9b66-8b336372e744
                         22.0G     64.0K     22.0G   0% /data
...

IBM

증설하고자 하는 PV의 storage class에 allowVolumeExpansion 설정이 되어 있는지 확인합니다.

allowVolumeExpansion: true

$ kubectl get storageclass ibmc-block-bronze -o yaml
allowVolumeExpansion: true
apiVersion: storage.k8s.io/v1
kind: StorageClass
...

allowVolumeExpansion 설정이 되어 있을 경우의 증설방법

PVC에서 용량 증설

증설하고자 하는 PV의 PVC를 편집으로 연 후에 용량(200GB)을 증설하는 용량(220GB)으로 변경 후 저장합니다.

$ kubectl edit pvc elasticsearch-data-elasticsearch-data-2
apiVersion: v1
kind: PersistentVolumeClaim
...
spec:
...
  resources:
    requests:
      storage: 200Gi
...

증설한 용량으로 변경이 되었는지 확인

kubectl CLI로 확인

  • PVC 용량 확인

$ kubectl get pvc -w
NAME                                                    STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS               AGE
elasticsearch-data-test-elasticsearch-data-test-0       Bound    pvc-xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx   200Gi      RWO            ibmc-block-retain-silver   21h
elasticsearch-data-test-elasticsearch-data-test-1       Bound    pvc-xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx   200Gi      RWO            ibmc-block-retain-silver   21h
elasticsearch-data-test-elasticsearch-data-test-2       Bound    pvc-xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx   200Gi      RWO            ibmc-block-retain-silver   21h
elasticsearch-data-test-elasticsearch-data-test-2       Bound    pvc-xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx   220Gi      RWO            ibmc-block-retain-silver   21h
  • PV 용량 확인

$ kubectl get pv
NAME                                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM                                                              STORAGECLASS               REASON   AGE
pvc-xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx   220Gi      RWO            Retain           Bound       zcp-system/elasticsearch-data-test-elasticsearch-data-test-2       ibmc-block-retain-silver            21h
  • pod에 들어가서 확인합니다.

$ kubectl exec -it elasticsearch-data-test-2 bash
[root@elasticsearch-data-test-2 elasticsearch]# df -h
Filesystem                                     Size  Used Avail Use% Mounted on
...
/dev/mapper/3600a09803830446d463f4c454857636c  216G   60M  216G   1% /usr/share/elasticsearch/data
...

IBM console에서 확인

1. PV의 VolumeID를 확인

$ kubectl get pv -o yaml pvc-b4e6876b-011c-48c1-9a9b-d84172078d8f
apiVersion: v1
kind: PersistentVolume
...
spec:
...
  flexVolume:
...
    options:
...
      VolumeID: "131379026"
...

2. IBM console에서 변경된 용량 확인

allowVolumeExpansion 설정이 안 되어 있을 경우의 증설방법

IBM console에서 용량 변경

1. IBM Cloud™ 콘솔(https://cloud.ibm.com)에서 클래식 인프라(Classic Infrastructure) > Storage > Block Storage를 클릭하십시오.

2. 목록에서 LUN(Logical Unit Number)을 선택하고 조치 > LUN 수정(Mdify LUN)을 클릭하십시오.

3. GB 단위로 새 스토리지 크기를 입력하십시오.

현재 PV size보다 크게만 설정 가능하고, 최대 12,000GB(12TB)까지 증설 가능합니다.

4. 선택사항 및 새 가격을 검토하십시오.

현재 PV에 적용된 storage class를 변경할 수 있습니다.

5. 마스터 서비스 계약을 읽었습니다... 선택란을 클릭하고 주문하기를 클릭하십시오.

6. 5분 정도 후에 변경된 용량으로 적용 되었는지 확인하시기 바랍니다.

증설 후 Pod의 용량 변경

위의 작업들을 하게 되면 실제 strorage는 용량이 증설되었지만, 연결해서 사용하고 있는 pod에는 예전 용량으로 표시됩니다.

해당 PV에 아래 patch를 적용하고, 연결된 pod을 재기동 하시면 증설된 용량으로 연결됩니다.

$ kubectl patch pv <PV name> -p '{"metadata": {"annotations":{"ibm.io/autofix-resizefs":"true"}}}'

PV와 PVC에 정의된 용량을 증설된 용량으로 표시되도록 변경

이 방법은 kubectl get pv나 kubectl get pvc로 확인하였을 때 증설된 용량으로 보이게 하기 위해서 필요합니다.

예전 용량으로 보이셔도 상관없다면 수행하지 않으셔도 됩니다.

[PV의 Reclaim Policy가 Retain인 경우]

1. PVC Backup

해당 PV의 PVC를 backup 합니다.

$ kubectl get pvc <PVC name> -o yaml > <저장하고자 하는 filename>.yaml

2. PVC yaml file 수정 <만일, Endurance의 IOPS도 변경했다면 storage-class도 변경할 것>

아래 3개의 부분을 증설된 용량으로 변경해서 저장

metadata > annotation > kubectl.kubernetes.io/last-applied-configuration

spec > resources > requests > storage

status > capacity > storage

$ vi <저장한 PVC filename>.yaml
...
    kubectl.kubernetes.io/last-applied-configuration: |
      {"apiVersion":"v1","kind":"PersistentVolumeClaim","metadata":{"annotations":{"kubernetes.io/change-cause":"kubectl apply --filename=k8s/prod/pvc.yaml --namespace=zcp-system --record=true","volume.beta.kubernetes.io/storage-class":"ibmc-block-retain-bronze"},"labels":{"billingType":"monthly"},"name":"pvc-test","namespace":"zcp-system"},"spec":{"accessModes":["ReadWriteOnce"],"resources":{"requests":{"storage":"30Gi"}}}}
...
spec:
...
  resources:
    requests:
      storage: 20Gi
...
status:
...
  capacity:
    storage: 30Gi
...

3. PVC Delete

$ kubectl delete pvc --force --grace-period=0 <PVC name>

4. PV 수정 <만일, Endurance의 IOPS도 변경했다면 storage-class도 변경할 것>

아래 2개의 부분을 증설된 용량으로 변경해서 저장합니다.

labels > CapacityGb

spec > capacity > storage

claimRef 부분은 삭제

$ kubectl edit pv <PV name>
...
  labels:
    CapacityGb: "30"
...
spec:
...
  capacity:
    storage: 30Gi
...

5. PV patch

$ kubectl patch pv <PV name> -p '{"metadata": {"annotations":{"ibm.io/autofix-resizefs":"true"}}}'

6. PVC create

Backup해둔 PVC yaml로 PVC를 생성합니다.

$ kubectl create -f <저장한 PVC filename>.yaml

[PV의 Reclaim Policy가 Delete인 경우] 

<주의> 아래 순서대로가 아닌 PVC를 먼저 삭제하게 되면 Storage가 삭제됨

1. PV, PVC backup

$ kubectl get pv <PV name> -o yaml > <저장하고자 하는 filename>.yaml

$ kubectl get pvc <PVC name> -o yaml > <저장하고자 하는 filename>.yaml

2. PV yaml 수정 <만일, Endurance의 IOPS도 변경했다면 storage-class도 변경할 것>

아래 2개의 부분을 증설된 용량으로 변경해서 저장합니다.

labels > CapacityGb

spec > capacity > storage

claimRef 부분은 삭제

$ vi <저장한 PV filename>.yaml
...
  labels:
    CapacityGb: "30"
...
spec:
...
  capacity:
    storage: 30Gi
...

3. PVC yaml file 수정 <만일, Endurance의 IOPS도 변경했다면 storage-class도 변경할 것>

아래 3개의 부분을 증설된 용량으로 변경해서 저장합니다.

metadata > annotation > kubectl.kubernetes.io/last-applied-configuration

spec > resources > requests > storage

status > capacity > storage

$ vi <저장한 PVC filename>.yaml
...
    kubectl.kubernetes.io/last-applied-configuration: |
      {"apiVersion":"v1","kind":"PersistentVolumeClaim","metadata":{"annotations":{"kubernetes.io/change-cause":"kubectl apply --filename=k8s/prod/pvc.yaml --namespace=zcp-system --record=true","volume.beta.kubernetes.io/storage-class":"ibmc-block-bronze"},"labels":{"billingType":"monthly"},"name":"pvc-test","namespace":"zcp-system"},"spec":{"accessModes":["ReadWriteOnce"],"resources":{"requests":{"storage":"30Gi"}}}}...
spec:
...
  resources:
    requests:
      storage: 20Gi
...
status:
...
  capacity:
    storage: 20Gi
...

4. PV Delete

$ kubectl delete pv --force --grace-period=0 <PV name>

# 만일 위의 명령어 실행 후에도 상태가 Terminating가 계속 된다면 아래 patch 실행
$ kubectl patch pv <pvc name> -p '{"metadata":{"finalizers":null}}'

5. PVC Delete

$ kubectl delete pvc --force --grace-period=0 <PVC name>

6. PV create

Backup해둔 PV yaml로 PV를 생성합니다.

$ kubectl create -f <저장한 PV filename>.yaml

7. PVC create

Backup해둔 PVC yaml로 PVC를 생성합니다.

$ kubectl create -f <저장한 PVC filename>.yaml

8. PV patch

$ kubectl patch pv <PV name> -p '{"metadata": {"annotations":{"ibm.io/autofix-resizefs":"true"}}}'

이 답변이 유용합니까? 아니오

Send feedback
도움이 되어드리지 못해 죄송합니다. 아티클 개선을 위해 의견을 제공해 주시기 바랍니다.