Thursday, November 21, 2024

Xử lý khi PersistentVolume (pv) và PersistentVolumeClaim (pvc) bị kẹt

-

Nếu các PersistentVolume (pv) và PersistentVolumeClaim (pvc) đang ở trạng thái Terminating, có thể do một số đối tượng khác đang sử dụng chúng. Để xoá các đối tượng này, bạn cần xoá các đối tượng đang sử dụng pv và pvc trước khi xoá chúng.

Để kiểm tra xem các đối tượng nào đang sử dụng pv và pvc, bạn có thể sử dụng lệnh sau:

kubectl describe pv <pv-name>
kubectl describe pvc <pvc-name>

Sau đó, hãy kiểm tra các đối tượng đang sử dụng pv và pvc. Ví dụ, nếu một Pod đang sử dụng pv, hãy xoá Pod đó trước khi xoá pv. Tương tự, nếu một đối tượng đang sử dụng pvc, hãy xoá đối tượng đó trước khi xoá pvc.

Nếu pv và pvc vẫn không thể xoá được vì một số lý do khác, bạn có thể sử dụng tham số --force khi thực hiện lệnh xoá để bỏ qua trạng thái hiện tại của pv và pvc và xoá chúng bằng mọi giá.

kubectl delete pv <pv-name> --force
kubectl delete pvc <pvc-name> --force

Tuy nhiên, hãy cẩn thận khi sử dụng tham số --force vì điều này có thể dẫn đến mất dữ liệu. Ví dụ tôi có một persistent volume và persistent volume claim bị kẹt ở trạng thái Terminating không thể xoá được như dưới.

$ kubectl get pv,pvc -A
NAME                                 CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS        CLAIM                            STORAGECLASS    REASON   AGE
persistentvolume/jenkins-pv-volume   20Gi       RWX            Retain           Terminating   devops-tools/jenkins-pv-claim    local-storage            7h47m
persistentvolume/website-mysql-pv    5Gi        RWO            Retain           Bound         wiki-hoanghd/website-mysql-pvc   website-mysql            7h44m
persistentvolume/website-wp-pv       5Gi        RWX            Retain           Bound         wiki-hoanghd/website-wp-pvc      website-wp               7h44m

NAMESPACE      NAME                                      STATUS        VOLUME              CAPACITY   ACCESS MODES   STORAGECLASS    AGE
devops-tools   persistentvolumeclaim/jenkins-pv-claim    Terminating   jenkins-pv-volume   20Gi       RWX            local-storage   7h47m
wiki-hoanghd   persistentvolumeclaim/website-mysql-pvc   Bound         website-mysql-pv    5Gi        RWO            website-mysql   7h44m
wiki-hoanghd   persistentvolumeclaim/website-wp-pvc      Bound         website-wp-pv       5Gi        RWX            website-wp      7h44m

Tôi dùng lệnh kubectl describe pv jenkins-pv-volume để kiểm tra xem persistent volume có tên jenkins-pv-volume đang được sử dụng bởi devops-tools/jenkins-pv-claim (tức là jenkins-pv-claim nằm ở namespace devops-tools). Điều này là chính xác do persistent volume có tên jenkins-pv-volume cũng đang bị kẹt ở trạng thái Terminating.

$ kubectl describe pv jenkins-pv-volume
Name:            jenkins-pv-volume
Labels:          app=devops-tools
                 app.kubernetes.io/instance=jenkins-master
                 type=local
Annotations:     <none>
Finalizers:      [kubernetes.io/pv-protection external-attacher/driver-longhorn-io]
StorageClass:    local-storage
Status:          Terminating (lasts 7h37m)
Claim:           devops-tools/jenkins-pv-claim
Reclaim Policy:  Retain
Access Modes:    RWX
VolumeMode:      Filesystem
Capacity:        20Gi
Node Affinity:   <none>
Message:         
Source:
    Type:              CSI (a Container Storage Interface (CSI) volume source)
    Driver:            driver.longhorn.io
    FSType:            ext4
    VolumeHandle:      jenkins-pv-volume
    ReadOnly:          false
    VolumeAttributes:      numberOfReplicas=2
Events:                <none>

Hãy truy kiểm tra xem persistent volume claim có tên jenkins-pv-claim đang được sử dụng bởi các pod nào bằng lệnh kubectl describe persistentvolumeclaim/jenkins-pv-claim -n devops-tools. Kết quả cho thấy rằng persistent volume claim có tên jenkins-pv-claim đang được sử dụng bởi pod jenkins-56ff8d9d54-b9dpb.

$ kubectl describe persistentvolumeclaim/jenkins-pv-claim -n devops-tools
Name:          jenkins-pv-claim
Namespace:     devops-tools
StorageClass:  local-storage
Status:        Terminating (lasts 7h40m)
Volume:        jenkins-pv-volume
Labels:        app=devops-tools
               app.kubernetes.io/instance=jenkins-master
Annotations:   pv.kubernetes.io/bind-completed: yes
Finalizers:    [kubernetes.io/pvc-protection]
Capacity:      20Gi
Access Modes:  RWX
VolumeMode:    Filesystem
Used By:       jenkins-56ff8d9d54-b9dpb
Events:        <none>

Như vậy khi dùng lệnh kubectl get po -n <namespace> bạn sẽ thấy jenkins-56ff8d9d54-b9dpb đang kẹt ở trạng thái ContainerCreating hơn 7 tiếng nhưng chưa tạo thành công.

$ kubectl get po -n devops-tools
NAMESPACE              NAME                                                READY   STATUS              RESTARTS     AGE
devops-tools           jenkins-56ff8d9d54-b9dpb                            0/1     ContainerCreating   0            7h46m

Tôi tiến hành xoá pod jenkins-56ff8d9d54-b9dpb bằng lệnh kubectl delete -f deployment.yaml chứa thông tin đã triển khai pod jenkins-56ff8d9d54-b9dpb

$ kubectl delete -f deployment.yaml 
deployment.apps "jenkins" deleted

Kết quả khi dùng lệnh kubectl get pv,pvc -A list lại các persistent volume và persistent volume claim, bạn đã thấy chúng đã biến mất.

$ kubectl get pv,pvc -A
NAME                                CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                            STORAGECLASS    REASON   AGE
persistentvolume/website-mysql-pv   5Gi        RWO            Retain           Bound    wiki-hoanghd/website-mysql-pvc   website-mysql            7h48m
persistentvolume/website-wp-pv      5Gi        RWX            Retain           Bound    wiki-hoanghd/website-wp-pvc      website-wp               7h48m

NAMESPACE      NAME                                      STATUS   VOLUME             CAPACITY   ACCESS MODES   STORAGECLASS    AGE
wiki-hoanghd   persistentvolumeclaim/website-mysql-pvc   Bound    website-mysql-pv   5Gi        RWO            website-mysql   7h48m
wiki-hoanghd   persistentvolumeclaim/website-wp-pvc      Bound    website-wp-pv      5Gi        RWX            website-wp      7h48m

LEAVE A REPLY

Please enter your comment!
Please enter your name here

4,956FansLike
256FollowersFollow
223SubscribersSubscribe
spot_img

Related Stories