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