Pods bị kẹt trong trạng thái Chấm dứt


244

Tôi đã cố gắng xóa một ReplicationControllervới 12 nhóm và tôi có thể thấy rằng một số nhóm bị kẹt trong Terminatingtrạng thái.

Cụm Kubernetes của tôi bao gồm một nút mặt phẳng điều khiển và ba nút worker được cài đặt trên các máy ảo Ubuntu.

Điều gì có thể là lý do cho vấn đề này?

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

Bộ lập lịch và trình quản lý điều khiển có chạy không?
Antoine Cotten

Câu trả lời:


471

Bạn có thể sử dụng lệnh sau để xóa POD mạnh mẽ.

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

3
đây là giải pháp cho tôi trên 1.2.4. Pods đã chấm dứt tất cả các đêm
tback

6
Trong trường hợp của tôi, tôi phải thêm một tùy chọn nữa: --forceđể có được các khung được đặt theo nhịp.
BMW

17
Tôi đã làm điều này trong cụm của tôi và pod dường như bị xóa nhưng khi tôi kiểm tra nút thì container vẫn đang chạy. Tôi đã kết thúc việc khởi động lại Docker trên nút. github.com/kubernetes/kubernetes/issues/25456 Hãy cẩn thận, bạn không che giấu một vấn đề hệ thống với lệnh này.
mqsoh

4
@mqsoh: Lực lượng xóa chỉ cần xóa nó khỏi cửa hàng api-server (etcd), tài nguyên thực tế bị xóa có thể sẽ chạy vô thời hạn.
bit

8
"cảnh báo: Xóa ngay lập tức không chờ xác nhận rằng tài nguyên đang chạy đã bị chấm dứt. Tài nguyên có thể tiếp tục chạy trên cụm vô thời hạn" Tài nguyên nào?
Akshay

57

Buộc xóa nhóm:

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

Các --forcelá cờ là bắt buộc.


41
Nhưng câu hỏi thực sự cho tôi là "tại sao chúng ta phải dùng đến điều này ngay từ đầu?" Những loại điều gì gây ra pod để có được trong trạng thái bị mắc kẹt trong điều kiện hoạt động bình thường khác?
neverfox

2
Chà, tôi có thể cho bạn một ví dụ, chúng tôi có một thùng chứa java đã tắt máy duyên dáng, nhưng đã tự thu gom rác đến chết, do đó không phản ứng với tín hiệu.
Aurelia

1
Thật tốt khi cung cấp không gian tên, nếu không, trong môi trường nhiều không gian tên, pod của bạn sẽ không được tìm thấy, theo mặc định, nó sẽ tìm trong kube-systemkhông gian tên.
Daniel Andrei Mincă

Để buộc xóa tất cả các nhóm trong một tên gọi cùng một lúcktl get pods -o custom-columns=:metadata.name | xargs kubectl delete pod --force --grace-period=0
sâu

21

Xóa khối quyết toán khỏi tài nguyên (nhóm, triển khai, DS, v.v.) yaml:

"finalizers": [
  "foregroundDeletion"
]

1
Khối lượng liên tục đã bị xóa sau này. Nó thực sự làm gì?
raiyan

Pod của tôi bị kẹt trong trạng thái chấm dứt đã được gỡ bỏ ngay lập tức.
Kuberchaun

Đây là điều duy nhất cố định pod bị kẹt cho tôi khi delete -grace-period=0 --forcekhông. Tôi cũng đánh giá cao một số chi tiết về những gì nó làm chính xác, mặc dù.
valorl

Trang này giải thích foregroundDeletion. Đó là một giá trị dữ liệu meta cho biết đối tượng đang trong quá trình xóa. kubernetes.io/docs/con accept / workloads / controlers / từ
Sean Keane

14

Câu trả lời thực tế - bạn luôn có thể xóa một nhóm kết thúc bằng cách chạy:

kubectl delete pod NAME --grace-period=0

Câu trả lời lịch sử - Có một vấn đề trong phiên bản 1.1 khi đôi khi các nhóm bị mắc kẹt trong trạng thái Chấm dứt nếu các nút của chúng bị xóa không rõ ràng khỏi cụm.


1
Tôi đoán đó là vấn đề. Tôi tắt nguồn một minion vm mà không loại bỏ khỏi các nút. Đây có phải là một hành vi chấp nhận được? Hoặc có một sửa chữa để loại bỏ những quả từ kubernetes?
Dimuthu

Vâng, cách giải quyết cho đến khi phiên bản 1.2 xuất hiện là xóa các nhóm.
Alex Robinson

36
Bạn luôn có thể buộc xóa một nhóm kết thúc bằngkubectl delete pod NAME --grace-period=0
Clayton

3
Tài liệu cho biết khi chạy kubectl delete ...một SIG_TERMyêu cầu sẽ được gửi đến container. Nhưng nếu sau thời gian ân hạn, container vẫn chạy thì sao? Tôi đã nhận được một loạt các pod bị mắc kẹt Terminating, một số được viết ra, một số trong nodejs. Bộ điều khiển sao chép đã bị xóa và container vẫn đang chạy
Quyên Nguyễn Tuấn

4
kubectl delete pod PODNAME --grace-period=0làm việc cho tôi theo đề nghị của Clayton.
Yogesh Jilhawar

12

Tôi thấy lệnh này đơn giản hơn:

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

Nó sẽ xóa tất cả các nhóm trong trạng thái Kết thúc trong không gian tên mặc định.


1
Nếu bạn muốn chạy nó trên một không gian tên khác như kube-systemsử dụng: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

Trong trường hợp của tôi, --forcetùy chọn không hoạt động tốt. Tôi vẫn có thể nhìn thấy cái kén! Nó bị kẹt trong chế độ Chấm dứt / Không xác định. Vì vậy, sau khi chạy

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

Tôi đã chạy

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

2
Trước khi làm điều này, đáng để đọc kubernetes.io/docs/con accept / workloads / controlers / cảm để hiểu những gì là cuối cùng. Ngoài ra, nhìn vào bộ hoàn thiện cụ thể bị kẹt có thể đưa ra gợi ý tại sao nó bị kẹt và liệu có an toàn để vượt qua ...
Beni Cherniavsky-Paskin

5

Nếu --grace-period=0không hoạt động thì bạn có thể làm:

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

Có một số tình huống có vẻ như nó hoạt động nhưng nó không thực sự xóa. Nó có thể phải làm với các vấn đề trong đó kubelet mất trạng thái của nhóm và không thể lấy trạng thái nên bỏ nó .. (ví dụ: github.com/kubernetes/kubernetes/issues/51835 ). Tôi chưa tìm được cách nào để thanh lọc nó.
Csseller

3

Tôi đã vấp phải điều này gần đây khi loại bỏ không gian tên ceph rook - nó bị kẹt trong trạng thái Chấm dứt.

Điều duy nhất đã giúp là loại bỏ kubernetes cuối cùng bằng cách gọi trực tiếp api k8s với curl như đề xuất ở đây .

  • kubectl get namespace rook-ceph -o json > tmp.json
  • xóa bộ hoàn thiện kubernetes trong tmp.json(để lại mảng trống "finalizers": [])
  • chạy kubectl proxytrong một thiết bị đầu cuối khác cho mục đích xác thực và chạy theo yêu cầu curl đến cổng được trả lại
  • 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
  • không gian tên đã biến mất

Chi tiết rook ceph rách đây .


3

Câu hỏi ban đầu là " Lý do cho vấn đề này là gì? " Và câu trả lời được thảo luận tại https://github.com/kubernetes/kubernetes/issues/51835 & https://github.com/kubernetes/kubernetes/issues / 65569 và xem https://www.bountysource.com/issues/33241128-unable-to-remove-a-stopped-container-device-or-resource-busy

Nó gây ra bởi docker mount bị rò rỉ vào một số không gian tên khác.

Bạn có thể đăng nhập vào máy chủ pod để điều tra.

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

Tôi không thể tin rằng đây là câu trả lời ít được đánh giá cao nhất và không có một bình luận nào. Trong khi tất cả các câu trả lời khác giải quyết các cách khắc phục hoặc khắc phục sự cố, OP rõ ràng đã hỏi lý do tại sao điều kiện xảy ra ngay từ đầu.
MisterStrickland

0

Tôi tình cờ phát hiện ra điều này gần đây để giải phóng tài nguyên trong cụm của tôi. Đây là lệnh để xóa tất cả.

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

hy vọng điều này sẽ giúp những người đọc nó

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.