Kubernetes: Как правильно удалить PV
В нашей тестовой среде не удалось установить данные es с сохранением состояния, и меня попросили удалить соответствующий PV.
Поэтому я удалил следующее для es-data: 1) PVC 2) PV. Они показали, что завершаются и были оставлены на выходные. Прибыв этим утром, они все еще показали, что завершают, поэтому принудительно удалили как ПВХ, так и ПВ. Нет радости Чтобы исправить все это, мне пришлось удалить набор с сохранением состояния.
Это правильно, если вы хотите удалить PV?
9 ответов
Вы можете удалить PV, используя следующие две команды:
kubectl delete pv <pv_name> --grace-period=0 --force
И затем удаляем финализатор используя:
kubectl patch pv <pv_name> -p '{"metadata": {"finalizers": null}}'
У меня сработало, если я сначала удалю пвх, потом пв
kubectl delete pvc data-p-0
kubectl delete pv <pv-name> --grace-period=0 --force
Предполагая, что кто-то хочет удалить и пвх, в противном случае кажется, что он зависает
Сначала запустить
kubectl patch pv {PVC_NAME} -p '{"metadata":{"finalizers":null}}'
затем беги
kubectl delete pv {PVC_NAME}
В большинстве ответов в этой теме просто упоминаются команды без объяснения основной причины.
Вот схема для лучшего понимания. обратитесь к моему другому ответу для команд и дополнительной информации → https://stackoverflow.com/a/73534207/6563567
На этой диаграмме показано, как очистить удалить том
В вашем случае PVC и PV застряли в завершающем состоянии из-за финализаторов. Финализаторы — это ограждения в k8s для предотвращения случайного удаления ресурсов.
Ваши наблюдения верны, и именно так работает Kubernetes. Но порядок, в котором вы удалили ресурсы, неверен.
Это то, что произошло,
PV застревает на завершении, потому что PVC все еще существует. PVC застревает на завершении, потому что Statefulsets(pods) все еще используют тома. (тома прикрепляются к нодам и монтируются в поды). Как только вы удалили модули/STS, поскольку тома больше не используются, PVC и PV были успешно удалены.
В начале убедитесь, что ваш Reclaim Policy
настроен на Delete
, После удаления PVC следует удалить PV.
https://kubernetes.io/docs/concepts/storage/persistent-volumes/
Если это не помогает, пожалуйста, проверьте этот открытый выпуск Kubernetes PV: https://github.com/kubernetes/kubernetes/issues/69697
и попробуйте удалить финализаторы PV.
СОВЕТ: объемы PV можно описать как
pvc-name-of-volume
что может сбить с толку!
- ПВ:
Persistence Volume
- ПВХ:
Persistence Volume Clame
- Pod -> PVC -> PV -> Хост-машина
Сначала найдите PVS:
kubectl get pv -n {namespace}
Затем удалите pv , чтобы установить статус в
Terminating
kubectl delete pv {PV_NAME}
Затем исправьте его, чтобы установить статус pvc на
Lost
:kubectl patch pv {PV_NAME} -p '{"metadata":{"finalizers":null}}'
Тогда получите объемы пвх:
kubectl get pvc -n storage
Затем вы можете удалить pvc:
kubectl delete pvc {PVC_NAME} -n {namespace}
Теоретический пример:
** Допустим, у нас установлена kafka в
storage namespace
$ kubectl delete pv pvc-ccdfe297-44c9-4ca7-b44c-415720f428d1
$ kubectl get pv -n storage
(висит, но превращает статус pv в завершение)
$ kubectl patch pv pvc-ccdfe297-44c9-4ca7-b44c-415720f428d1 -p '{"metadata":{"finalizers":null}}'
$ kubectl get pvc -n storage
kubectl delete pvc data-kafka-0 -n storage
Что касается меня, я следовал этому методу, и у меня он работал нормально.
kubectl delete pv {your-pv-name} --grace-period=0 --force
После этого отредактируйте конфигурацию pvc.
kubectl edit pvc {your-pvc-name}
и удалите финализатор из конфигурации pvc.
finalizers:
- kubernetes.io/pv-protection
Подробнее о финализаторе можно прочитать здесь, в официальном руководстве по Kubernetes.
Команда ниже работала для меня -
kubectl delete pv (pv_name) --grace-period=0 --force
kubectl удалить pv [pv-имя]
ksu вы должны проверить политику PV, это не должно быть Reclaim Policy.