Kubernetes 포드를 삭제하면 다시 생성됩니다.


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 rcReplicationController이 생성 있는지. 그렇다면 삭제 한 다음 포드를 삭제하십시오.
MrE

3
어떤 버전의 kubernetes를 실행하고 있습니까? 당신의 kubernetes 버전에 따라? 다르게 동작 할 수 있습니다. 예를 들어 1.2 이전에는 항상 배포를 만들었습니다. kubectl get deployment
lwolf

19
누군가가 여기로 끝나는 경우 :-배포를 삭제하면 문제가 해결되었습니다. kubectl delete deployment <deployment_name>. 배치 이름을 얻으려면 어떻게kubectl get deployments
바산 스 스리 람

답변:


291

배포를 삭제해야합니다. 그러면 포드 및 복제본 세트가 삭제됩니다. https://github.com/kubernetes/kubernetes/issues/24137

모든 배포를 나열하려면

kubectl get deployments --all-namespaces

그런 다음 배치를 삭제하려면 다음을 수행하십시오.

kubectl delete -n NAMESPACE deployment DEPLOYMENT

여기서 NAMESPACE는 네임 스페이스이고 DEPLOYMENT는 배포의 네임 스페이스 name입니다.

경우에 따라 작업 또는 데몬 세트로 인해 실행 중일 수도 있습니다. 다음을 확인하고 적절한 삭제 명령을 실행하십시오.

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
버키

배포뿐만 아니라 여러 개체 유형을 삭제하려면 다음을 시도하십시오.kubectl delete replicasets,subscriptions,deployments,jobs,services,pods --all -n <namespace>
Noam Manos

19

배포, deamonset, statefulset ...인지 또는 무엇인지 파악하려고 시도하는 대신 (내 경우에는 새로운 포드에 걸쳐있는 복제 컨트롤러였습니다.) 이미지를 확장하는 것이 무엇인지 확인하기 위해 I 이 명령으로 모든 리소스를 얻었습니다.

kubectl get all

물론 모든 네임 스페이스에서 모든 리소스를 얻을 수도 있습니다.

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

다음으로 복제본 세트 찾기 kubectl get replicasets.apps -n <namespace>(또는 --all-namespaces)
Noam Manos

9

상태 저장 세트도 찾아보십시오

kubectl get sts --all-namespaces

네임 스페이스에서 모든 상태 저장 세트를 삭제하는 방법

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가 나를 위해있었습니다. 감사! 이것은 그것을 해결했다.
케빈 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>

필자의 경우 OLM- Operator Lifecycle Manager 와 함께 OpenShift 클러스터를 실행하고 있습니다. OLM은 배포를 제어하는 ​​사람이므로 배포를 삭제했을 때 포드가 다시 시작되는 것을 중지하기에 충분하지 않았습니다.

OLM 과 해당 구독을 삭제 한 경우에만 배포, 서비스 및 포드가 사라졌습니다.

먼저 네임 스페이스의 모든 k8s 객체를 나열하십시오.

$ 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 

이제 OLM, 구독, 배포, 복제 세트 등을 포함한 모든 개체를 삭제하십시오.

$ 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 및 포드가 생성됩니다. 배포 스크립트에서 언급 한 포드 복제본 수에 따라 처음에 해당 개수의 포드가 생성됩니다. 포드를 수동으로 삭제하려고하면 해당 포드가 자동으로 다시 생성됩니다.

예, 때로는 포드를 강제로 삭제해야합니다. 그러나이 경우 강제 명령이 작동하지 않습니다.


포드를 좀비 프로세스로 사용할 수 있다는 경고 메시지가 표시됩니다.
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

질문의 근본 원인은 배포 / 작업 / 복제 세트 사양 속성 strategy->type으로, 포드가 내재적으로 또는 명시 적으로 파괴 될 때 발생하는 상황을 정의합니다. 제 경우에는이었습니다 Recreate.

@ nomad의 답변에 따라 에 따라 배포 / 작업 / 복제 세트를 삭제하는 것은 초보자 사용자로 클러스터를 엉망으로 만들기 전에 치명적인 콤보를 실험하지 않는 간단한 수정입니다.

디버깅으로 뛰어 들기 전에 다음 명령을 사용하여 장면 뒤의 작업을 이해하십시오.

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

상태 저장 세트 (또는 서비스, 작업 등)가있는 배치에서는 다음 명령을 사용할 수 있습니다.

이 명령은 지정된 곳에서 실행되는 모든 것을 종료합니다 <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.