Нельзя удалять стручки в кубернетес

Я попытался установить 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 на:

StatefulSets

Желаемое состояние кластера

Больше об объектах Kubernetes и разнице между каждым из них

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