พ็อดติดอยู่ในสถานะยกเลิก


244

ฉันพยายามลบ a ReplicationControllerด้วย 12 พ็อดและฉันเห็นว่าพ็อดบางตัวติดอยู่ในTerminatingสถานะ

คลัสเตอร์ Kubernetes ของฉันประกอบด้วยโหนดเครื่องบินควบคุมหนึ่งโหนดและโหนดผู้ปฏิบัติงานสามโหนดติดตั้งบนเครื่องเสมือน Ubuntu

อะไรคือสาเหตุของปัญหานี้

NAME        READY     STATUS        RESTARTS   AGE
pod-186o2   1/1       Terminating   0          2h
pod-4b6qc   1/1       Terminating   0          2h
pod-8xl86   1/1       Terminating   0          1h
pod-d6htc   1/1       Terminating   0          1h
pod-vlzov   1/1       Terminating   0          1h

ตัวกำหนดตารางเวลาและคอนโทรลเลอร์ - ผู้จัดการกำลังทำงานอยู่หรือไม่
Antoine Cotten

1
อาจเกี่ยวข้องกับgithub.com/kubernetes/kubernetes/issues/51835
donhector

คำตอบ:


471

คุณสามารถใช้คำสั่งต่อไปนี้เพื่อลบ POD ได้

kubectl delete pod <PODNAME> --grace-period=0 --force --namespace <NAMESPACE>

3
นี่คือทางออกสำหรับฉันใน 1.2.4 หนึ่ง พ็อดสิ้นสุดลงทั้งคืนแล้ว
เมื่อ

6
ในกรณีของฉันฉันต้องเพิ่มตัวเลือกอีกหนึ่งตัวเลือก: --forceเพื่อให้ได้อุณหภูมิที่เพียงพอ
BMW

17
ฉันทำสิ่งนี้ในคลัสเตอร์ของฉันและดูเหมือนว่าพ็อดจะถูกลบออก แต่เมื่อฉันตรวจสอบโหนดโหนดนั้นคอนเทนเนอร์ยังคงทำงานอยู่ ฉันสิ้นสุดการรีสตาร์ท Docker บนโหนดเอง github.com/kubernetes/kubernetes/issues/25456โปรดระวังว่าคุณไม่ได้ซ่อนปัญหาระบบด้วยคำสั่งนี้
mqsoh

4
@mqsoh: แรงลบเพียงลบออกจากร้านค้า api-server (etcd) ทรัพยากรที่ถูกลบจริงอาจจบลงด้วยการทำงานไม่สิ้นสุด
บิต

8
"คำเตือน: การลบทันทีไม่รอการยืนยันว่าทรัพยากรที่รันอยู่ถูกยกเลิกทรัพยากรอาจทำงานต่อไปในคลัสเตอร์โดยไม่มีกำหนด" ทรัพยากรใดบ้าง
Akshay

57

บังคับลบพ็อด:

kubectl delete pod --grace-period=0 --force --namespace <NAMESPACE> <PODNAME>

--forceธงมีผลบังคับใช้


41
แต่คำถามที่แท้จริงสำหรับฉันคือ "ทำไมเราต้องหันมาใช้สิ่งนี้ตั้งแต่แรก?" มีสาเหตุอะไรบ้างที่ทำให้พ็อดอยู่ในสภาวะติดขัดภายใต้สภาพการทำงานปกติอื่น ๆ
Neverfox

2
ฉันสามารถยกตัวอย่างหนึ่งให้คุณได้เรามีจาวาคอนเทนเนอร์ที่ปิดระบบได้อย่างงดงาม แต่เป็นการเก็บขยะเองจนตายจึงไม่ตอบสนองต่อสัญญาณ
Aurelia

1
เป็นการดีที่จะให้เนมสเปซมิฉะนั้นในสภาพแวดล้อมที่มีหลายเนมสเปซคุณจะไม่พบพ็อดของคุณตามค่าเริ่มต้นโดยจะค้นหาในkube-systemเนมสเปซ
Daniel Andrei Mincă

ในการบังคับให้ลบพ็อดทั้งหมดใน namesapce ในครั้งเดียวktl get pods -o custom-columns=:metadata.name | xargs kubectl delete pod --force --grace-period=0
deepdive

21

ลบบล็อก finalizers ออกจากทรัพยากร (pod, การปรับใช้, ds ฯลฯ ... ) yaml:

"finalizers": [
  "foregroundDeletion"
]

1
ปริมาณถาวรได้ถูกลบหลังจากนี้ มันทำอะไรจริงๆ?
Raiyan

พ็อดของฉันที่ติดอยู่ในสถานะยกเลิกนั้นถูกนำออกทันที
Kuberchaun

นี่เป็นสิ่งเดียวที่แก้ไขพ็อดที่ติดอยู่สำหรับฉันเมื่อdelete -grace-period=0 --forceไม่ได้ทำ ฉันขอขอบคุณที่ให้รายละเอียดเกี่ยวกับสิ่งที่ทำเช่นนั้น
valorl

หน้านี้อธิบายเบื้องหน้าการลบ มันคือค่าข้อมูลเมตาที่ระบุว่าวัตถุนั้นอยู่ในขั้นตอนการลบ kubernetes.io/docs/concepts/workloads/controllers/ …
Sean Keane

14

คำตอบที่เป็นประโยชน์ - คุณสามารถลบพ็อดที่สิ้นสุดได้โดยเรียกใช้:

kubectl delete pod NAME --grace-period=0

คำตอบเชิงประวัติศาสตร์ - มีปัญหาในเวอร์ชัน 1.1 ซึ่งบางครั้งพ็อดติดอยู่ในสถานะการเลิกจ้างหากโหนดของพวกเขาถูกลบอย่างไม่สะอาดจากคลัสเตอร์


1
ฉันเดาว่าเป็นปัญหา ฉันปิดหนึ่ง minion vm โดยไม่ต้องลบออกจากโหนด นี่เป็นพฤติกรรมที่ยอมรับได้หรือไม่? หรือมีวิธีแก้ไขเพื่อลบพ็อดเหล่านั้นออกจาก kubernetes?
Dimuthu

ใช่วิธีแก้ปัญหาจนกระทั่งรุ่น 1.2 มาถึงคือการลบพ็อด
Alex Robinson

36
คุณสามารถบังคับให้ลบพ็อดที่มีจุดสิ้นสุดได้ด้วยkubectl delete pod NAME --grace-period=0
Clayton

3
เอกสารกล่าวว่าเมื่อทำงานคำขอจะถูกส่งไปยังภาชนะ แต่ถ้าหลังจากช่วงเวลาผ่อนผันแล้วภาชนะยังคงทำงานอยู่? ฉันได้รับฝักหลายอันติดอยู่บางตัวเขียนในระหว่างเดินทางบางคนอยู่ในโหนด replicationController ถูกลบและคอนเทนเนอร์ยังคงทำงานอยู่kubectl delete ...SIG_TERMTerminating
Quyen Nguyen Tuan

4
kubectl delete pod PODNAME --grace-period=0ทำงานให้ฉันตามที่ Clayton แนะนำ
Yogesh Jilhawar

13

ฉันพบคำสั่งนี้ตรงไปตรงมามากขึ้น:

for p in $(kubectl get pods | grep Terminating | awk '{print $1}'); do kubectl delete pod $p --grace-period=0 --force;done

มันจะลบพ็อดทั้งหมดในสถานะการยุติในเนมสเปซเริ่มต้น


1
ถ้าคุณต้องการเรียกใช้บนเนมสเปซอื่นเช่นการkube-systemใช้งาน:for p in $(kubectl get pods -n kube-system| grep Terminating | awk '{print $1}'); do kubectl delete pod $p --grace-period=0 --force -n kube-system;done
acrogenesis

8

ในกรณีของฉัน--forceตัวเลือกไม่ได้ผล ฉันยังเห็นพ็อดอยู่! มันติดอยู่ในโหมด Terminating / Unknown ดังนั้นหลังจากการวิ่ง

kubectl delete pods <pod> -n redis --grace-period=0 --force

ฉันวิ่ง

kubectl patch pod <pod> -p '{"metadata":{"finalizers":null}}'

2
ก่อนที่จะทำสิ่งนี้ควรอ่านkubernetes.io/docs/concepts/workloads/controllers/ …เพื่อทำความเข้าใจว่า finalizers คืออะไร นอกจากนี้การดูผู้เข้ารอบสุดท้ายโดยเฉพาะที่ติดอยู่อาจให้คำแนะนำว่าทำไมมันถึงติดและไม่ว่าจะปลอดภัยที่จะข้าม ...
Beni Cherniavsky-Paskin

5

หาก--grace-period=0ไม่ทำงานคุณสามารถทำสิ่งต่อไปนี้

kubectl delete pods <pod> --grace-period=0 --force

มีบางสถานการณ์ที่สิ่งนี้ดูเหมือนว่าจะใช้งานได้ แต่ไม่ได้ลบจริงๆ อาจต้องทำอย่างไรกับปัญหาที่ kubelet สูญเสียสถานะของพ็อดและไม่สามารถรับสถานะได้ดังนั้นจึงออกจาก .. (เช่นgithub.com/kubernetes/kubernetes/issues/51835 ) ฉันยังไม่พบวิธีที่จะกำจัดมันในตอนนี้
cgseller

3

ฉันสะดุดกับสิ่งนี้เมื่อเร็ว ๆ นี้เมื่อลบ namespace rook ceph - มันติดอยู่ในสถานะการเลิกจ้าง

สิ่งเดียวที่ช่วยให้ได้รับการลบ Kubernetes finalizer โดยการเรียกโดยตรง API k8s กับขดเป็นข้อเสนอแนะที่นี่

  • kubectl get namespace rook-ceph -o json > tmp.json
  • ลบ kubernetes finalizer ในtmp.json(ปล่อยอาร์เรย์ว่างไว้"finalizers": [])
  • เรียกใช้kubectl proxyในเทอร์มินัลอื่นเพื่อวัตถุประสงค์ในการตรวจสอบและเรียกใช้การร้องขอ curl ต่อไปยังพอร์ตที่ส่งคืน
  • curl -k -H "Content-Type: application/json" -X PUT --data-binary @tmp.json 127.0.0.1:8001/k8s/clusters/c-mzplp/api/v1/namespaces/rook-ceph/finalize
  • namespace หายไป

รายละเอียดการแยกโกง Ceph ที่นี่


3

คำถามเดิมคือ " สิ่งที่อาจเป็นสาเหตุของปัญหานี้หรือไม่ " และคำตอบคือได้หารือในที่https://github.com/kubernetes/kubernetes/issues/51835 & https://github.com/kubernetes/kubernetes/issues / 65569 & ดูhttps://www.bountysource.com/issues/33241128-unable-to-remove-a-stopped-container-device-or-resource-busy

มันเกิดจากนักเทียบท่าเมารั่วใน namespace อื่น ๆ

คุณสามารถเข้าสู่ระบบเพื่อโฮสต์ pod เพื่อตรวจสอบ

minikube ssh
docker container ps | grep <id>
docker container stop <id> 

ฉันไม่อยากจะเชื่อเลยว่านี่เป็นคำตอบที่ถูกโหวตน้อยและไม่มีความคิดเห็นเดียว ในขณะที่คำตอบอื่น ๆ ที่อยู่วิธีการแก้ไขหรือแก้ไขปัญหา OP ถามอย่างชัดเจนด้วยเหตุผลว่าทำไมสภาพที่เกิดขึ้นในสถานที่แรก
MisterStrickland

0

ฉันสะดุดเมื่อเร็ว ๆ นี้เพื่อเพิ่มทรัพยากรในคลัสเตอร์ของฉัน นี่คือคำสั่งที่จะลบพวกเขาทั้งหมด

kubectl get pods --all-namespaces | grep Terminating | while read line; do 
pod_name=$(echo $line | awk '{print $2}' ) name_space=$(echo $line | awk 
'{print $1}' ); kubectl delete pods $pod_name -n $name_space --grace-period=0 --force; 
done

หวังว่านี้ช่วยคนที่อ่านนี้

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