Điều gì sẽ xảy ra với các nhóm bị đuổi khỏi kubernetes?


82

Tôi vừa thấy một số nhóm của mình bị kubernetes đuổi ra khỏi nhà. Điều gì sẽ xảy ra với họ? chỉ quanh quẩn như vậy hay tôi phải xóa chúng theo cách thủ công?


3
Chứng kiến ​​hành vi tương tự, tôi có một vỏ hiện Evictedtrạng đã 13 ngày nay. Có vẻ như các nhóm bị loại bỏ không bị xóa (hoặc có thể đó chỉ là một lỗi).
Elouan Keryell-Even

bộ điều khiển podgc sẽ xác nhận lại các nhóm Không thành công / Thành công khi đạt đến ngưỡng có thể định cấu hình.
zhb

2
Các nhóm của tôi đã bị đuổi ra khỏi nhà và có tổng số là 40. Vậy tôi có bị tính phí mỗi tháng cho các nhóm bị đuổi đó không?
Anant

Một loạt các container đã bị loại bỏ nhưng tôi vẫn có 2 container đang hoạt động như mong đợi. Không thành công là do tài nguyên thấp ( DiskPressure) có thể được tìm thấy bằng cách sử dụngkubectl describe pods my-pod-name --namespace prod
Prayagupd

Câu trả lời:


78

Một cách giải quyết nhanh chóng mà tôi sử dụng là xóa tất cả các nhóm bị đuổi theo cách thủ công sau khi xảy ra sự cố. Bạn có thể sử dụng lệnh này:

kubectl get pods --all-namespaces -o json | jq '.items[] | select(.status.reason!=null) | select(.status.reason | contains("Evicted")) | "kubectl delete pods \(.metadata.name) -n \(.metadata.namespace)"' | xargs -n 1 bash -c


Bạn phải có lỗi đánh máy, -ađối số không hợp lệ.
Ilya Suzdalnitski

5
Câu trả lời này (và các câu trả lời tương tự) không trả lời câu hỏi OP "Điều gì sẽ xảy ra với họ [nếu bạn không làm gì]?"
Oliver

56

Để xóa các nhóm ở trạng thái Không thành công trong không gian tên default

kubectl -n default delete pods --field-selector=status.phase=Failed

1
Thật kỳ lạ, điều này không hiển thị bất kỳ khi nào status.phase=Evicted. Tôi đã quản lý để làm điều này bởi kubectl -n default delete pods --field-selector=status.phase!=Running. Nhưng hãy cẩn thận, điều này sẽ xóa mọi thứ
n3o

3
Tôi đoán nó có thể hữu ích để chạy kubectl -n default get pods --field-selector=status.phase=Failedlúc đầu.
tên người dùng

Nó không giúp tôi loại bỏ Evictedvỏ bọc.
robertodecurnex

19

Các nhóm bị loại bỏ phải được xóa theo cách thủ công. Bạn có thể sử dụng lệnh sau để xóa tất cả các nhóm ở Errortrạng thái.

kubectl get pods --all-namespaces --field-selector 'status.phase==Failed' -o json | kubectl delete -f -

14

Tùy thuộc vào việc đáp ứng ngưỡng loại bỏ mềm hay cứng , các Vùng chứa trong Pod sẽ bị chấm dứt có hoặc không có thời gian gia hạn, PodPhasesẽ được đánh dấu là Failedvà Pod bị xóa. Nếu Ứng dụng của bạn chạy như một phần của Triển khai, chẳng hạn, sẽ có một Pod khác được tạo và lập lịch bởi Kubernetes - có thể là trên một Node khác không vượt quá ngưỡng loại bỏ của nó.

Lưu ý rằng việc loại bỏ không nhất thiết phải do ngưỡng gây ra mà còn có thể được gọi thông qua kubectl drainđể làm trống một nút hoặc theo cách thủ công thông qua Kubernetes API .


3
yeah, pod của tôi là từ một triển khai, và tôi làm thấy pod khác đang chạy trên nút khác, nhưng những vỏ đuổi trước đó cũng đang có
reachlin

Làm thế nào để bạn xác định rằng họ "cũng ở đó"? Lệnh nào hiển thị chính xác điều đó cho bạn?
Simon Tesar,

justkubectl get pods -n mynamespace
reachlin

Ở trạng thái nào? Nói gì kubectl describe pod <pod>?
Simon Tesar

1
Không phải OP nhưng tôi có vấn đề này. kubectl describe cho biết "Trạng thái: Không thành công Lý do: Đã loại bỏ Thông báo: Pod Nút sắp hết tài nguyên: [MemoryPressure]."
Bryan

5

Trong trường hợp bạn có các nhóm có Completedtrạng thái mà bạn muốn giữ lại:

kubectl get pods --all-namespaces --field-selector 'status.phase==Failed' -o json | kubectl delete -f -

5

Kube-controller-managertồn tại theo mặc định với cài đặt K8s đang hoạt động. Có vẻ như mặc định là tối đa 12500 nhóm kết thúc trước khi GC hoạt động.

Trực tiếp từ tài liệu K8s: https://kubernetes.io/docs/reference/command-line-tools-reference/kube-controller-manager/#kube-controller-manager

--termina-pod-gc-ngưỡng int32 Mặc định: 12500
Số lượng nhóm đã kết thúc có thể tồn tại trước khi bộ thu gom rác của nhóm bị kết thúc bắt đầu xóa các nhóm đã kết thúc. Nếu <= 0, bộ thu gom nhóm rác đã kết thúc bị vô hiệu hóa.


Tôi có các nhóm kube-controller-manager trên các nút chính của mình. Nhưng tôi nên sửa đổi cờ này như thế nào? Nếu tôi muốn sử dụng, kubectl edit pod kube-controller-manager-<master_name> -n kube-systemnó sẽ pod is invalidbáo lỗi sau khi lưu tệp cấu hình.
Ali Tou

4

Chỉ trong trường hợp ai đó muốn tự động xóa tất cả các nhóm bị đuổi khỏi tất cả các không gian tên:

  • Powershell
    Foreach( $x in (kubectl get po --all-namespaces --field-selector=status.phase=Failed --no-headers -o custom-columns=:metadata.name)) {kubectl delete po $x --all-namespaces }
  • Bash
kubectl get po --all-namespaces --field-selector=status.phase=Failed --no-headers -o custom-columns=:metadata.name | xargs kubectl delete po --all-namespaces

3

OpenShift tương đương với lệnh của Kalvin để xóa tất cả các nhóm 'Đã loại bỏ':

eval "$(oc get pods --all-namespaces -o json | jq -r '.items[] | select(.status.phase == "Failed" and .status.reason == "Evicted") | "oc delete pod --namespace " + .metadata.namespace + " " + .metadata.name')"

3

Thêm một lệnh bash để xóa các nhóm bị đuổi

kubectl get pods | grep Evicted | awk '{print $1}' | xargs kubectl delete pod

2

Để xóa tất cả các nhóm Evictedbằng lực lượng, bạn có thể thử lệnh một dòng sau:

$ kubectl get pod -A | sed -nr '/Evicted/s/(^\S+)\s+(\S+).*/kubectl -n \1 delete pod \2 --force --grace-period=0/e'

Mẹo: sử dụng công cụ psửa đổi của slệnh sedthay vì esẽ chỉ in lệnh thực để thực hiện công việc xóa:

$ kubectl get pod -A | sed -nr '/Evicted/s/(^\S+)\s+(\S+).*/kubectl -n \1 delete pod \2 --force --grace-period=0/p'

1

Đây là hướng dẫn 'chính thức' về cách mã hóa ngưỡng cứng (nếu bạn không muốn thấy quá nhiều nhóm bị loại bỏ): kube-Controlll-manager

Nhưng một vấn đề đã biết là làm thế nào để cài đặt kube-control-manager ...


Vui lòng tư vấn về cách cài đặt được đề cập có thể đạt được, nếu nó gặp rắc rối.
MandyShaw

Tôi cũng không biết câu trả lời đó là lý do tại sao tôi đề cập đến nó. Và OP đã không đề cập đến hệ thống anh ấy đang sử dụng và tôi không biết liệu anh ấy có gặp vấn đề tương tự hay không. BTW, downvote là SIÊU THÚ VỊ.
tikael, 30/07/18

Bạn sẽ nghĩ rằng tôi đã làm tốt hơn khi thêm ý tưởng của bạn dưới dạng nhận xét vì nó không trả lời đầy đủ câu hỏi (đó là lý do tại sao tôi từ chối nó - xin lỗi nhưng nó xảy ra với tất cả chúng ta, bao gồm cả tôi vừa rồi).
MandyShaw,

kiểm tra tất cả các câu trả lời khác ở trên, OP hỏi điều gì đã xảy ra và bao nhiêu người trong số họ đã trả lời câu hỏi đó và bao nhiêu người trong số họ cung cấp cách xóa nhóm trục xuất?
tikael,

1

Một cách khác vẫn với awk .

Để tránh bất kỳ lỗi nào của con người có thể khiến tôi phát điên (xóa các nhóm mong muốn), tôi kiểm tra trước kết quả của get podslệnh:

kubectl -n my-ns get pods --no-headers --field-selector=status.phase=Failed     

Nếu điều đó có vẻ tốt, chúng ta bắt đầu:

kubectl -n my-ns get pods --no-headers --field-selector=status.phase=Failed | \
awk '{system("kubectl -n my-ns delete pods " $1)}'

1

Lệnh dưới đây xóa tất cả các nhóm bị lỗi khỏi tất cả các không gian tên

kubectl get pods -A | grep Evicted | awk '{print $2 " -n " $1}' | xargs -n 3 kubectl delete pod

-1

lệnh dưới đây sẽ lấy tất cả các nhóm bị đuổi khỏi vùng tên mặc định và xóa chúng

kubectl get pods | grep Evicted | awk '{print$1}' | xargs -I {} kubectl delete pods/{}


1
Các câu trả lời chỉ có mã không được khuyến khích, vì nó sẽ không hữu ích như một câu trả lời có ngữ cảnh được giải thích giúp ích cho cộng đồng về lâu dài.
Arun Vinoth
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.