Kubernetes pod được tạo lại khi bị xóa


151

Tôi đã bắt đầu pods với lệnh

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

Đã xảy ra lỗi và bây giờ tôi không thể xóa cái này Pod.

Tôi đã thử sử dụng các phương pháp được mô tả dưới đây nhưng Podvẫn tiếp tục được tạo lại.

$ 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
Bạn có bằng cách nào đó quản lý để tạo một bộ điều khiển nhân rộng bằng cách chuyển các đối số sai. Bạn nhận được kubectl get all -o namegì?
Graham Dumpleton

1
Bạn có thể kiểm tra kubectl get eventsxem những gì đang tạo ra các đối tượng này?
Anirudh Ramanathan

3
hãy thử kubctl get rcxem nếu một bản sao trình điều khiển đã được tạo ra. Nếu vậy, xóa nó, sau đó xóa các pod.
MrE

3
bạn đang chạy phiên bản nào của kubernetes? Tùy thuộc vào phiên bản kubernetes của bạn? Nó có thể cư xử khác đi. ví dụ trước 1.2 nó luôn tạo ra triển khai. kubectl get deployment
lwolf

19
Nếu ai đó kết thúc ở đây: - Xóa các triển khai đã giải quyết vấn đề cho tôi. kubectl delete deployment <deployment_name>. Để có được tên triển khai, hãy làmkubectl get deployments
Vasanth Sriram

Câu trả lời:


290

Bạn cần xóa việc triển khai, lần lượt sẽ xóa các nhóm và bộ bản sao https://github.com/kubernetes/kubernetes/issues/24137

Để liệt kê tất cả các triển khai:

kubectl get deployments --all-namespaces

Sau đó để xóa việc triển khai:

kubectl delete -n NAMESPACE deployment DEPLOYMENT

Trong đó NnamPACE là không gian tên, và NỀN TẢNG là namenơi triển khai.

Trong một số trường hợp, nó cũng có thể chạy do một công việc hoặc trình nền. Kiểm tra như sau và chạy lệnh xóa thích hợp của họ.

kubectl get jobs

kubectl get daemonsets.app --all-namespaces

kubectl get daemonsets.extensions --all-namespaces

1
Làm thế nào để bạn đưa việc triển khai trở lại sau đó?
Jamey

1
@Jamey bạn tạo lại nó bằng kubectl createlệnh.
Illya Gerasymchuk

1
không cần phải là một triển khai. có thể là một công việc vì vậy hãy chắc chắn cũng kiểm trakubectl get jobs
bucky

Để xóa nhiều loại đối tượng, không chỉ triển khai, hãy thử:kubectl delete replicasets,subscriptions,deployments,jobs,services,pods --all -n <namespace>
Noam Manos

19

Thay vì cố gắng tìm hiểu xem đó là một triển khai, deamonset, statefulset ... hay cái gì (trong trường hợp của tôi, nó là một bộ điều khiển sao chép tiếp tục kéo dài các nhóm mới :) có tất cả các tài nguyên với lệnh này:

kubectl get all

Tất nhiên bạn cũng có thể nhận được tất cả tài nguyên từ tất cả các không gian tên:

kubectl get all --all-namespaces

hoặc xác định không gian tên bạn muốn kiểm tra:

kubectl get all -n NAMESPACE_NAME

Khi tôi thấy bộ điều khiển sao chép chịu trách nhiệm cho sự cố của mình, tôi đã xóa nó:

kubectl delete replicationcontroller/CONTROLLER_NAME


14

nếu nhóm của bạn có tên như thế name-xxx-yyy, nó có thể được kiểm soát bởi một bản sao.apps có tên name-xxx, bạn nên xóa bản sao đó trước khi xóa nhóm

kubectl delete replicasets.apps name-xxx


1
Cảm ơn! Đối với trường hợp của tôi, đó là một công việc cụ thể đã được tạo lại nó. Vì vậy:kubectl delete --all jobs -n <namespace>
yclian

Tìm bản sao được đặt với kubectl get replicasets.apps -n <namespace>(hoặc - tất cả các không gian tên)
Noam Manos

9

Xem ra cho các bộ trạng thái là tốt

kubectl get sts --all-namespaces

để xóa tất cả các tập hợp trạng thái trong một không gian tên

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

xóa từng cái một

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

gitlab-gitaly đã ở đó cho tôi. Cảm ơn! Điều này đã giải quyết nó.
Kevin C

6

Trong một số trường hợp, các nhóm sẽ vẫn không biến mất ngay cả khi xóa việc triển khai. Trong trường hợp đó để buộc xóa chúng, bạn có thể chạy lệnh dưới đây.

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


Điều này sẽ không giải quyết vấn đề khi nhóm được tạo bởi triển khai, công việc hoặc bất kỳ loại bộ điều khiển nào khác nếu loại chiến lược được đặt thành Recreate.
SK Venkat

5

Điều này sẽ cung cấp thông tin về tất cả các nhóm, triển khai, dịch vụ và công việc trong không gian tên.

kubectl get pods,services, deployments, jobs

nhóm có thể được tạo bởi triển khai hoặc công việc

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

Nếu bạn xóa việc triển khai hoặc công việc thì có thể dừng khởi động lại các nhóm.


5

Nhiều câu trả lời ở đây cho biết để xóa một đối tượng k8s cụ thể, nhưng bạn có thể xóa nhiều đối tượng cùng một lúc, thay vì từng đối tượng một:

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

Trong trường hợp của tôi, tôi đang chạy cụm OpenShift với OLM - Trình quản lý vòng đời của người vận hành . OLM là người kiểm soát việc triển khai, vì vậy khi tôi xóa việc triển khai, việc ngăn chặn các nhóm khởi động lại là không đủ.

Chỉ khi tôi xóa OLMđăng ký của nó , việc triển khai, dịch vụ và nhóm đã biến mất.

Đầu tiên liệt kê tất cả các đối tượng k8s trong không gian tên của bạn:

$ 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 không được liệt kê cùng get all, vì vậy tôi tìm kiếm cụ thể:

$ 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 

Bây giờ xóa tất cả các đối tượng, bao gồm OLM, đăng ký, triển khai, bộ bản sao, v.v .:

$ 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

Liệt kê lại các đối tượng - tất cả đã biến mất:

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

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

4

Khi nhóm được tự động tạo lại ngay cả sau khi xóa nhóm theo cách thủ công, thì các nhóm đó đã được tạo bằng cách sử dụng Triển khai. Khi bạn tạo một triển khai, nó sẽ tự động tạo Bản sao và Pods. Tùy thuộc vào số lượng bản sao của nhóm bạn đã đề cập trong tập lệnh triển khai, nó sẽ tạo ra số lượng nhóm đó ban đầu. Khi bạn cố gắng xóa bất kỳ nhóm thủ công nào, nó sẽ tự động tạo lại các nhóm đó.

Có, đôi khi bạn cần phải xóa các nhóm bằng vũ lực. Nhưng trong trường hợp này, lệnh lực lượng không hoạt động.


Tôi nhận được một cảnh báo khi tôi thử điều này rằng nhóm có thể sống như một quá trình zombie nên không phải là điều tôi muốn ..
Chanoch

4

Thay vì xóa NS, bạn có thể thử xóa bản sao

kubectl get rs --all-namespaces

Sau đó xóa bản sao

kubectl delete rs your_app_name

2

Sau khi thực hiện một hướng dẫn tương tác, tôi đã kết thúc với một loạt các nhóm, dịch vụ, triển khai:

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

Để dọn dẹp mọi thứ, delete --alllàm việc tốt:

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

Điều đó để lại cho tôi (cái mà tôi nghĩ là) một cụm Kubernetes trống:

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

Nếu bạn có một công việc tiếp tục chạy, bạn cần tìm kiếm công việc và xóa nó:

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

kubectl delete job <job-name>


1

Bạn có thể kubectl get replicasetskiểm tra triển khai cũ dựa trên tuổi hoặc thời gian

Xóa triển khai cũ dựa trên thời gian nếu bạn muốn xóa cùng một nhóm ứng dụng đang chạy

kubectl delete replicasets <Name of replicaset>

1

Tôi cũng phải đối mặt với vấn đề, tôi đã sử dụng lệnh dưới đây để xóa triển khai.

kubectl delete deployments DEPLOYMENT_NAME

nhưng các pod vẫn được tạo lại, vì vậy tôi đã kiểm tra Bộ bản sao bằng cách sử dụng lệnh bên dưới

kubectl get rs

sau đó chỉnh sửa bản sao thành 1 thành 0

kubectl edit rs REPICASET_NAME

1

Nguyên nhân gốc rễ cho câu hỏi được hỏi là thuộc tính spec triển khai / công việc / bản sao strategy->typexác định điều gì sẽ xảy ra khi nhóm sẽ bị hủy (hoàn toàn hoặc rõ ràng). Trong trường hợp của tôi, nó đã được Recreate.

Theo câu trả lời của mỗi người du mục , xóa việc triển khai / công việc / bản sao là cách khắc phục đơn giản để tránh thử nghiệm các combo chết người trước khi làm rối cụm người dùng như một người dùng mới.

Hãy thử các lệnh sau để hiểu các hành động phía sau cảnh trước khi nhảy vào gỡ lỗi:

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

1

Trong trường hợp của tôi, tôi đã triển khai thông qua tệp YAML kubectl apply -f deployment.yamlvà giải pháp có vẻ là xóa quakubectl delete -f deployment.yaml


0

Tôi đã gặp một vấn đề tương tự: sau khi xóa triển khai ( kubectl delete deploy <name>), các nhóm tiếp tục "Chạy" và nơi tự động được tạo lại sau khi xóa ( kubectl delete po <name>).

Hóa ra, bộ bản sao được liên kết không tự động bị xóa vì một số lý do và sau khi xóa ( kubectl delete rs <name>), có thể xóa các nhóm.


0

Với các triển khai có các bộ trạng thái (hoặc dịch vụ, công việc, v.v.), bạn có thể sử dụng lệnh này:

Lệnh này chấm dứt bất cứ thứ gì chạy trong chỉ định <NAMESPACE>

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

Và mạnh mẽ

kubectl -n <NAMESPACE> delete replicasets,deployments,jobs,service,pods,statefulsets --all --cascade=true --grace-period=0 --force
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.