Kubernetes: невозможно удалить PersistentVolumeClaim (pvc)

Я создал следующий постоянный том, вызвав

kubectl create -f nameOfTheFileContainingTheFollowingContent.yaml

apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv-monitoring-static-content
spec:
  capacity:
    storage: 100Mi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: "/some/path"

---

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pv-monitoring-static-content-claim
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: ""
  resources:
    requests:
      storage: 100Mi

После этого попробовал удалить пвх. Но эта команда прижилась. при звонке kubectl describe pvc pv-monitoring-static-content-claim получаю следующий результат

Name:          pv-monitoring-static-content-claim
Namespace:     default
StorageClass:
Status:        Terminating (lasts 5m)
Volume:        pv-monitoring-static-content
Labels:        <none>
Annotations:   pv.kubernetes.io/bind-completed=yes
               pv.kubernetes.io/bound-by-controller=yes
Finalizers:    [foregroundDeletion]
Capacity:      100Mi
Access Modes:  RWO
Events:        <none>

И для kubectl describe pv pv-monitoring-static-content

Name:            pv-monitoring-static-content
Labels:          <none>
Annotations:     pv.kubernetes.io/bound-by-controller=yes
Finalizers:      [kubernetes.io/pv-protection foregroundDeletion]
StorageClass:
Status:          Terminating (lasts 16m)
Claim:           default/pv-monitoring-static-content-claim
Reclaim Policy:  Retain
Access Modes:    RWO
Capacity:        100Mi
Node Affinity:   <none>
Message:
Source:
    Type:          HostPath (bare host directory volume)
    Path:          /some/path
    HostPathType:
Events:            <none>

Нет запущенного модуля, использующего постоянный том. Может ли кто-нибудь мне подсказать, почему пвх и пв не удаляются?


person Yannic Klem    schedule 16.07.2018    source источник


Ответы (11)


Это происходит, когда постоянный том защищен. Вы должны иметь возможность проверить это:

Команда:

kubectl describe pvc PVC_NAME | grep Finalizers

Выход:

Finalizers: [kubernetes.io/pvc-protection]

Вы можете исправить это, установив для финализаторов значение null, используя kubectl patch:

kubectl patch pvc PVC_NAME -p '{"metadata":{"finalizers": []}}' --type=merge

Ref; Защищенный объект хранилища

person Xiak    schedule 17.05.2019
comment
Это должен был быть выбранный ответ. Объясняет причину проблемы и краткий подход к ее устранению. - person codersofthedark; 26.06.2019
comment
это решение работает лучше, чем решение для редактирования через корпоративные брандмауэры - person jacktrade; 27.09.2019
comment
Это должно было быть выбрано в качестве ответа - person Nithya; 21.02.2020
comment
@codersofthedark не объясняет причину. Конечно охраняется. Об этом я уже говорил в своем вопросе. Но громкость не использовалась ни одним Pod = ›защита не должна иметь никакого эффекта. - person Yannic Klem; 27.02.2020
comment
У меня возникла эта проблема, и когда я попробовал указанную выше команду для исправления ПВХ, продолжал получать ошибку unable to parse "'{metadata:{finalizers:": yaml: found unexpected end of stream - person phydeauxman; 20.03.2020
comment
в моем случае PVCs защищены, потому что я удалил только StatefulSet, а не базовые pod'ы, поэтому PVCs все еще используются Pods, поэтому он находится в фазе TERMINATING - person DiveInto; 17.06.2020
comment
Я на GKE и что-то вроде сразу ставит финализатор обратно. : / - person weberc2; 05.03.2021

Я не уверен, почему это произошло, но после удаления финализаторов pv и pvc через панель управления kubernetes оба были удалены. Это произошло снова после повторения шагов, описанных в моем вопросе. Похоже на ошибку.

person Yannic Klem    schedule 17.07.2018
comment
У меня была аналогичная проблема: PVC не хотел умирать, и из-за этого проект навсегда находился в состоянии завершения. Я сделал oc edit pvc/protected-pvc -n myproject и удалил эти две строчки о финализаторах. И ПВХ, и проекты сразу исчезли. Я согласен, что это, вероятно, ошибка, потому что она не должна так себя вести. В этом проекте у меня не было запущенных модулей, только этот PVC. - person Pavel Anni; 30.08.2018
comment
Я только что столкнулся с той же проблемой, и это тоже решение для меня ... удалите ограничения. Это не благодарственный комментарий. Скорее, я добавляю это, потому что прошло 7+ месяцев, и эта проблема, похоже, все еще существует в дикой природе, и подумал, что новым читателям может быть полезно узнать об этом. Я использую последнюю версию minikube (установленную и построенную всего несколько дней назад) за обновленным Docker для Mac. - person CryptoFool; 06.04.2019
comment
... Я следую онлайн-руководству. Я не знаю, связано ли это с этой ошибкой, но поведение, которое я получаю, отличается от поведения инструктора. Он создает новый PVC, и его состояние изначально Pending. Только когда он вручную создает PV, состояние PVC становится связанным. В моем случае кажется, что создание PVC с помощью той же команды, которую он выполняет, немедленно создает PV для использования выделенного хранилища PVC. Кто-нибудь знает, почему это? - person CryptoFool; 06.04.2019
comment
Поскольку ответ, на мой взгляд, неполный (без объяснения шагов решения для laics) - вы можете удалить финализаторы на панели инструментов в YAML определенного PV. Кроме того, вы можете сделать это в терминале: kubectl patch pvc NAME -p '{"metadata":{"finalizers":null}}', kubectl patch pod NAME -p '{"metadata":{"finalizers":null}}'. Источник github.com/kubernetes/kubernetes/issues/ - person Uliysess; 25.07.2019
comment
Уже упоминалось в другом ответе: stackoverflow.com/a/56182934/2576531 - person Yannic Klem; 26.07.2019

Вы можете избавиться от редактирования вашего пвх! Снять защиту ПВХ.

  1. kubectl edit pvc YOUR_PVC -n ПРОБЕЛ_ИМЯ
  2. Вручную отредактируйте и поместите # перед этой строкой  введите описание изображения здесь
  3. Все пв и пвх будут удалены
person Ali Atakan    schedule 05.06.2019
comment
Этот комментарий помог мне удалить том, который зависал в состоянии завершения. Благодарю. - person Rakesh Gupta; 05.06.2019

PV защищен. Удалите PV перед удалением PVC. Кроме того, удалите все модули / развертывания, которые заявляют права на любой из упомянутых PVC. Для получения дополнительной информации ознакомьтесь с Используемый объект хранилища Защита

person georgekuruvillak    schedule 16.07.2018
comment
Пытался удалить оба. ПВХ и ПВХ. Как вы можете видеть в описании вывода, оба находятся в состоянии завершения. - person Yannic Klem; 16.07.2018
comment
Какую платформу вы используете? Вы пытались удалить с помощью kubectl create -f nameOfTheFileContainingTheFollowingContent.yaml? - person Vit; 17.07.2018

Для меня pv был в состоянии сохранения, поэтому выполнение вышеуказанных шагов не сработало.

Сначала нам нужно изменить состояние политики, как показано ниже:

kubectl patch pv PV_NAME -p '{"spec":{"persistentVolumeReclaimPolicy":"Delete"}}'

Затем удалите ПВХ, как показано ниже.

kubectl get pvc

kubectl delete pvc PVC_NAME

наконец, удалите pv с помощью

kubectl delete pv PV_NAME
person Bibek    schedule 19.05.2020
comment
Самый полезный комментарий здесь. Спасибо! - person wojcieh; 12.01.2021

Только что встретил эту проблему несколько часов назад.

Я удалил развертывания, в которых использовались эти ссылки, и PV / PVC автоматически завершились.

person akai    schedule 18.10.2018

Если PV все еще существует, это может быть связано с тем, что для ReclaimPolicy установлено значение Retain, и в этом случае он не будет удален, даже если PVC исчезнет. Из документов:

PersistentVolumes может иметь различные политики возврата, включая «Сохранить», «Переработать» и «Удалить». Для динамически подготовленных PersistentVolumes политикой восстановления по умолчанию является «Удалить». Это означает, что динамически подготовленный том автоматически удаляется, когда пользователь удаляет соответствующий PersistentVolumeClaim. Такое автоматическое поведение может быть неприемлемым, если том содержит ценные данные. В этом случае более целесообразно использовать политику «Сохранить». При использовании политики «Сохранить», если пользователь удаляет PersistentVolumeClaim, соответствующий PersistentVolume не удаляется. Вместо этого он перемещается в фазу выпуска, где все его данные могут быть восстановлены вручную.

person Anna Slastnikova    schedule 14.11.2018
comment
Recycle устарел - person Pentux; 01.02.2019

В моем случае, пока я удаляю модуль, связанный как с pv, так и с pvc, pv и pvc в статусе завершения исчезают

person j3ffyang    schedule 09.03.2019
comment
Нет запущенного модуля, который использует постоянный том - person Yannic Klem; 10.03.2019
comment
Я снова встретил эту проблему сегодня. 2 PV, без связанных Pod и PVC, при удалении навсегда переходили в состояние terminating. Чтобы исправить это, я запустил kubectl patch pv local-pv-324352d9 -n ops -p '{"metadata":{"finalizers": []}}' --type=merge Затем PV исчез. Спасибо @Xiak намек - person j3ffyang; 01.06.2019

в моем случае pvc не был удален из-за отсутствия пространства имен (я удалил пространство имен перед удалением всех ресурсов / pvc) решение: создать пространство имен с тем же именем, что и раньше, а затем я смог удалить finalizers и, наконец, pvc

person dansl1982    schedule 14.11.2019

Если вы уже удалили PV и пытаетесь удалить PVC

Проверьте, прикреплен ли том этой командой

kubectl get volumeattachment

Удаление ПВХ: -

Сначала вам нужно удалить pvc pne одним с помощью этой команды

kubectl delete pvc ‹pvc_name› --grace-period = 0 --force

Или вы можете удалить все PVC, используя

kubectl удалить pvc - все

Теперь вы можете увидеть статус PVC как завершающийся, используя

kubectl получить пвх

а затем вы должны применить это удаление, используя

kubectl patch pvc {PVC_NAME} -p '{metadata: {finalizers: null}}'

person Abhishek Deshmukh    schedule 17.12.2020

kubectl get pvc pvc_name -o yaml > pvcfile.yaml

Затем откройте pvcfile.yaml и удалите строку финализаторов, сохраните и примените:

kubectl apply -f pvcfile.yaml 
person wiem lim    schedule 10.06.2021
comment
Вместо двух команд это можно сделать как «kubectl edit pvc pvc_name», затем удалить раздел и сохранить. Кстати, согласно исходному вопросу, автор удалил PVC, но эта операция не удалась по другим причинам, как указано в приведенных выше ответах. - person Rajan Panneer Selvam; 10.06.2021