Kubernetes bölmesi silindiğinde yeniden oluşturulur


152

Kapsülleri komutla başlattım

$ kubectl run busybox --image=busybox --restart=Never --tty -i --generator=run-pod/v1

Bir şeyler ters gitti ve şimdi bunu silemiyorum Pod.

Aşağıda açıklanan yöntemleri kullanarak denedim ama Podtutarı yeniden oluşturuluyor.

$ kubectl delete pods  busybox-na3tm
pod "busybox-na3tm" deleted
$ kubectl get pods
NAME                                     READY     STATUS              RESTARTS   AGE
busybox-vlzh3                            0/1       ContainerCreating   0          14s

$ kubectl delete pod busybox-vlzh3 --grace-period=0


$ kubectl delete pods --all
pod "busybox-131cq" deleted
pod "busybox-136x9" deleted
pod "busybox-13f8a" deleted
pod "busybox-13svg" deleted
pod "busybox-1465m" deleted
pod "busybox-14uz1" deleted
pod "busybox-15raj" deleted
pod "busybox-160to" deleted
pod "busybox-16191" deleted


$ kubectl get pods --all-namespaces
NAMESPACE   NAME            READY     STATUS              RESTARTS   AGE
default     busybox-c9rnx   0/1       RunContainerError   0          23s

2
Bir şekilde yanlış argümanlar geçirerek çoğaltma denetleyicisi oluşturmayı başardınız mı? Ne için alıyorsun kubectl get all -o name?
Graham Dumpleton

1
kubectl get eventsBu nesneleri neyin oluşturduğunu kontrol edebilir misiniz ?
Anirudh Ramanathan

3
kubctl get rcbir ReplicationController oluşturulmuş olup olmadığını görmek için deneyin . Öyleyse bunu silin, ardından bölmeleri silin.
MrE

3
kubernet'lerin hangi sürümünü kullanıyorsunuz Kubernetes sürümüne bağlı olarak? Farklı davranabilirdi. örneğin 1.2'den önce her zaman dağıtım oluşturdu. kubectl get deployment
lwolf

19
Birisi burada biterse: - Dağıtımları silmek benim için sorunu çözdü. kubectl delete deployment <deployment_name>. Dağıtım adını almak için şunu yapın:kubectl get deployments
Vasanth Sriram

Yanıtlar:


292

Dağıtımları silmeniz gerekir, bu da bölmeleri ve çoğaltma kümelerini silmelidir https://github.com/kubernetes/kubernetes/issues/24137

Tüm dağıtımları listelemek için:

kubectl get deployments --all-namespaces

Ardından dağıtımı silmek için:

kubectl delete -n NAMESPACE deployment DEPLOYMENT

NAMESPACE, içinde bulunduğu ad alanı ve DEPLOYMENT nameda dağıtımın adıdır .

Bazı durumlarda, bir iş veya daemonset nedeniyle de çalışıyor olabilir. Aşağıdakileri kontrol edin ve uygun silme komutlarını çalıştırın.

kubectl get jobs

kubectl get daemonsets.app --all-namespaces

kubectl get daemonsets.extensions --all-namespaces

1
Daha sonra konuşlandırmayı nasıl geri getirirsiniz?
Jamey

1
@Jamey kubectl createkomutuyla tekrar oluşturursunuz .
Illya Gerasymchuk

1
dağıtım olması gerekmez. bir iş olabilir. bu yüzden de kontrol edin emin olunkubectl get jobs
bucky

Yalnızca dağıtımları değil, birden çok nesne türünü silmek için şunları deneyin:kubectl delete replicasets,subscriptions,deployments,jobs,services,pods --all -n <namespace>
Noam Manos

19

Bunun bir dağıtım, deamonset, durum bilgisi ... veya ne olduğunu anlamaya çalışmak yerine (benim durumumda, yeni kapsülleri yaymaya devam eden bir çoğaltma denetleyicisiydi :) Görüntüyü yaymaya devam eden şeyin ne olduğunu belirlemek için ben Bu komutla tüm kaynakları aldım:

kubectl get all

Tabii ki tüm kaynaklardan tüm kaynakları alabilirsiniz:

kubectl get all --all-namespaces

veya incelemek istediğiniz ad alanını tanımlayın:

kubectl get all -n NAMESPACE_NAME

Çoğaltma denetleyicisinin sorunumdan sorumlu olduğunu görünce sildim:

kubectl delete replicationcontroller/CONTROLLER_NAME


14

bölmenizdeki gibi bir ad varsa, name-xxx-yyyadlandırılmış bir replicasets.apps tarafından kontrol edilebilirse name-xxx, podu silmeden önce bu replikaseti silmeniz gerekir

kubectl delete replicasets.apps name-xxx


1
Teşekkürler! Benim durumum için, onu yeniden yaratan belirli bir işti. Yani:kubectl delete --all jobs -n <namespace>
yclian

kubectl get replicasets.apps -n <namespace>(Veya --all-namespaces) ile çoğaltma kümesini bulun
Noam Manos

9

Durum bilgisi olan kümelere de dikkat edin

kubectl get sts --all-namespaces

ad alanındaki tüm durum kümelerini silmek için

kubectl --namespace <yournamespace> delete sts --all

onları tek tek silmek için

kubectl --namespace ag1 delete sts mssql1 
kubectl --namespace ag1 delete sts mssql2
kubectl --namespace ag1 delete sts mssql3

gitlab-gitaly benim için oradaydı. Teşekkürler! Bu çözdü.
Kevin C

6

Bazı durumlarda, dağıtım silerken bile kapsüller gitmez. Bu durumda, bunları silmeye zorlamak için aşağıdaki komutu çalıştırabilirsiniz.

kubectl delete pods podname --grace-period=0 --force


Strateji türü olarak ayarlanmışsa dağıtım, işler veya başka bir denetleyici tarafından oluşturulan bölme sorunu çözmez Recreate.
SK Venkat

5

Bu, ad alanındaki tüm kapsüller, dağıtımlar, hizmetler ve işler hakkında bilgi sağlayacaktır.

kubectl get pods,services, deployments, jobs

kapsüller dağıtımlar veya işler tarafından oluşturulabilir

kubectl delete job [job_name]
kubectl delete deployment [deployment_name]

Dağıtımı veya işi silerseniz bölmelerin yeniden başlatılması durdurulabilir.


5

Burada birçok yanıt belirli bir k8s nesnesini silmeyi söyler, ancak tek tek değil, aynı anda birden çok nesneyi silebilirsiniz :

kubectl delete deployments,jobs,services,pods --all -n <namespace>

Benim durumumda, OLM - Operator Lifecycle Manager ile OpenShift kümesini çalıştırıyorum . OLM, dağıtımı denetleyen kişidir, bu nedenle dağıtımı sildiğimde, bölmelerin yeniden başlatılmasını durdurmak için yeterli değildi.

Yalnızca OLM'yi ve aboneliğini sildiğimde , dağıtım, hizmetler ve kapsüller gitti.

Önce ad alanınızdaki tüm k8s nesnelerini listeleyin:

$ kubectl get all -n openshift-submariner

NAME                                       READY   STATUS    RESTARTS   AGE
pod/submariner-operator-847f545595-jwv27   1/1     Running   0          8d  
NAME                                  TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)    AGE
service/submariner-operator-metrics   ClusterIP   101.34.190.249   <none>        8383/TCP   8d
NAME                                  READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/submariner-operator   1/1     1            1           8d
NAME                                             DESIRED   CURRENT   READY   AGE
replicaset.apps/submariner-operator-847f545595   1         1         1       8d

OLM ile listelenmiyor get all, bu yüzden özellikle ararım:

$ kubectl get olm -n openshift-submariner

NAME                                                      AGE
operatorgroup.operators.coreos.com/openshift-submariner   8d
NAME                                                             DISPLAY      VERSION
clusterserviceversion.operators.coreos.com/submariner-operator   Submariner   0.0.1 

Şimdi OLM'ler, abonelikler, dağıtımlar, çoğaltma kümeleri vb. Dahil tüm nesneleri silin:

$ kubectl delete olm,svc,rs,rc,subs,deploy,jobs,pods --all -n openshift-submariner

operatorgroup.operators.coreos.com "openshift-submariner" deleted
clusterserviceversion.operators.coreos.com "submariner-operator" deleted
deployment.extensions "submariner-operator" deleted
subscription.operators.coreos.com "submariner" deleted
service "submariner-operator-metrics" deleted
replicaset.extensions "submariner-operator-847f545595" deleted
pod "submariner-operator-847f545595-jwv27" deleted

Nesneleri tekrar listeleyin - hepsi gitti:

$ kubectl get all -n openshift-submariner
No resources found.

$ kubectl get olm -n openshift-submariner
No resources found.

4

Bölme el ile silindikten sonra bile bölme otomatik olarak yeniden oluşturulduğunda, bu bölmeler Dağıtım kullanılarak oluşturulmuştur. Bir dağıtım oluşturduğunuzda, otomatik olarak ReplicaSet ve Pod'ları oluşturur. Dağıtım komut dosyasında bölmenizde kaç kopya belirttiğinize bağlı olarak, başlangıçta bu sayıda bölmeyi oluşturur. Herhangi bir bölmeyi el ile silmeye çalıştığınızda, bölmeyi otomatik olarak yeniden oluşturur.

Evet, bazen bölmeleri zorla silmeniz gerekir. Ancak bu durumda kuvvet komutu çalışmaz.



4

NS'yi kaldırmak yerine replicaSet'i kaldırmayı deneyebilirsiniz

kubectl get rs --all-namespaces

Ardından replicaSet öğesini silin

kubectl delete rs your_app_name

2

Etkileşimli bir eğitim aldıktan sonra bir grup bakla, servis, dağıtım ile bitirdim:

me@pooh ~ > kubectl get pods,services
NAME                                       READY   STATUS    RESTARTS   AGE
pod/kubernetes-bootcamp-5c69669756-lzft5   1/1     Running   0          43s
pod/kubernetes-bootcamp-5c69669756-n947m   1/1     Running   0          43s
pod/kubernetes-bootcamp-5c69669756-s2jhl   1/1     Running   0          43s
pod/kubernetes-bootcamp-5c69669756-v8vd4   1/1     Running   0          43s

NAME                 TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
service/kubernetes   ClusterIP   10.96.0.1    <none>        443/TCP   37s
me@pooh ~ > kubectl get deployments --all-namespaces
NAMESPACE     NAME                  DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
default       kubernetes-bootcamp   4         4         4            4           1h
docker        compose               1         1         1            1           1d
docker        compose-api           1         1         1            1           1d
kube-system   kube-dns              1         1         1            1           1d

Her şeyi temizlemek için delete --alliyi çalıştı:

me@pooh ~ > kubectl delete pods,services,deployments --all
pod "kubernetes-bootcamp-5c69669756-lzft5" deleted
pod "kubernetes-bootcamp-5c69669756-n947m" deleted
pod "kubernetes-bootcamp-5c69669756-s2jhl" deleted
pod "kubernetes-bootcamp-5c69669756-v8vd4" deleted
service "kubernetes" deleted
deployment.extensions "kubernetes-bootcamp" deleted

Bu beni boş bir Kubernetes kümesiyle bıraktı:

me@pooh ~ > kubectl get pods,services,deployments
NAME                 TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
service/kubernetes   ClusterIP   10.96.0.1    <none>        443/TCP   8m

1

Çalışmaya devam eden bir işiniz varsa, işi aramanız ve silmeniz gerekir:

kubectl get job --all-namespaces | grep <name>

ve

kubectl delete job <job-name>


1

kubectl get replicasetsYaşa veya saate göre eski dağıtımları kontrol edebilirsiniz

Aynı geçerli çalışan uygulama bölmesini silmek istiyorsanız eski dağıtımı zamana göre silin

kubectl delete replicasets <Name of replicaset>

1

Sorunla da karşılaştım, konuşlandırmayı silmek için aşağıdaki komutu kullandım.

kubectl delete deployments DEPLOYMENT_NAME

ama hala bakla yeniden yaratıldı, bu yüzden aşağıdaki komutu kullanarak Çoğaltma Kümesini kontrol ettim

kubectl get rs

ardından çoğaltma kümesini 1'den 0'a düzenleyin

kubectl edit rs REPICASET_NAME

1

Sorulan sorunun temel nedeni strategy->type, bölme yok edildiğinde ne olacağını (örtük veya açık olarak) tanımlayan dağıtım / iş / çoğaltma kümeleri özniteliğidir . Benim durumumda öyleydi Recreate.

@ Göçebe'nin cevabına göre , bir acemi kullanıcı olarak kümeyi dağıtmadan önce dağıtım / iş / replikasetleri silmek ölümcül kombinasyonlarla denemekten kaçınmak için basit bir çözümdür .

Hata ayıklamaya atlamadan önce sahne arkası eylemlerini anlamak için aşağıdaki komutları deneyin:

kubectl get all -A -o name
kubectl get events -A | grep <pod-name>

1

Benim durumumda gibi bir YAML dosyası aracılığıyla konuşlandırdım kubectl apply -f deployment.yamlve çözüm üzerinden silmek gibi görünüyorkubectl delete -f deployment.yaml


0

Benzer bir sorunla karşılaştım: dağıtım ( kubectl delete deploy <name>) sildikten sonra , bölmeler "Çalışıyor" ve silindikten sonra otomatik olarak yeniden oluşturuldu ( kubectl delete po <name>).

İlişkili çoğaltma kümesinin bir nedenden dolayı otomatik olarak silinmediği ve bunu ( kubectl delete rs <name>) sildikten sonra bölmeleri silmek mümkün oldu.


0

Durum bilgisi olan kümelere (veya hizmetlere, işlere vb.) Sahip dağıtımlarda bu komutu kullanabilirsiniz:

Bu komut, belirtilen şekilde çalışan her şeyi sonlandırır <NAMESPACE>

kubectl -n <NAMESPACE> delete replicasets,deployments,jobs,service,pods,statefulsets --all

Ve güçlü

kubectl -n <NAMESPACE> delete replicasets,deployments,jobs,service,pods,statefulsets --all --cascade=true --grace-period=0 --force
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.