Нельзя удалять стручки в кубернетес
Я попытался установить dgraph(один сервер) с помощью kubernetes. Теперь все, что мне нужно, это удалить созданные модули. Я удалил его, используя kubectl delete pod-name, результат показывает "pod удален", но снова pod воссоздает сам себя, он продолжает реплицироваться. Мне нужны эти стручки из моего kubernetes. Что мне теперь делать?
4 ответа
Как вы указали, вы создали свой dgraph
сервер, использующий этот https://raw.githubusercontent.com/dgraph-io/dgraph/master/contrib/config/kubernetes/dgraph-single.yaml, так что просто используйте этот для удаления созданных вами ресурсов:
$ kubectl delete -f https://raw.githubusercontent.com/dgraph-io/dgraph/master/contrib/config/kubernetes/dgraph-single.yaml
Я столкнулся с той же проблемой. запустите команду "kubectl get deploy", вы получите соответствующее развертывание на вашем модуле. скопируйте его, а затем выполните команду "kubectl delete deploy xyz", затем проверьте. там не будет создавать новые стручки.
Вы можете выполнить изящное удаление модуля с помощью следующей команды:
kubectl delete pods <pod>
Если вы хотите удалить Pod принудительно, используя версию kubectl>= 1.5, сделайте следующее:
kubectl delete pods <pod> --grace-period=0 --force
Если вы используете любую версию kubectl <= 1.4, вы должны опустить опцию --force и использовать:
kubectl delete pods <pod> --grace-period=0
Если даже после этих команд модуль застрял в неизвестном состоянии, используйте следующую команду, чтобы удалить модуль из кластера:
kubectl patch pod <pod> -p '{"metadata":{"finalizers":null}}'
Стручки в куберне также зависят от его типа. подобно
- Контроллеры репликации
- Наборы реплик
- Statefulsets
- развертывания
- Наборы Демонов
- стручок
Делать kubectl describe pod <podname>
и проверить
apiVersion: apps/v1
kind: StatefulSet
metadata:
Сейчас делаю kubectl get <pod-kind>
В конце удалите то же самое, и модуль также будет удален.
Удалите развертывание, а не модули. Это развертывание, которое создает еще один модуль. После удаления модулей вы можете увидеть другое имя модуля.
kubectl get all
kubectl delete deployment DEPLOYMENTNAME
Поскольку ответ @Shudipta Sharma, очевидно, является правильным способом удаления стручков. Я просто хотел бы убедиться, что автор поймет, почему это происходит. Причиной является "мышление" кубернетов, в котором стручки считаются эфемерными, одноразовыми объектами. По мере того, как блоки приходят и уходят, StatefulSets - это один из способов обеспечения того, чтобы определенное количество модулей с уникальными идентификаторами работало в любой момент времени. Достигнув файла yaml, который вы использовали для развертывания:
# This StatefulSet runs 1 pod with one Zero, one Alpha & one Ratel containers.
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: dgraph
spec:
serviceName: "dgraph"
replicas: 1
Развертывая это, вы в основном говорите, что хотите, чтобы Kubernetes всегда запускал 1 реплику этого Pod в любое время. Когда вы удаляете Pod, это условие больше не выполняется, поэтому после удаления появляется еще один Pod, чтобы убедиться, что указанное выше условие будет выполнено. Способ, который предоставляет @Shudipta Sharma, - это просто удаление этого StatefulSet, поэтому у вас больше не будет желаемого состояния, которое будет следить за количеством работающих модулей.
Вы можете найти больше об этом в документации Kubernetes на: