コマンドでポッドを開始しました
# 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
展開を削除する必要があります。これにより、ポッドとレプリカセットが削除されます https://github.com/kubernetes/kubernetes/issues/24137
すべての展開を一覧表示するには:
kubectl get deployments --all-namespaces
次に、展開を削除するには:
kubectl delete -n NAMESPACE deployment DEPLOYMENT
NAMESPACEはそれが含まれるネームスペースであり、DEPLOYMENTはデプロイメントのname
です。
ポッドの名前がname-xxx-yyy
の場合、name-xxx
というreplicasets.appsで制御できます。ポッドを削除する前に、まずそのレプリカセットを削除する必要があります
kubectl delete replicasets.apps name-xxx
場合によっては、展開を削除してもポッドが消えないことがあります。その場合、それらを強制的に削除するには、以下のコマンドを実行できます。
kubectl delete pods podname --grace-period=0 --force
ステートフルセットにも注意してください
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
それが展開、deamonset、statefulset ...であるかどうかを把握しようとする代わりに、(私の場合は新しいポッドにまたがっていたのはレプリケーションコントローラーでした:)イメージにまたがり続けたものを判断するためにこのコマンドですべてのリソースを取得しました:
kubectl get all
もちろん、すべての名前空間からすべてのリソースを取得することもできます。
kubectl get all --all-namespaces
または、検査するネームスペースを定義します。
kubectl get all -n NAMESPACE_NAME
レプリケーションコントローラーが問題の原因であることがわかったら、それを削除しました。
kubectl delete replicationcontroller/CONTROLLER_NAME
ポッドを手動で削除した後でもポッドが自動的に再作成される場合、それらのポッドは展開を使用して作成されています。展開を作成すると、ReplicaSetとPodsが自動的に作成されます。展開スクリプトで指定したポッドのレプリカの数に応じて、最初にこれらの数のポッドが作成されます。ポッドを手動で削除しようとすると、それらのポッドが再度自動的に作成されます。
はい、時々ポッドを強制的に削除する必要があります。しかし、この場合、強制コマンドは機能しません。
これにより、ネームスペース内のすべてのポッド、デプロイメント、サービス、およびジョブに関する情報が提供されます。
kubectl get pods,services, deployments, jobs
ポッドはdeploymentsまたはjobsで作成できます
kubectl delete job [job_name]
kubectl delete deployment [deployment_name]
展開またはジョブを削除すると、ポッドの再起動を停止できます。
NSを削除する代わりに、replicaSetを削除してみることができます。
kubectl get rs --all-namespaces
次にreplicaSetを削除します
kubectl delete rs your_app_name
私も問題に直面しました。以下のコマンドを使用して展開を削除しました。
kubectl delete deployments DEPLOYMENT_NAME
まだポッドが再作成されていたので、以下のコマンドを使用してレプリカセットをチェックしました
kubectl get rs
次に、レプリカセットを1〜0に編集します
kubectl edit rs REPICASET_NAME
インタラクティブなチュートリアル を取った後、私はポッド、サービス、デプロイメントの束になりました:
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
実行を継続するジョブがある場合は、ジョブを検索して削除する必要があります。
kubectl get job --all-namespaces | grep <name>
そして
kubectl delete job <job-name>
質問の根本原因は、ポッドが(暗黙的または明示的に)破棄されるときに何が起こるかを定義するdeployment/job/replicasets spec属性strategy->type
でした。私の場合、Recreate
でした。
@nomadの answer によると、デプロイメント/ジョブ/レプリカセットの削除は、初心者ユーザーとしてクラスターを台無しにする前に致命的なコンボを試すことを避けるための簡単な修正です。
デバッグに進む前に、次のコマンドを試して、舞台裏のアクションを理解してください。
kubectl get all -A -o name
kubectl get events -A | grep <pod-name>
年齢または時間に基づいて、古い展開のkubectl get replicasets
チェックを実行できます
アプリケーションの現在実行中の同じポッドを削除する場合は、時間に基づいて古い展開を削除します
kubectl delete replicasets <Name of replicaset>