มีการสร้าง Kubernetes pod เมื่อถูกลบ


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อะไร
Graham Dumpleton

1
คุณสามารถตรวจสอบkubectl get eventsเพื่อดูสิ่งที่สร้างวัตถุเหล่านี้ได้หรือไม่
Anirudh Ramanathan

3
ลองkubctl get rcดูว่า ReplicationController ถูกสร้างขึ้น หากเป็นเช่นนั้นให้ลบออกแล้วจึงลบพ็อด
MrE

3
คุณกำลังใช้ kubernetes รุ่นใด ขึ้นอยู่กับรุ่น kubernetes ของคุณหรือไม่ มันอาจทำงานแตกต่างกัน ตัวอย่างก่อนหน้า 1.2 มันสร้างการปรับใช้เสมอ kubectl get deployment
lwolf

19
หากใครบางคนจบลงที่นี่: - การลบการปรับใช้แก้ไขปัญหาให้ฉันได้ kubectl delete deployment <deployment_name>. ในการรับชื่อการนำไปใช้ให้ทำkubectl get deployments
Vasanth Sriram

คำตอบ:


291

คุณต้องลบการปรับใช้ซึ่งจะเป็นการลบพ็อดและชุดแบบจำลองhttps://github.com/kubernetes/kubernetes/issues/24137

ในการแสดงรายการการปรับใช้ทั้งหมด:

kubectl get deployments --all-namespaces

จากนั้นเพื่อลบการปรับใช้:

kubectl delete -n NAMESPACE deployment DEPLOYMENT

โดยที่ NAMESPACE คือเนมสเปซที่อยู่ในนั้นและ DEPLOYMENT เป็นส่วนnameหนึ่งของการปรับใช้

ในบางกรณีอาจเป็นเพราะงานหรือ daemonset ตรวจสอบสิ่งต่อไปนี้และเรียกใช้คำสั่งลบที่เหมาะสม

kubectl get jobs

kubectl get daemonsets.app --all-namespaces

kubectl get daemonsets.extensions --all-namespaces

1
คุณจะนำการปรับใช้กลับมาใช้ภายหลังได้อย่างไร
Jamey

1
@Jamey คุณสร้างมันอีกครั้งด้วยkubectl createคำสั่ง
Illya Gerasymchuk

1
ไม่จำเป็นต้องเป็นการปรับใช้ อาจเป็นงาน ดังนั้นอย่าลืมตรวจสอบkubectl get jobs
bucky

ในการลบประเภทวัตถุหลายประเภทไม่เพียง แต่การปรับใช้ลอง:kubectl delete replicasets,subscriptions,deployments,jobs,services,pods --all -n <namespace>
Noam Manos

19

แทนที่จะพยายามคิดว่ามันคือการใช้งาน, deamonset, statefulset ... หรืออะไร (ในกรณีของฉันมันเป็นคอนโทรลเลอร์การจำลองแบบที่เก็บทอดฝักใหม่ :) เพื่อที่จะตรวจสอบว่ามันเป็นอะไรที่ทอดภาพ รับทรัพยากรทั้งหมดด้วยคำสั่งนี้:

kubectl get all

แน่นอนคุณสามารถรับทรัพยากรทั้งหมดจาก namespaces ทั้งหมด:

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

ค้นหา replica-set ด้วยkubectl get replicasets.apps -n <namespace>(หรือ --all-namespaces)
Noam Manos

9

ระวังชุดรัฐที่ดี

kubectl get sts --all-namespaces

เพื่อลบชุด stateful ทั้งหมดในเนมสเปซ

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 อยู่ที่นั่นเพื่อฉัน ขอบคุณ! สิ่งนี้แก้ไขได้
Kevin C

6

ในบางกรณีพ็อดจะยังคงหายไปแม้ว่าจะลบการปรับใช้ก็ตาม ในกรณีที่จะบังคับลบคุณสามารถเรียกใช้คำสั่งด้านล่าง

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


นี้จะไม่สามารถแก้ปัญหาเมื่อฝักที่สร้างขึ้นโดยการปรับใช้งานหรือชนิดอื่น ๆ Recreateของตัวควบคุมหากประเภทกลยุทธ์ที่มีการตั้งค่า
SK Venkat

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>

ในกรณีของฉันฉันทำงานOpenShiftคลัสเตอร์กับ OLM - ผู้ประกอบการ Lifecycle Manager OLM เป็นผู้ควบคุมการปรับใช้ดังนั้นเมื่อฉันลบการปรับใช้นั้นไม่เพียงพอที่จะหยุดการรีสตาร์ท

เมื่อฉันลบOLMและการสมัครสมาชิกเท่านั้นการปรับใช้บริการและพ็อดจะหายไป

รายการแรกวัตถุ k8s ทั้งหมดใน namespace ของคุณ:

$ 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 ไม่อยู่ในรายการ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 

ตอนนี้ลบออบเจ็กต์ทั้งหมดรวมถึง OLMs การสมัครสมาชิกการปรับใช้ชุดเรพลิคาและอื่น ๆ :

$ 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

เมื่อพ็อดถูกสร้างใหม่โดยอัตโนมัติแม้ว่าจะลบพ็อดเองแล้วพ็อดจะถูกสร้างขึ้นโดยใช้การปรับใช้ เมื่อคุณสร้างการปรับใช้มันจะสร้าง ReplicaSet และ Pods โดยอัตโนมัติ ขึ้นอยู่กับจำนวนของแบบจำลองของพ็อดที่คุณพูดถึงในสคริปต์การปรับใช้ของคุณมันจะสร้างจำนวนพ็อพเหล่านั้นในตอนแรก เมื่อคุณพยายามลบพ็อดใด ๆ ด้วยตนเองมันจะสร้างพ็อดเหล่านั้นอีกครั้งโดยอัตโนมัติ

ใช่บางครั้งคุณต้องลบพ็อดด้วยแรง แต่ในกรณีนี้คำสั่งบังคับไม่ทำงาน


ฉันได้รับคำเตือนเมื่อฉันลองทำสิ่งนี้ที่พ็อดอาจใช้ชีวิตเป็นกระบวนการซอมบี้ดังนั้นไม่ใช่สิ่งที่ฉันต้องการ ..
Chanoch

4

แทนที่จะลบ NS คุณสามารถลองลบ replicaSet

kubectl get rs --all-namespaces

จากนั้นลบ replicaSet

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

ที่ทิ้งฉันไว้กับกลุ่ม Kubernetes ที่ว่างเปล่า:

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

สาเหตุหลักของคำถามที่ถามคือแอ็ตทริบิวต์ spec / deployment / replicasets strategy->typeซึ่งกำหนดสิ่งที่จะเกิดขึ้นเมื่อพ็อดจะถูกทำลาย (โดยนัยหรือโดยชัดแจ้ง) Recreateในกรณีของฉันก็คือ

ตาม @ Nomad's คำตอบลบการปรับใช้ / งาน / จำลองเป็นวิธีแก้ไขที่ง่ายเพื่อหลีกเลี่ยงการทดลองกับคอมโบที่ร้ายแรงก่อนที่จะทำคลัสเตอร์ให้วุ่นวายในฐานะผู้ใช้มือใหม่

ลองใช้คำสั่งต่อไปนี้เพื่อทำความเข้าใจกับเบื้องหลังแอ็คชั่นฉากก่อนกระโดดเข้าสู่การดีบั๊ก:

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

ด้วยการปรับใช้ที่มีชุด stateful (หรือบริการงาน ฯลฯ ) คุณสามารถใช้คำสั่งนี้:

คำสั่งนี้ยุติสิ่งใด ๆ ที่ทำงานในที่ระบุ <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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.