Команда для удаления всех модулей во всех пространствах имен kubernetes


154

Посмотрев документы, есть API-вызов для удаления модуля «а», но есть ли способ убить все модули во всех пространствах имен?

Ответы:


283

Там нет команды, чтобы сделать именно то, что вы просили.

Вот несколько близких матчей.

Вы можете удалить все модули в одном пространстве имен с помощью этой команды:

kubectl delete --all pods --namespace=foo

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

kubectl delete --all deployments --namespace=foo

Вы можете удалить все пространства имен и каждый объект в каждом пространстве имен (но не объекты без пространства имен, такие как узлы и некоторые события) с помощью этой команды:

kubectl delete --all namespaces

Однако, последняя команда, вероятно, не то, что вы хотите сделать, поскольку она удалит вещи в пространстве имен системы kube, что сделает ваш кластер непригодным для использования.

Эта команда удалит все пространства имен, кроме kube-system, что может быть полезно:

for each in $(kubectl get ns -o jsonpath="{.items[*].metadata.name}" | grep -v kube-system);
do
  kubectl delete ns $each
done

1
В текущей версии k8s команда «kubectl delete --all namespaces» больше не удаляет системные компоненты ... В нем говорится, например: пространства имен «default» запрещены: это пространство имен нельзя удалить
Kai Wähner

Это удаляет развертывание или только стручки?
Синаэстетик

1
kubectl delete pods --all --all-namespacesКажется, иногда работает (не уверен, что заставляет его работать в некоторых средах, а не в других). Это хорошо работает с моего хоста бастион, но не с ноутбука. Оба работают под управлением Debian и работают с одной и той же версией kubectl (кластерная версия 1.13)
Патрик W

@ KaiWähner, если я не ошибаюсь, материал, связанный с системой k8s, находится в kube-systemпространстве имен. В примере сообщения я вижу defaultпространство имен. Является ли kube-systemудалить команду вы прикрепленная?
Джордж Церес

79
kubectl delete daemonsets,replicasets,services,deployments,pods,rc --all

избавиться от них надоедливые контроллеры репликации тоже.


4
Это не верно. Это только удаляет в текущем пространстве имен.
PleaseHelp

Добавьте флаг -n, но извините, это по одной капсуле за раз, а не все сразу
grbonk

1
Вы ingтакже не можете удалить
входы

2
Вы также можете добавить «statefulset» (если применимо). В противном случае он будет продолжать разветвлять новые модули даже после того, как вы запустите команду!
buch11

15

Вам просто нужно sedсделать это:

kubectl get pods --no-headers=true --all-namespaces |sed -r 's/(\S+)\s+(\S+).*/kubectl --namespace \1 delete pod \2/e'

Объясняет:

  1. используйте команду, kubectl get pods --all-namespacesчтобы получить список всех модулей во всех пространствах имен.
  2. используйте --no-headers=trueопцию, чтобы скрыть заголовки.
  3. используйте sкоманду sedдля получения первых двух слов, которые представляют namespaceи, pod's nameсоответственно, затем собратьdelete команду, используя их.
  4. окончательная deleteкоманда так же , как: kubectl --namespace kube-system delete pod heapster-eq3yw.
  5. используйте eмодификатор sкоманды, чтобы выполнить команду, собранную выше, которая выполнит фактические deleteработы.

Чтобы избежать удаления модулей в kube-systemпространстве имен, просто необходимо добавить grep -v kube-systemисключающее kube-systemпространство имен перед sedкомандой.


Вы также можете просто удалить, --all-namespacesесли вы не хотите удалять kube-system
модули

Какой будет команда удалить только несколько стручков? Пример: у меня было 20 вращений Pod, и теперь я хочу оставить только 1.
Джейсон

11

Вы можете просто запустить

kubectl delete all --all --all-namespaces
  • Первый allозначает общие виды ресурсов (модули, наборы реплик, развертывания, ...)

    • kubectl get all == kubectl get pods,rs,deployments, ...
  • Второе --allозначает выбрать все ресурсы выбранных видов.


Обратите внимание, что allне включает в себя:

  • Ресурсы без пространств имен (например, clusterrolebindings, clusterroles, ...)
  • configmaps
  • rolebindings
  • роли
  • секреты
  • ...

Для того, чтобы очистить идеально,

  • Вы можете использовать другие инструменты (например, Helm, Kustomize, ...)
  • Вы могли бы использовать пространство имен.
  • Вы можете использовать метки при создании ресурсов.

2

Вот однострочник, который можно расширить с помощью grep для фильтрации по имени.

kubectl get pods -o jsonpath="{.items[*].metadata.name}" | \
tr " " "\n" | \
xargs -i -P 0 kubectl delete pods {}


0

Если у вас уже есть воссозданные модули, сначала подумайте об удалении всех развертываний.

kubectl delete -n *NAMESPACE deployment *DEPLOYMENT

Просто замените NAMSPACE и DEPLOYMENT на соответствующие, вы можете получить информацию обо всех развертываниях с помощью следующей команды

kubectl get deployments --all-namespaces

0

Плагин Kubectl Bulk (массовое действие на Krew) может быть полезен для вас, он дает вам массовые операции на выбранных ресурсах. Это команда для удаления стручков

 ' kubectl bulk pods -n namespace delete '

Вы можете проверить детали в этом


0

Я создаю код Python, чтобы удалить все в пространстве имен

delall.py

import json,sys,os;

obj=json.load(sys.stdin);
for item in obj["items"]:
        os.system("kubectl delete " + item["kind"] + "/" +item["metadata"]["name"] + " -n yournamespace")

а потом

kubectl get all -n kong -o json | python delall.py

0

K8s полностью работает на фундаментальном пространстве имен. если вы хотите освободить все ресурсы, связанные с указанным пространством имен.

Вы можете использовать нижеуказанные:

kubectl удалить пространство имен k8sdemo-app

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.