削除するとKubernetesポッドが再作成される


151

コマンドでポッドを開始しました

$ 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 2016年

1
kubectl get eventsこれらのオブジェクトを作成しているものを確認できますか?
Anirudh Ramanathan 2016

3
試すkubctl get rcReplicationControllerが作成されたかどうかを確認します。その場合は、それを削除してから、ポッドを削除します。
MrE 2016年

3
実行しているkubernetesのバージョンは何ですか?Kubernetesのバージョンによっては、動作が異なる場合があります。たとえば1.2より前は、常にデプロイメントを作成していました。kubectl get deployment
lwolf '19年

19
誰かがここで終了した場合:-デプロイメントを削除すると問題が解決しました。kubectl delete deployment <deployment_name>。デプロイメント名を取得するには、次のようにしますkubectl get deployments
Vasanth Sriram

回答:


290

デプロイを削除する必要があります。これにより、ポッドとレプリカセットが削除されます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>
ノーム・マノスに

19

それがデプロイメントであるか、デーモンセットであるか、ステートフルセットであるか、または何であるかを理解しようとする代わりに(私の場合、それは新しいポッドをスパンし続けていたレプリケーションコントローラーでした:)イメージをスパンし続けていたものを特定するために、私はこのコマンドですべてのリソースを取得しました:

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 2018年

kubectl get replicasets.apps -n <namespace>(または--all-namespaces)を使用してレプリカセットを検索する
Noam Manos

9

ステートフルセットにも注意してください

kubectl get sts --all-namespaces

名前空間内のすべてのステートフルセットを削除するには

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

それらを1つずつ削除するには

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

gitlab-gitalyがありました。ありがとう!これで解決しました。
Kevin 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オブジェクトを削除するように指示していますが、複数のオブジェクトを1つずつではなく、一度に削除することができます。

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

私の場合、OpenShiftクラスターをOLM- Operator Lifecycle Managerで実行しています。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ポッドが(暗黙的または明示的に)破棄されるときに何が起こるかを定義する、deployment / job / replicasets spec属性でした。私の場合、それは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.