Lệnh xóa tất cả các nhóm trong tất cả các không gian tên kubernetes


154

Khi xem xét các tài liệu, có một lệnh gọi API để xóa 'nhóm', nhưng có cách nào để giết tất cả các nhóm trong tất cả các không gian tên không?

Câu trả lời:


281

Không có lệnh để làm chính xác những gì bạn yêu cầu.

Dưới đây là một số trận đấu gần.

Bạn có thể xóa tất cả các nhóm trong một không gian tên duy nhất bằng lệnh này:

kubectl delete --all pods --namespace=foo

Bạn cũng có thể xóa tất cả các triển khai trong không gian tên sẽ xóa tất cả các nhóm được đính kèm với các triển khai tương ứng với không gian tên

kubectl delete --all deployments --namespace=foo

Bạn có thể xóa tất cả các không gian tên và mọi đối tượng trong mọi không gian tên (nhưng không phải các đối tượng không được đặt tên, như các nút và một số sự kiện) bằng lệnh này:

kubectl delete --all namespaces

Tuy nhiên, lệnh sau có lẽ không phải là thứ bạn muốn làm, vì nó sẽ xóa mọi thứ trong không gian tên hệ thống kube, điều này sẽ làm cho cụm của bạn không thể sử dụng được.

Lệnh này sẽ xóa tất cả các không gian tên ngoại trừ kube-system, có thể hữu ích:

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

1
Với phiên bản hiện tại của k8s, lệnh "kubectl xóa - không gian tên" không xóa nội dung hệ thống nữa ... Nó nói ví dụ: không gian tên "mặc định" bị cấm: không gian tên này có thể không bị xóa
Kai Wähner

Điều này có xóa việc triển khai hay chỉ các nhóm?
Trang web thẩm mỹ

1
kubectl delete pods --all --all-namespacesđôi khi dường như hoạt động (không chắc chắn điều gì khiến nó hoạt động trong một số môi trường và không phải trong những môi trường khác). Nó hoạt động tốt từ máy chủ pháo đài của tôi nhưng không phải từ máy tính xách tay. Cả chạy debian và cả hai đều chạy cùng một phiên bản kubectl (phiên bản cụm 1.13)
Patrick W

@ KaiWähner nếu tôi không nhầm những thứ liên quan đến hệ thống của k8 nằm trong kube-systemkhông gian tên. Trong ví dụ tin nhắn, tôi có thể thấy defaultkhông gian tên. Được kube-systemxóa với lệnh bạn đã đính kèm?
George Tseres

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

để loại bỏ chúng bộ điều khiển nhân rộng pesky quá.


4
Cái này sai. Điều này chỉ xóa trong không gian tên hiện tại.
Xin hãy giúp đỡ

Thêm cờ -n, nhưng xin lỗi đó là cho một nhóm tại một thời điểm và không phải tất cả cùng một lúc
grbonk

1
Bạn cũng đang thiếu ingđể xóa các nội dung
Druska

2
bạn cũng có thể muốn thêm "statefulset" (nếu có). Nếu không, nó sẽ tiếp tục bỏ qua các nhóm mới ngay cả sau khi bạn chạy lệnh trên!
buch11

15

Bạn chỉ cần sedlàm điều này:

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

Giải thích:

  1. sử dụng lệnh kubectl get pods --all-namespacesđể có được danh sách tất cả các nhóm trong tất cả các không gian tên.
  2. sử dụng --no-headers=truetùy chọn để ẩn các tiêu đề.
  3. sử dụng slệnh của sedđể tìm nạp hai từ đầu tiên, đại diện namespacepod's nametương ứng, sau đó lắp ráp deletelệnh bằng cách sử dụng chúng.
  4. deletelệnh cuối cùng giống như : kubectl --namespace kube-system delete pod heapster-eq3yw.
  5. sử dụng công cụ esửa đổi slệnh để thực thi lệnh được lắp ráp ở trên, sẽ thực hiện các deletecông việc thực tế .

Để tránh xóa các nhóm trong kube-systemkhông gian tên, chỉ cần thêm grep -v kube-systemđể loại trừ kube-systemkhông gian tên trước sedlệnh.


Bạn cũng có thể thả --all-namespacesnếu bạn không muốn xóa các nhóm trong kube-systemkhông gian tên
ianstarz

Điều gì sẽ là lệnh để chỉ xóa một vài pod? Ví dụ: Tôi đã quay 20 Pod và bây giờ muốn giữ chỉ 1.
Jason

10

Bạn chỉ có thể chạy

kubectl delete all --all --all-namespaces
  • Đầu tiên allcó nghĩa là các loại tài nguyên phổ biến (nhóm, bản sao, triển khai, ...)

    • kubectl get all == kubectl get pods,rs,deployments, ...
  • Thứ hai --allcó nghĩa là chọn tất cả các tài nguyên của các loại đã chọn


Lưu ý rằng allkhông bao gồm:

  • không được đặt tên lại được đặt lại (ví dụ: clusterrolebindings, clusterroles, ...)
  • cấu hình
  • rolebindings
  • vai trò
  • bí mật
  • ...

Để làm sạch hoàn hảo,

  • bạn có thể sử dụng các công cụ khác (ví dụ: Helm, Kustomize, ...)
  • bạn có thể sử dụng một không gian tên.
  • bạn có thể sử dụng nhãn khi bạn tạo tài nguyên.

2

Đây là một lớp lót có thể được mở rộng bằng grep để lọc theo tên.

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


0

Nếu bạn đã có các nhóm được tạo lại, hãy nghĩ đến việc xóa tất cả các triển khai trước

kubectl delete -n *NAMESPACE deployment *DEPLOYMENT

Chỉ cần thay thế NAMSPACE và TIỀN GỬI thành các ứng dụng tương ứng, bạn có thể nhận được tất cả thông tin triển khai bằng lệnh sau

kubectl get deployments --all-namespaces

0

Plugin Kubectl số lượng lớn (hành động hàng loạt trên krew) có thể hữu ích cho bạn, nó cung cấp cho bạn các hoạt động hàng loạt trên các tài nguyên được chọn. Đây là lệnh để xóa pod

 ' kubectl bulk pods -n namespace delete '

Bạn có thể kiểm tra chi tiết trong này


0

Tôi tạo một mã python để xóa tất cả trong không gian tên

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")

và sau đó

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

0

K8 hoàn toàn hoạt động trên nền tảng của không gian tên. nếu bạn muốn phát hành tất cả các tài nguyên liên quan đến không gian tên được chỉ định.

bạn có thể sử dụng các đề cập dưới đây:

kubectl xóa không gian tên k8sdemo-app

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.