Tüm kübernet ad alanlarındaki tüm bölmeleri silme komutu


155

Dokümanlara bakıldığında, 'a' bölmesini silmek için bir API çağrısı var, ancak tüm ad alanlarındaki bölmeleri öldürmenin bir yolu var mı?

Yanıtlar:


284

Tam olarak sorduğunuz şeyi yapmak için bir komut yoktur.

İşte bazı yakın eşleşmeler.

Bu komutla tek bir ad alanındaki tüm bölmeleri silebilirsiniz:

kubectl delete --all pods --namespace=foo

Ayrıca ad alanındaki tüm dağıtımları, ad alanına karşılık gelen dağıtımlarla bağlı tüm bölmeleri silebilirsiniz

kubectl delete --all deployments --namespace=foo

Bu komutla tüm ad alanlarını ve her ad alanındaki her nesneyi (düğümler ve bazı olaylar gibi adsız nesneler değil) silebilirsiniz:

kubectl delete --all namespaces

Ancak, son komut muhtemelen yapmak istediğiniz bir şey değildir, çünkü kube sistemi ad alanındaki bazı şeyleri siler, bu da kümenizi kullanılamaz hale getirir.

Bu komut yararlı olabilecek kube-system dışındaki tüm ad alanlarını siler:

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

1
Geçerli k8s sürümünde, "kubectl delete --all ad alanları" komutu artık sistem öğelerini silmez ... Örneğin: ad alanları "varsayılan" yasaklanmıştır: bu ad alanı silinmeyebilir
Kai Wähner

Bu, dağıtımı veya yalnızca bölmeleri siliyor mu?
Sinaesthetic

1
kubectl delete pods --all --all-namespacesbazen çalışıyor gibi görünüyor (bazı ortamlarda çalışmasına neyin neden olduğundan emin değilim). Benim burç ev sahibi iyi çalışır ama laptop değil. Hem debian çalışıyor hem de kubectl'in aynı sürümünü çalıştırıyor (küme sürümü 1.13)
Patrick W

@ KaiWähner yanılmıyorsam k8s sistemiyle ilgili şeyler kube-systemisim alanında. İleti örneğinde, defaultad alanını görebiliyorum . Is kube-systemEkli olan komutuyla silinen?
George Tseres

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

onlardan da sinir bozucu çoğaltma denetleyicilerinden kurtulmak için.


4
Bu yanlış. Bu yalnızca geçerli ad alanında silinir.
PleaseHelp

-N bayrağını ekleyin, ancak bu bir seferde bir kapsül için değil, aynı anda değil
grbonk

1
Sen eksik ingde silme yaptığı giriş için
Druska

2
siz de "durum bilgisi kümesi" eklemek isteyebilirsiniz (varsa). Aksi takdirde, komutun üstesinden geldikten sonra bile yeni kapsüller almaya devam edecektir!
buch11

15

Bunu sedyapmanız yeterlidir :

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

açıklar:

  1. kubectl get pods --all-namespacestüm ad alanlarındaki tüm kapsüllerin listesini almak için command komutunu kullanın.
  2. kullanmak --no-headers=truebaşlıklarını gizleme seçeneği.
  3. kullanmak skomutu sedtemsil ilk iki kelime, almak için namespaceve pod's namedaha sonra sırasıyla montedelete bunları kullanarak komutu.
  4. Nihai deletekomut gibi bulun: kubectl --namespace kube-system delete pod heapster-eq3yw.
  5. asıl işleri yapacak olan yukarıda toplanan komutu yürütmek için komut edeğiştiricisini kullanın .sdelete

Ad kube-systemalanındaki bölmeleri silmeyi önlemek grep -v kube-systemiçin kube-system, sedkomuttan önce ad alanını hariç tutmak için eklemeniz yeterlidir .


--all-namespaceskube-system
Ad

Sadece birkaç kapsülü silme komutu ne olacak? Örnek: 20 Pod döndürdüm ve şimdi sadece 1 tutmak istiyorum.
Jason

11

Sadece koşabilirsin

kubectl delete all --all --all-namespaces
  • Birincisi allortak kaynak türleri (kapsüller, kopyalar, dağıtımlar, ...)

    • kubectl get all == kubectl get pods,rs,deployments, ...
  • İkinci --allyol, seçilen türlerin tüm kaynaklarını seçmek için


Aşağıdakileri alliçermediğini unutmayın :

  • adsız kaynaksız (ör. küme-bağlama, küme-rolleri, ...)
  • configmaps
  • rolebindings
  • roller
  • sırlar
  • ...

Mükemmel temizlik için,

  • diğer araçları kullanabilirsiniz (örneğin, Helm, Kustomize, ...)
  • bir ad alanı kullanabilirsiniz.
  • kaynakları oluştururken etiketleri kullanabilirsiniz.

2

İşte isme göre filtrelemek için grep ile genişletilebilen bir astar.

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


0

Zaten yeniden oluşturulan bölmeleriniz varsa, önce tüm dağıtımları silmeyi düşünün

kubectl delete -n *NAMESPACE deployment *DEPLOYMENT

Sadece NAMSPACE ve DEPLOYMENT'ı karşılık gelenlere değiştirin, tüm dağıtım bilgilerini aşağıdaki komutla alabilirsiniz

kubectl get deployments --all-namespaces

0

Kubectl toplu (mürettebat üzerinde toplu eylem) eklentisi sizin için yararlı olabilir, seçilen kaynaklar üzerinde toplu işlemler sağlar. Bu bölmeleri silme komutudur

 ' kubectl bulk pods -n namespace delete '

Sen ayrıntıları kontrol edebilir bu


0

Ad alanındaki tüm öğeleri silmek için bir python kodu oluşturuyorum

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

ve sonra

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

0

K8s tamamen ad alanının temeli üzerinde çalışır. belirtilen ad alanıyla ilgili tüm kaynakları serbest bırakmak istiyorsanız.

aşağıda belirtilenleri kullanabilirsiniz:

kubectl ad alanını sil k8sdemo-app

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.