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>

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

Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
92
0
96 807
11
Перейти к ответу Данный вопрос помечен как решенный

Ответы 11

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

Пытался удалить оба. ПВХ и ПВХ. Как вы можете видеть в описании вывода, оба находятся в состоянии завершения.

Yannic Klem 16.07.2018 14:14

Какую платформу вы используете? Вы пробовали удалить с помощью kubectl create -f nameOfTheFileContainingTheFollowingContent.yaml?

Vit 17.07.2018 12:31

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

У меня была аналогичная проблема: PVC не хотел умирать и из-за этого проект навсегда находился в состоянии «Завершение». Я сделал oc edit pvc/protected-pvc -n myproject и удалил эти две строчки о финализаторах. И ПВХ, и проекты сразу исчезли. Я согласен, что это, вероятно, ошибка, потому что она не должна так себя вести. В этом проекте у меня не было запущенных модулей, только этот PVC.

Pavel Anni 30.08.2018 20:04

Я только что столкнулся с той же проблемой, и это тоже решение для меня ... удалите ограничения. Это не благодарственный комментарий. Скорее, я добавляю это, потому что прошло 7+ месяцев, а эта проблема, похоже, все еще существует в дикой природе, и подумал, что новым читателям может быть полезно узнать об этом. Я использую последний «миникуб» (установленный и собранный всего несколько дней назад) за обновленным «Докером для Mac».

CryptoFool 06.04.2019 22:36

... Я следую онлайн-руководству. Я не знаю, связано ли это с этой ошибкой, но поведение, которое я получаю, отличается от поведения инструктора. Он создает новый PVC, который изначально находится в состоянии «Ожидание». Только когда он вручную создает PV, состояние PVC становится "связанным". В моем случае кажется, что создание PVC с помощью той же команды, которую он выполняет, немедленно создает PV для использования выделенного хранилища PVC. Кто-нибудь знает, почему это?

CryptoFool 06.04.2019 22:41

Поскольку ответ, на мой взгляд, не является полным (без объяснения шагов решения для laics) - вы можете удалить финализаторы на панели инструментов в YAML определенного PV. Кроме того, вы можете сделать это в терминале: kubectl patch pvc NAME -p '{"metadata":{"finalizers":null}}', kubectl patch pod NAME -p '{"metadata":{"finalizers":null}}'. Источник github.com/kubernetes/kubernetes/issues/…

Uliysess 25.07.2019 14:33

Уже упоминалось в другом ответе: stackoverflow.com/a/56182934/2576531

Yannic Klem 26.07.2019 06:53

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

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

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

PersistentVolumes can have various reclaim policies, including “Retain”, “Recycle”, and “Delete”. For dynamically provisioned PersistentVolumes, the default reclaim policy is “Delete”. This means that a dynamically provisioned volume is automatically deleted when a user deletes the corresponding PersistentVolumeClaim. This automatic behavior might be inappropriate if the volume contains precious data. In that case, it is more appropriate to use the “Retain” policy. With the “Retain” policy, if a user deletes a PersistentVolumeClaim, the corresponding PersistentVolume is not be deleted. Instead, it is moved to the Released phase, where all of its data can be manually recovered

Recycle устарел
Pentux 01.02.2019 16:35

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

«Нет запущенного модуля, который использует постоянный том»

Yannic Klem 10.03.2019 05:41

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

j3ffyang 01.06.2019 04:26
Ответ принят как подходящий

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

Команда:

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; Защита используемого объекта хранения

Это должен был быть выбранный ответ. Объясняет причину проблемы и краткий подход к ее устранению.

codersofthedark 25.06.2019 23:30

это решение работает лучше, чем решение для редактирования через корпоративные брандмауэры

jacktrade 27.09.2019 15:15

Это должно было быть выбрано в качестве ответа

Nithya 21.02.2020 10:24

@codersofthedark не объясняет причину. Конечно охраняется. Об этом я уже говорил в своем вопросе. Но громкость не использовалась ни одним Pod => защита не должна иметь никакого эффекта.

Yannic Klem 27.02.2020 07:29

У меня возникла эта проблема, и когда я попытался выполнить приведенную выше команду для исправления ПВХ, продолжал получать ошибку unable to parse "'{metadata:{finalizers:": yaml: found unexpected end of stream

phydeauxman 20.03.2020 11:01

в моем случае PVC защищены, потому что я удалил только StatefulSet, а не базовые поды, поэтому PVC все еще используются подами, поэтому он находится в фазе TERMINATING

DiveInto 17.06.2020 03:42

Я на GKE и что-то вроде сразу ставит финализатор обратно. : /

weberc2 05.03.2021 17:49

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

  1. kubectl edit pvc YOUR_PVC -n ПРОБЕЛ_ИМЯ
  2. Вручную отредактируйте и поставьте # перед этой строкой
  3. Все пв и пвх будут удалены

Этот комментарий помог мне удалить том, который зависал в состоянии завершения. Благодарю.

Rakesh Gupta 05.06.2019 20:17

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

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

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

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

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

kubectl get pvc

kubectl delete pvc PVC_NAME

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

kubectl delete pv PV_NAME

Самый полезный комментарий здесь. Спасибо!

wojcieh 12.01.2021 17:22

Если вы уже удалили 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}}'

kubectl get pvc pvc_name -o yaml > pvcfile.yaml

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

kubectl apply -f pvcfile.yaml 

Вместо двух команд это можно сделать как «kubectl edit pvc pvc_name», затем удалить раздел и сохранить. Кстати, согласно исходному вопросу, автор удалил PVC, но эта операция не удалась по другим причинам, как указано в приведенных выше ответах.

Rajan Panneer Selvam 10.06.2021 20:29

Другие вопросы по теме