Was ich unter der Dokumentation verstanden habe, ist Folgendes:
- kubectl create = Erstellt eine neue k8s-Ressource im Cluster
- kubectl replace = Aktualisiert eine Ressource im Live-Cluster
- kubectl apply = Wenn ich erstellen + ersetzen möchte ( Referenz )
Meine Fragen sind
- Warum gibt es drei Vorgänge, um dieselbe Aufgabe in einem Cluster auszuführen?
- Was sind die Anwendungsfälle für diese Operationen?
- Wie unterscheiden sie sich unter der Haube?
kubernetes
kubectl
Suresh Vishnoi
quelle
quelle
kubectl create
undkubectl apply
haben identische Wirkung oder nicht.kubectl create
wird einen Fehler auslösen, wenn die Ressource bereits vorhanden ist.kubectl apply
Gewohnheit. Der Unterschied besteht darin, dasskubectl create
speziell "dieses Ding erstellen" steht, währendkubectl apply
"alles tun, was nötig ist (erstellen, aktualisieren usw.), damit es so aussieht".Wenn Sie in einem CI-Skript ausgeführt werden, treten Probleme mit zwingenden Befehlen auf, da beim Erstellen ein Fehler ausgelöst wird, wenn die Ressource bereits vorhanden ist.
Sie können die Ausgabe Ihres imperativen Befehls mithilfe von und Optionen anwenden (deklaratives Muster) :
--dry-run=true
-o yaml
Der obige Befehl löst keinen Fehler aus, wenn die Ressource bereits vorhanden ist (und aktualisiert die Ressource bei Bedarf).
Dies ist in einigen Fällen sehr nützlich, in denen Sie das deklarative Muster nicht verwenden können (z. B. beim Erstellen eines Docker-Registrierungsgeheimnisses).
quelle
kubectl delete deployment nginx --ignore-not-found; kubectl create deployment nginx --image=nginx
Nur um nach meinem Verständnis eine direktere Antwort zu geben:
apply
- nimmt inkrementelle Änderungen an einem vorhandenen Objekt vorcreate
- erstellt ein ganz neues Objekt (zuvor nicht vorhanden / gelöscht)Aus einem DigitalOcean-Artikel, der von der Kubernetes-Website verlinkt wurde:
quelle
apply
wie verwendendocker-compose up -d
+create
wie verwendendocker-compose up -d --build
?Dies sind zwingende Befehle :
kubectl run
=kubectl create deployment
Vorteile:
Nachteile:
Dies sind zwingende Objektkonfigurationen :
kubectl create -f your-object-config.yaml
kubectl delete -f your-object-config.yaml
kubectl replace -f your-object-config.yaml
Vorteile gegenüber imperativen Befehlen:
Nachteile gegenüber zwingenden Befehlen:
Vorteile gegenüber der deklarativen Objektkonfiguration:
Nachteile gegenüber der deklarativen Objektkonfiguration:
Dies sind deklarative Objektkonfigurationen
kubectl diff -f configs/
kubectl apply -f configs/
Vorteile gegenüber der imperativen Objektkonfiguration:
Nachteile gegenüber der zwingenden Objektkonfiguration:
quelle
Die folgende Erklärung aus der offiziellen Dokumentation half mir zu verstehen
kubectl apply
.kubectl create
Auf der anderen Seite werden Ressourcen erstellt (sollten nicht vorhanden sein).quelle
kubectl create kann jeweils mit einer Objektkonfigurationsdatei arbeiten. Dies wird auch als imperatives Management bezeichnet
kubectl create -f Dateiname | URL
kubectl apply arbeitet mit Verzeichnissen und deren Unterverzeichnissen, die Objektkonfigurations-Yaml-Dateien enthalten. Dies wird auch als deklarative Verwaltung bezeichnet. Es können mehrere Objektkonfigurationsdateien aus Verzeichnissen abgerufen werden. kubectl apply -f Verzeichnis /
Details:
https://kubernetes.io/docs/tasks/manage-kubernetes-objects/declarative-config/ https://kubernetes.io/docs/tasks/manage-kubernetes-objects/imperative-config/
quelle
Wir lieben Kubernetes, weil wir, sobald wir ihnen das geben, was wir wollen, herausfinden, wie wir es ohne unser Zutun erreichen können.
"erschaffen" ist wie GOTT zu spielen, indem man die Dinge selbst in die Hand nimmt. Es ist gut für das lokale Debuggen, wenn Sie nur mit dem POD arbeiten möchten und sich nicht um Deployment / Replication Controller kümmern möchten.
"anwenden" spielt nach den Regeln. "Übernehmen" ist wie ein Master-Tool, mit dem Sie erstellen und ändern können und für dessen Verwaltung Sie keine Pods benötigen.
quelle