Kubernetesノードからすべてのコンテンツを削除する方法は?
コンテンツには、デプロイメント、レプリカセットなどが含まれます。私は、デプロイメントを個別に削除しようとしました。しかし、kubernetesはすべてのポッドを再び再作成します。
ノードに存在するすべてのレプリカセットを削除する方法はありますか?
物事をテストする場合、最も簡単な方法は
kubectl delete deployment --all
また、minikubeを使用している場合、おそらく最も簡単な方法は、マシンを削除し、新しいノードで再起動することです。
minikube delete
minikube start
実稼働クラスターについて話している場合、 Kubernetesには、クラスターのノードを排出する組み込み機能があります 。そのノードからすべてのオブジェクトを安全に削除します。
kubectl drain
を使用して、ノードでメンテナンスを実行する前に、すべてのポッドをノードから安全に削除できます。安全な立ち退きにより、ポッドのコンテナが正常に終了し、指定したPodDisruptionBudgetsが尊重されます。注:デフォルトでは、
kubectl drain
は、ノード上の特定のシステムポッドを強制終了できません。詳細については、kubectl drainのドキュメントを参照してください。
kubectl drain
が正常に返された場合、すべてのポッド(前の段落で説明したように除外されたポッドを除く)が安全に削除されたことを示します(目的のグレースフル終了期間を尊重し、アプリケーションレベルの中断SLOに違反することなく) 。その後、物理マシンの電源を切るか、クラウドプラットフォームで実行している場合は仮想マシンを削除することで、ノードを安全に停止できます。
まず、排出するノードの名前を特定します。クラスター内のすべてのノードを一覧表示できます
kubectl get nodes
次に、Kubernetesにノードをドレインするように指示します。
kubectl drain <node name>
(エラーを出さずに)戻ると、ノードの電源を切ることができます(または同等に、クラウドプラットフォームの場合は、ノードをバッキングしている仮想マシンを削除します)。 drain
は、正常な終了を待ちます。コマンドが完了するまでマシンを操作しないでください。
メンテナンス操作中にクラスター内にノードを残す場合、実行する必要があります
kubectl uncordon <node name>
その後、ノードへの新しいポッドのスケジュールを再開できることをKubernetesに伝えます。
ReplicationController、ReplicaSet、DaemonSet、StatefulSet、またはJobによって管理されていないポッドがある場合、-forceを使用しない限り、drain
はポッドを削除しないことに注意してください docs に記載されているとおり。
kubectl drain <node name> --force
Kubenertesは、関心の分離と分離のための名前空間オブジェクトを提供します。したがって、すべてのk8sリソースオブジェクト(Deployment、ReplicaSet、Pod、Servicesおよびその他)をカスタム名前空間に適用することをお勧めします。
関連するすべてのk8sリソースをすべて削除する場合は、これらのリソースをすべて削除するネームスペースを削除するだけです。
kubectl create namespace custom-namespace
kubectl create -f deployment.yaml --namespace=custom-namespace
kubectl delete namespaces custom-namespace
さらに調査するためのリンクを添付しました。
すべてを含む、チュートリアルから古いポッドを削除するために、非常に多くのバリエーションを試しました here 。
最終的に私のために働いたのは:
kubectl delete replicaset --all
一度に1つずつ削除しても機能しなかったようです。すべてのポッドが再作成されずに削除されたのは、--all
フラグのみでした。