हटाए जाने पर कुबेरनेट्स पॉड को फिर से बनाया जाता है


152

मैंने कमांड के साथ पॉड्स शुरू किए हैं

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

कुछ गलत हुआ, और अब मैं इसे हटा नहीं सकता Pod

मैंने नीचे बताए गए तरीकों का उपयोग करने की कोशिश की, लेकिन Podबनाए रखा जा रहा है।

$ 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
क्या आपने किसी तरह गलत तर्क पारित करके एक प्रतिकृति नियंत्रक बनाने का प्रबंधन किया। आपको क्या मिलता है kubectl get all -o name?
ग्राहम डुप्लेटन

1
क्या आप kubectl get eventsदेख सकते हैं कि इन वस्तुओं का निर्माण क्या है?
अनिरुद्ध रामनाथन

3
kubctl get rcयह देखने की कोशिश करें कि क्या कोई प्रतिकृतिसंपर्क नियंत्रक बनाया गया था। यदि हां, तो उसे हटा दें, फिर फली को हटा दें।
श्रीमती

3
कुबेरनेट्स का कौन सा संस्करण चल रहा है? अपने kubernetes संस्करण पर निर्भर करता है? यह अलग तरह से व्यवहार कर सकता था। उदाहरण के लिए 1.2 से पहले इसने हमेशा तैनाती की। kubectl get deployment
lwolf

19
यदि कोई व्यक्ति यहां से समाप्त होता है: - तैनाती को हटाने से मेरे लिए समस्या हल हो गई। kubectl delete deployment <deployment_name>। तैनाती नाम प्राप्त करने के लिए, करेंkubectl get deployments
वसंत श्रीराम

जवाबों:


291

आपको परिनियोजन को हटाने की आवश्यकता है, जो बदले में फली को हटाना चाहिए और प्रतिकृति सेट करता है https://github.com/kubernetes/kubernetes/issues/24137

सभी तैनाती सूचीबद्ध करने के लिए:

kubectl get deployments --all-namespaces

फिर तैनाती को हटाने के लिए:

kubectl delete -n NAMESPACE deployment DEPLOYMENT

NAMESPACE जहां यह नाम स्थान है और nameयह तैनाती का स्थान है।

कुछ मामलों में यह नौकरी या डेमोंसेट के कारण भी चल सकता है। निम्नलिखित की जाँच करें और उनके उपयुक्त हटाएँ आदेश चलाएँ।

kubectl get jobs

kubectl get daemonsets.app --all-namespaces

kubectl get daemonsets.extensions --all-namespaces

1
आप बाद में तैनाती कैसे ला सकते हैं?
जम्मी

1
@Jamey आप इसे फिर से kubectl createकमांड के साथ बनाएँ ।
इलैलिया गेरासिमचुक

1
परिनियोजन करने की आवश्यकता नहीं है। नौकरी हो सकती है। इसलिए यह भी सुनिश्चित करें किkubectl get jobs
बजे

कई ऑब्जेक्ट प्रकारों को हटाने के लिए, न केवल तैनाती, कोशिश करें:kubectl delete replicasets,subscriptions,deployments,jobs,services,pods --all -n <namespace>
नोम मानोस

19

यह जानने की कोशिश करने के बजाय कि क्या यह तैनाती, डेमोंसेट, स्टेटफुलसेट है ... या क्या है (मेरे मामले में यह एक प्रतिकृति नियंत्रक था जो नई फली फैला रहा था :) यह निर्धारित करने के लिए कि वह क्या था जो छवि को फैला रहा था। इस आदेश के साथ सभी संसाधन मिले:

kubectl get all

बेशक आप सभी नामस्थानों से सभी संसाधन प्राप्त कर सकते हैं:

kubectl get all --all-namespaces

या आपके द्वारा निरीक्षण किए जाने वाले नामस्थान को परिभाषित करें:

kubectl get all -n NAMESPACE_NAME

एक बार मैंने देखा कि प्रतिकृति नियंत्रक मेरी परेशानी के लिए जिम्मेदार था जिसे मैंने इसे हटा दिया:

kubectl delete replicationcontroller/CONTROLLER_NAME


14

यदि आपकी पॉड का नाम पसंद है name-xxx-yyy, तो इसे एक replicasets.apps द्वारा नियंत्रित किया जा सकता है name-xxx, नाम के अनुसार , आपको पॉड को हटाने से पहले उस प्रतिकृति को पहले ही हटा देना चाहिए

kubectl delete replicasets.apps name-xxx


1
धन्यवाद! मेरे मामले के लिए, यह एक विशिष्ट काम था जो इसे फिर से बना रहा था। तो:kubectl delete --all jobs -n <namespace>
yclian

प्रतिकृति kubectl get replicasets.apps -n <namespace>(-all-namespaces) के साथ सेट करें
Noam Manos

9

स्टेटस सेट के लिए भी देखें

kubectl get sts --all-namespaces

किसी नामस्थान में सभी स्टेटफुल सेट को हटाने के लिए

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

उन्हें एक-एक करके हटाने के लिए

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

gitlab-gitaly मेरे लिए था। धन्यवाद! इससे यह हल हो गया।
केविन सी

6

कुछ मामलों में फली तैनाती को हटाते समय भी दूर नहीं जाएगी। उस स्थिति में उन्हें हटाने के लिए मजबूर करने के लिए आप नीचे दी गई कमांड चला सकते हैं

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


यह समस्या तब हल नहीं होगी जब स्ट्रैटिजी, जॉब्स या किसी अन्य तरह के कंट्रोलर द्वारा बनाई गई स्ट्रैटेजी टाइप सेट हो जाए Recreate
एसके वेंकट

5

यह नाम स्थान में सभी पॉड्स, तैनाती, सेवाओं और नौकरियों के बारे में जानकारी प्रदान करेगा।

kubectl get pods,services, deployments, jobs

फली या तो तैनाती या नौकरियों द्वारा बनाई जा सकती है

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

यदि आप तैनाती या नौकरी को हटाते हैं तो फली का पुनः आरंभ रोका जा सकता है।


5

यहाँ कई उत्तर एक विशिष्ट k8s ऑब्जेक्ट को हटाने के लिए कहते हैं, लेकिन आप एक-एक करके कई वस्तुओं को एक बार में हटा सकते हैं :

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

मेरे मामले में, मैं ओएलएम - ऑपरेटर लाइफसाइकल मैनेजर के साथ ओपनशिफ्ट क्लस्टर चला रहा हूं । ओएलएम वह है जो तैनाती को नियंत्रित करता है, इसलिए जब मैंने तैनाती को हटा दिया, तो पॉड्स को फिर से शुरू करने से रोकने के लिए पर्याप्त नहीं था।

केवल जब मैंने ओएलएम और इसकी सदस्यता को हटा दिया , तो तैनाती, सेवाएं और पॉड्स चले गए थे।

अपने नामस्थान की सभी k8 वस्तुओं को पहले सूचीबद्ध करें:

$ 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

ओएलएम के साथ सूचीबद्ध नहीं है get all, इसलिए मैं इसके लिए विशेष रूप से खोज करता हूं:

$ 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 

अब सभी ऑब्जेक्ट्स को हटा दें, जिनमें OLM, सदस्यता, तैनाती, प्रतिकृति-सेट आदि शामिल हैं:

$ 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

सूची वस्तुओं को फिर से - सभी चले गए:

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

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

4

जब फली को मैन्युअल रूप से हटाने के बाद भी फली स्वचालित रूप से फिर से आ रही है, तो उन पॉड्स को परिनियोजन का उपयोग करके बनाया गया है। जब आप एक परिनियोजन बनाते हैं, तो यह स्वचालित रूप से रेप्लिकासेट और पॉड्स बनाता है। परिनियोजन स्क्रिप्ट में आपके द्वारा बताए गए आपके पॉड के कितने प्रतिकृतियों के आधार पर, यह शुरू में उन फली की संख्या बनाएगा। जब आप मैन्युअल रूप से किसी भी पॉड को हटाने का प्रयास करते हैं, तो यह स्वचालित रूप से उन पॉड को फिर से बना देगा।

हां, कभी-कभी आपको बल के साथ फली को हटाने की आवश्यकता होती है। लेकिन इस मामले में बल आदेश काम नहीं करता है।


मुझे एक चेतावनी मिलती है जब मैं यह कोशिश करता हूं कि फली एक ज़ोंबी प्रक्रिया के रूप में रह सकती है इसलिए मैं ऐसा नहीं चाहता था ..
चानोच

4

एनएस हटाने के बजाय आप प्रतिकृति हटाने की कोशिश कर सकते हैं

kubectl get rs --all-namespaces

फिर प्रतिकृति को हटा दें

kubectl delete rs your_app_name

2

इंटरएक्टिव ट्यूटोरियल लेने के बाद, मैं फली, सेवाओं, तैनाती के एक समूह के साथ समाप्त हुआ:

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

सब कुछ साफ करने के लिए, delete --allठीक काम किया:

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

एक खाली कुबेरनेट समूह के साथ मुझे छोड़ दिया (मुझे क्या लगता है)

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

यदि आपके पास एक नौकरी है जो जारी है, तो आपको नौकरी खोजने और उसे हटाने की आवश्यकता है:

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

तथा

kubectl delete job <job-name>


1

आप kubectl get replicasetsउम्र या समय के आधार पर पुरानी तैनाती की जांच कर सकते हैं

यदि आप एक ही चालू रनिंग पॉड को हटाना चाहते हैं तो समय के आधार पर पुरानी तैनाती हटाएं

kubectl delete replicasets <Name of replicaset>

1

मुझे भी समस्या का सामना करना पड़ा, मैंने तैनाती को हटाने के लिए कमांड का उपयोग किया है।

kubectl delete deployments DEPLOYMENT_NAME

लेकिन अभी भी फली फिर से बना रहा था, इसलिए मैंने नीचे कमांड का उपयोग करके प्रतिकृति सेट की जांच की

kubectl get rs

फिर प्रतिकृतियों को 1 से 0 तक संपादित करें

kubectl edit rs REPICASET_NAME

1

पूछे गए प्रश्न का मूल कारण तैनाती / नौकरी / प्रतिकृतियां विशिष्ट विशेषता है strategy->typeजो परिभाषित करता है कि क्या होना चाहिए जब फली नष्ट हो जाएगी (या तो स्पष्ट रूप से या स्पष्ट रूप से)। मेरे मामले में, यह था Recreate

@ खानाबदोश के उत्तर के अनुसार , एक नौसिखिए उपयोगकर्ता के रूप में क्लस्टर को गड़बड़ाने से पहले घातक कॉम्बो के साथ प्रयोग करने से बचने के लिए तैनाती / नौकरी / प्रतिकृतियों को हटाना सरल है।

डिबगिंग में कूदने से पहले दृश्य क्रियाओं के पीछे समझने के लिए निम्न आदेशों का प्रयास करें:

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

1

मेरे मामले में मैंने एक YAML फ़ाइल के माध्यम से तैनात किया जैसे kubectl apply -f deployment.yamlऔर समाधान के माध्यम से नष्ट करने के लिए प्रतीत होता हैkubectl delete -f deployment.yaml


0

मैंने एक समान समस्या का अनुभव किया: तैनाती को हटाने के बाद ( kubectl delete deploy <name>), पॉड्स "रनिंग" रखा और जहां डिलीट होने के बाद स्वचालित रूप से फिर से बनाया गया ( kubectl delete po <name>)।

यह पता चला कि संबंधित प्रतिकृति सेट को किसी कारण से स्वचालित रूप से हटाया नहीं गया था, और उस ( kubectl delete rs <name>) को हटाने के बाद , पॉड्स को हटाना संभव था।


0

उन स्‍थितियों के साथ, जिनमें स्‍टेटफुल सेट (या सेवाएं, नौकरी आदि) हैं, आप इस कमांड का उपयोग कर सकते हैं:

यह कमांड निर्दिष्ट में चलने वाली किसी भी चीज़ को समाप्त करता है <NAMESPACE>

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

और जबरदस्ती

kubectl -n <NAMESPACE> delete replicasets,deployments,jobs,service,pods,statefulsets --all --cascade=true --grace-period=0 --force
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.