Wie lösche ich den gesamten Inhalt eines kubernetes-Knotens?
Zu den Inhalten gehören Implementierungen, Replikatsätze usw. Ich habe versucht, Deplyoments separat zu löschen. Kubrenetes stellt jedoch alle Hülsen wieder her.
Gibt es Möglichkeiten, alle in einem Knoten vorhandenen Replikatsätze zu löschen?
Wenn Sie Dinge testen, wäre der einfachste Weg
kubectl delete deployment --all
Trotzdem, wenn Sie Minikube verwenden, ist es am einfachsten, die Maschine zu löschen und mit einem neuen Knoten erneut zu beginnen
minikube delete
minikube start
Wenn es sich um einen Produktionscluster handelt, hat Kubernetes eine integrierte Funktion, um einen Knoten des Clusters zu entleeren , wobei alle Objekte sicher von diesem Knoten entfernt werden.
Sie können
kubectl drain
verwenden, um alle Pods sicher von einem Knoten zu entfernen, bevor Sie die Wartung des Knotens durchführen. Durch sichere Vertreibungen können die Container des Pod ordnungsgemäß beendet werden, und die von Ihnen angegebenen PodDisruptionBudgets werden berücksichtigt.Note: Standardmäßig ignoriert
kubectl drain
bestimmte System-Pods auf dem Knoten, die nicht abgebrochen werden können. Weitere Informationen finden Sie in der Dokumentation zu kubectl drain.Wenn
kubectl drain
erfolgreich zurückgegeben wird, bedeutet dies, dass alle Pods (mit Ausnahme der im vorherigen Abschnitt beschriebenen ausgeschlossen) sicher entfernt wurden (unter Einhaltung der gewünschten ordentlichen Beendigungsfrist und ohne Verletzung von Unterbrechungs-SLOs auf Anwendungsebene). Es ist dann sicher, den Knoten herunterzufahren, indem die physische Maschine heruntergefahren wird oder, wenn sie auf einer Cloud-Plattform ausgeführt wird, die virtuelle Maschine gelöscht wird.
Identifizieren Sie zunächst den Namen des Knotens, den Sie entleeren möchten. Sie können alle Knoten in Ihrem Cluster mit auflisten
kubectl get nodes
Als Nächstes weisen Sie Kubernetes an, den Knoten zu entleeren:
kubectl drain <node name>
Nach der Rückkehr (ohne Fehlermeldung) können Sie den Knoten herunterfahren (oder auf einer Cloud-Plattform gleichermaßen die virtuelle Maschine löschen, die den Knoten unterstützt). drain
wartet auf eine ordnungsgemäße Beendigung. Sie sollten nicht an der Maschine arbeiten, bis der Befehl abgeschlossen ist.
Wenn Sie den Knoten während des Wartungsvorgangs im Cluster belassen, müssen Sie ihn ausführen
kubectl uncordon <node name>
um anschließend Kubernetes mitzuteilen, dass er die Planung neuer Pods auf dem Knoten fortsetzen kann.
Beachten Sie Folgendes: Wenn Pods vorhanden sind, die nicht von ReplicationController, ReplicaSet, DaemonSet, StatefulSet oder Job verwaltet werden, werden drain
keine Pods löschen, es sei denn, Sie verwenden --force, wie in den Dokumenten .
kubectl drain <node name> --force
Kubenertes stellt Namensraumobjekte zur Isolation und Trennung von Anliegen bereit. Daher wird empfohlen, alle k8s-Ressourcenobjekte (Bereitstellung, ReplicaSet, Pods, Services usw.) in einem benutzerdefinierten Namespace anzuwenden.
Wenn Sie alle relevanten und verwandten k8s-Ressourcen entfernen möchten, müssen Sie nur den Namespace löschen, wodurch alle diese Ressourcen entfernt werden.
kubectl create namespace custom-namespace
kubectl create -f deployment.yaml --namespace=custom-namespace
kubectl delete namespaces custom-namespace
Ich habe einen Link für weitere Untersuchungen beigefügt.
Ich habe so viele Variationen versucht, um alte Pods aus Tutorials zu löschen, einschließlich allem hier .
Was schließlich für mich gearbeitet hat, war:
kubectl delete replicaset --all
Es schien nicht zu funktionieren, sie einzeln zu löschen. es war nur mit dem --all
kennzeichnen, dass alle Pods gelöscht wurden, ohne neu erstellt zu werden.