Команда видалити всі стручки у всіх просторах імен kubernetes


154

Переглядаючи документи, виникає виклик API для видалення "a" pod, але чи є спосіб знищити всі стручки у всіх просторах імен?

Відповіді:


281

Немає команди робити саме те, про що ви просили.

Ось кілька близьких матчів.

Ви можете видалити всі стручки в одному просторі імен за допомогою цієї команди:

kubectl delete --all pods --namespace=foo

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

kubectl delete --all deployments --namespace=foo

За допомогою цієї команди можна видалити всі простори імен та кожен об'єкт у кожному просторі імен (але не об'єкти, що не мають імен, наприклад, вузли та деякі події):

kubectl delete --all namespaces

Однак остання команда, ймовірно, не є тим, що ви хочете робити, оскільки вона видалить речі з простору імен kube-системи, що зробить ваш кластер непридатним для використання.

Ця команда видалить усі простори імен, крім kube-системи, що може бути корисно:

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 - всі простори імен" більше не видаляє системні речі ... У ній написано, наприклад: простори імен "за замовчуванням" заборонено: цей простір імен не може бути видалений
Kai Wähner

Це видаляє розгортання або лише стручки?
Синестетик

1
kubectl delete pods --all --all-namespacesздається, працює іноді (не впевнений, що змушує його працювати в одних умовах, а не в інших). Він добре працює від мого бастіону, але не від ноутбука. Обидва запущені debian і обидва запущені однакові версії kubectl (кластерна версія 1.13)
Patrick W

@ KaiWähner, якщо я не помиляюсь, речі, пов'язані з системою k8s, знаходяться в kube-systemпросторі імен. У прикладі повідомлення я бачу defaultпростір імен. Чи kube-systemвидаляється команда, яку ви додали?
Георгій Церес

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

щоб позбутися від них набридливих контролерів реплікації теж.


4
Це неправильно. Це видаляється лише в поточному просторі імен.
Будь ласка, допоможіть

Додайте прапор -n, але вибачте, що це одна стручка за раз, а не все одразу
grbonk

1
У вас не вистачає ingтакож на видалення втікає
Druska

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просторі імен
ianstarz

Якою буде команда видалити лише кілька стручків? Приклад: Я крутив 20 Pod і зараз бажаю тримати лише 1.
Джейсон

10

Можна просто запустити

kubectl delete all --all --all-namespaces
  • Перший allозначає загальні види ресурсів (стручки, реплікації, розгортання, ...)

    • kubectl get all == kubectl get pods,rs,deployments, ...
  • Другий --allозначає виділити всі ресурси вибраних видів


Зверніть увагу, що allне включає:

  • ресурси, що не пов'язані з іменами (наприклад, зв'язки кластерів, кластерні канали, ...)
  • конфігураційні карти
  • рольові зв’язки
  • ролі
  • секрети
  • ...

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

  • ви можете використовувати інші інструменти (наприклад, Helm, Kustomize, ...)
  • ви можете використовувати простір імен.
  • ви можете використовувати мітки під час створення ресурсів.

2

Ось один вкладиш, який можна розширити грепом, щоб фільтрувати за назвою.

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 та ЗАВДАННЯ на відповідні, ви можете отримати всю інформацію про розгортання за допомогою наступної команди

kubectl get deployments --all-namespaces

0

Плагін Kubectl bulk (bulk-action on 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-додаток

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.