web-dev-qa-db-ja.com

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

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

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

何かがうまくいかなかったので、以下の方法で試したこのポッドを削除できませんが、それ自体を再作成し続けます

# 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
72
yman

展開を削除する必要があります。これにより、ポッドとレプリカセットが削除されます https://github.com/kubernetes/kubernetes/issues/24137

すべての展開を一覧表示するには:

kubectl get deployments --all-namespaces

次に、展開を削除するには:

kubectl delete -n NAMESPACE deployment DEPLOYMENT

NAMESPACEはそれが含まれるネームスペースであり、DEPLOYMENTはデプロイメントのnameです。

145
nomad

ポッドの名前がname-xxx-yyyの場合、name-xxxというreplicasets.appsで制御できます。ポッドを削除する前に、まずそのレプリカセットを削除する必要があります

kubectl delete replicasets.apps name-xxx

11
Hieu Vo

場合によっては、展開を削除してもポッドが消えないことがあります。その場合、それらを強制的に削除するには、以下のコマンドを実行できます。

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

6
emirhosseini

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

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
5
M A

それが展開、deamonset、statefulset ...であるかどうかを把握しようとする代わりに、(私の場合は新しいポッドにまたがっていたのはレプリケーションコントローラーでした:)イメージにまたがり続けたものを判断するためにこのコマンドですべてのリソースを取得しました:

kubectl get all

もちろん、すべての名前空間からすべてのリソースを取得することもできます。

kubectl get all --all-namespaces

または、検査するネームスペースを定義します。

kubectl get all -n NAMESPACE_NAME

レプリケーションコントローラーが問題の原因であることがわかったら、それを削除しました。

kubectl delete replicationcontroller/CONTROLLER_NAME

4
Dawid Gorczyca

ポッドを手動で削除した後でもポッドが自動的に再作成される場合、それらのポッドは展開を使用して作成されています。展開を作成すると、ReplicaSetとPodsが自動的に作成されます。展開スクリプトで指定したポッドのレプリカの数に応じて、最初にこれらの数のポッドが作成されます。ポッドを手動で削除しようとすると、それらのポッドが再度自動的に作成されます。

はい、時々ポッドを強制的に削除する必要があります。しかし、この場合、強制コマンドは機能しません。

4
babs84

これにより、ネームスペース内のすべてのポッド、デプロイメント、サービス、およびジョブに関する情報が提供されます。

kubectl get pods,services, deployments, jobs

ポッドはdeploymentsまたはjobsで作成できます

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

展開またはジョブを削除すると、ポッドの再起動を停止できます。

3
Rohith

NSを削除する代わりに、replicaSetを削除してみることができます。

kubectl get rs --all-namespaces

次にreplicaSetを削除します

kubectl delete rs your_app_name
2
Vadim Sluzky

私も問題に直面しました。以下のコマンドを使用して展開を削除しました。

kubectl delete deployments DEPLOYMENT_NAME

まだポッドが再作成されていたので、以下のコマンドを使用してレプリカセットをチェックしました

kubectl get rs

次に、レプリカセットを1〜0に編集します

kubectl edit rs REPICASET_NAME
1
user2688181

インタラクティブなチュートリアル を取った後、私はポッド、サービス、デプロイメントの束になりました:

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
Jens

実行を継続するジョブがある場合は、ジョブを検索して削除する必要があります。

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

そして

kubectl delete job <job-name>

1
kurkop

質問の根本原因は、ポッドが(暗黙的または明示的に)破棄されるときに何が起こるかを定義するdeployment/job/replicasets spec属性strategy->typeでした。私の場合、Recreateでした。

@nomadの answer によると、デプロイメント/ジョブ/レプリカセットの削除は、初心者ユーザーとしてクラスターを台無しにする前に致命的なコンボを試すことを避けるための簡単な修正です。

デバッグに進む前に、次のコマンドを試して、舞台裏のアクションを理解してください。

kubectl get all -A -o name
kubectl get events -A | grep <pod-name>
0
S.K. Venkat

年齢または時間に基づいて、古い展開のkubectl get replicasetsチェックを実行できます

アプリケーションの現在実行中の同じポッドを削除する場合は、時間に基づいて古い展開を削除します

kubectl delete replicasets <Name of replicaset>
0
Harsh Manvar