Bei Kubernetes geht es anscheinend nur darum, Container in einer Clusterwolke bereitzustellen. Was es nicht zu berühren scheint, sind Entwicklungs- und Staging-Umgebungen (oder ähnliches).
Während der Entwicklung möchten Sie mit einigen wichtigen Änderungen so nah wie möglich an der Produktionsumgebung sein:
- Lokal bereitgestellt (oder zumindest an einem Ort, auf den Sie und nur Sie zugreifen können )
- Verwenden Sie den neuesten Quellcode für die Seitenaktualisierung (vorausgesetzt, es handelt sich um eine Website; im Idealfall wird die Seite beim lokalen Speichern der Datei automatisch aktualisiert. Dies ist möglich, wenn Sie den Quellcode einbinden und einige Dinge wie Yeoman verwenden ).
In ähnlicher Weise möchte man möglicherweise, dass eine nicht öffentliche Umgebung eine kontinuierliche Integration durchführt .
Unterstützt Kubernetes eine solche Entwicklungsumgebung oder muss sie erstellt werden, in der Hoffnung, dass sie während der Produktion noch funktioniert?
microk8s
leichtgewichtige k8s-Installation für Ihren lokalen Computer ansehen. Ich habe eine Antwort für das gleiche gepostet, wie man es installiert. Die Installation dauert nur etwa eine Minute.Antworten:
Update (15.07.2016)
Mit der Veröffentlichung von Kubernetes 1.3 ist Minikube nun die empfohlene Methode, um Kubernetes für die Entwicklung auf Ihrem lokalen Computer auszuführen.
Sie können Kubernetes lokal über Docker ausführen . Sobald ein Knoten ausgeführt wird, können Sie einen Pod starten, der über einen einfachen Webserver verfügt und ein Volume von Ihrem Hostcomputer bereitstellt. Wenn Sie den Webserver aufrufen, wird er vom Volume gelesen. Wenn Sie die Datei auf Ihrer lokalen Festplatte geändert haben, kann die neueste Version bereitgestellt werden.
quelle
Wir haben an einem Tool gearbeitet, um dies zu tun. Die Grundidee ist, dass Sie einen Remote-Kubernetes-Cluster haben, effektiv eine Staging-Umgebung, und dann Code lokal ausführen und er an den Remote-Cluster weitergeleitet wird. Sie erhalten transparenten Netzwerkzugriff, kopierte Umgebungsvariablen, Zugriff auf Volumes ... so nah wie möglich an der Remote-Umgebung, aber Ihr Code wird lokal und unter Ihrer vollen Kontrolle ausgeführt.
Sie können also beispielsweise eine Live-Entwicklung durchführen. Dokumente unter http://telepresence.io
quelle
Die Art von "Hot Reload" ist etwas, das wir hinzufügen wollen, aber nicht so einfach wie es heute sein könnte. Wenn Sie sich jedoch abenteuerlustig fühlen, können Sie rsync mit Docker Exec, Kubectl Exec oder Osc Exec verwenden (alle machen ungefähr dasselbe), um ein lokales Verzeichnis bei jeder Änderung mit einem Container zu synchronisieren. Sie können rsync mit kubectl oder osc exec wie folgt verwenden:
quelle
Ein weiterer guter Ausgangspunkt ist dieses Vagrant-Setup , insb. Wenn Ihr Host-Betriebssystem Windows ist. Die offensichtlichen Vorteile sind
Die Nachteile - Sie benötigen viel RAM und VirtualBox ist VirtualBox ... zum Guten oder Schlechten.
Ein gemischter Vorteil / Nachteil ist das Zuordnen von Dateien über NFS. In unserem Setup haben wir zwei Sätze von RC-Definitionen erstellt - einen, der nur ein Docker-Image unserer Anwendungsserver herunterlädt. die andere mit 7 zusätzlichen Zeilen, die die Dateizuordnung von HostOS -> Vagrant -> VirtualBox -> CoreOS -> Kubernetes-Pod einrichten; Überschreiben des Quellcodes aus dem Docker-Image.
Der Nachteil dabei ist der NFS-Dateicache - damit ist er problematisch, ohne ihn ist er problematisch langsam. Selbst beim Einstellen werden
mount_options: 'nolock,vers=3,udp,noac'
Caching-Probleme nicht vollständig beseitigt, aber es funktioniert meistens. Einige Gulp-Aufgaben, die in einem Container ausgeführt werden, können 5 Minuten dauern, wenn sie auf dem Host-Betriebssystem 8 Sekunden dauern. Ein guter Kompromiss scheint zu seinmount_options: 'nolock,vers=3,udp,ac,hard,noatime,nodiratime,acregmin=2,acdirmin=5,acregmax=15,acdirmax=15'
.Das automatische Neuladen von Code ist sprachspezifisch, aber wir sind mit Djangos Devserver für Python und Nodemon für Node.js zufrieden. Bei Frontend-Projekten können Sie natürlich viel mit so etwas wie gulp + browserSync + watch tun, aber für viele Entwickler ist es nicht schwierig, von Apache aus zu dienen und nur herkömmliche Hard-Refreshs durchzuführen.
Wir behalten 4 Sätze von Yaml-Dateien für Kubernetes. Dev, "devstable", Bühne, Prod. Die Unterschiede zwischen diesen sind
Es ist sehr nützlich, viele Bash-Aliase zu erstellen und automatisch zu vervollständigen - ich kann einfach tippen
rec users
und es wird funktionierenkubectl delete -f ... ; kubectl create -f ...
. Wenn ich möchte, dass die gesamte Einrichtung gestartet wird,recfo
tippe ich ein und es werden ein Dutzend Dienste neu erstellt, die neuesten Docker-Images abgerufen, der neueste Datenbankspeicherauszug aus Staging env importiert und alte Docker-Dateien bereinigt, um Speicherplatz zu sparen.quelle
Ich habe gerade mit Skaffold angefangen
Es ist sehr nützlich, Änderungen im Code automatisch auf einen lokalen Cluster anzuwenden.
Um einen lokalen Cluster bereitzustellen, ist Minikube oder nur Docker für Mac und Windows der beste Weg. Beide enthalten eine Kubernetes-Oberfläche.
quelle
Unter https://github.com/kubernetes/kubernetes/issues/12278 erfahren Sie, wie Sie ein Volume vom Host-Computer bereitstellen. Dies entspricht:
quelle
Eine nette Rückkopplungsschleife für die lokale Entwicklung ist ein Thema der schnellen Entwicklung im Kubernetes-Ökosystem.
Um diese Frage aufzuschlüsseln, gibt es einige Tools, von denen ich glaube, dass sie dieses Ziel gut unterstützen.
Docker für Mac Kubernetes
Docker für Mac Kubernetes ( Docker Desktop ist der generische plattformübergreifende Name) bietet eine hervorragende Option für die lokale Entwicklung. Für die Virtualisierung wird HyperKit verwendet , das auf dem nativen Hypervisor-Framework in macOS anstelle von VirtualBox basiert .
Die Kubernetes-Funktion wurde erstmals im Januar 2018 als Beta auf dem Edge-Kanal veröffentlicht und hat seitdem einen langen Weg zurückgelegt. Sie wurde im April 2018 zu einer zertifizierten Kubernetes-Funktion und wurde im Juli 2018 zum stabilen Kanal .
Nach meiner Erfahrung ist die Arbeit mit Minikube viel einfacher als mit Minikube, insbesondere unter macOS und insbesondere bei Problemen wie RBAC, Helm, Hypervisor, privater Registrierung usw.
Helm
Für die Verteilung Ihres Codes und das lokale Abrufen von Updates ist Helm eine der beliebtesten Optionen. Sie können Ihre Anwendungen über CI / CD als Helm-Diagramme veröffentlichen (und auch die zugrunde liegenden Docker-Bilder, auf die sie verweisen). Anschließend können Sie diese Diagramme lokal aus Ihrer Helm-Diagrammregistrierung abrufen und in Ihrem lokalen Cluster aktualisieren.
Azure-Entwurf
Sie können auch ein Tool wie Azure Draft verwenden , um einfache lokale Bereitstellungen durchzuführen und grundlegende Helmdiagramme aus gängigen Sprachvorlagen zu erstellen, ähnlich wie Buildpacks, um dieses Puzzleteil zu automatisieren.
Gerüst
Skaffold ähnelt Azure Draft, ist jedoch ausgereifter, hat einen viel breiteren Anwendungsbereich und wurde von Google erstellt. Es hat eine sehr steckbare Architektur. Ich denke, in Zukunft werden mehr Leute es für die lokale App-Entwicklung für Kubernetes verwenden.
Wenn Sie React verwendet haben, stelle ich mir Skaffold als " Create React App for Kubernetes" vor.
Kompose oder Compose auf Kubernetes
Docker Compose ist zwar nicht mit Kubernetes verwandt, stellt jedoch eine Alternative dar, mit der einige Unternehmen eine einfache, einfache und tragbare lokale Entwicklungsumgebung bereitstellen, die der Kubernetes-Umgebung entspricht, die sie in der Produktion ausführen. Wenn Sie diesen Weg gehen, müssen Sie jedoch Ihre Produktions- und lokalen Entwicklungskonfigurationen voneinander trennen.
Kompose ist ein Konverter von Docker Compose zu Kubernetes. Dies könnte ein nützlicher Pfad für jemanden sein, der seine Anwendungen bereits lokal als Containersammlungen ausführt.
Compose on Kubernetes ist ein Open-Source- Angebot (Dezember 2018) von Docker, mit dem Docker Compose-Dateien über einen benutzerdefinierten Controller direkt in einem Kubernetes-Cluster bereitgestellt werden können.
quelle
Kubespary ist hilfreich beim Einrichten lokaler Cluster. Meistens habe ich Vagrant-basierte Cluster auf lokalen Computern verwendet.
Kubespray-Konfiguration Sie können diese Variablen so anpassen, dass sie die gewünschte Kubernetes-Version haben.
quelle
Der Nachteil der Verwendung
minkube
besteht darin, dass eine andere virtuelle Maschine über Ihrer Maschine erzeugt wird. Auch mit neuestenminikube
Version sind mindestens 2 CPUs und 2 GB RAM von Ihrem System erforderlich, was es ziemlich schwer macht, wenn das System nicht über genügend Ressourcen verfügt.Dies ist der Grund, warum ich
microk8s
für die Entwicklung auf Kubernetes gewechselt bin und ich liebe es.microk8s
unterstützt DNS, Local-Storage, Dashboard, Istio, Ingress und vieles mehr - alles, was Sie zum Testen Ihrer Microservices benötigen.Es handelt sich um eine schnelle und leichte Upstream-Kubernetes-Installation, die von Ihrer lokalen Umgebung isoliert ist. Diese Isolation wird erreicht, indem alle Binärdateien für Kubernetes, Docker.io, iptables und CNI in einem einzigen Snap-Paket zusammengefasst werden.
Ein einzelner Knoten-Kubernetes-Cluster kann innerhalb einer Minute mit einem einzigen Befehl installiert werden:
Stellen Sie sicher, dass auf Ihrem System kein Docker- oder Kubelet-Dienst ausgeführt wird.
Microk8s
installiert alle erforderlichen Dienste automatisch.Bitte schauen Sie sich den folgenden Link an, um andere Add-Ons zu aktivieren
microk8s
.Sie können den Status überprüfen mit:
quelle
Schauen Sie sich https://github.com/okteto/okteto und Okteto Cloud an . Das Wertversprechen besteht darin, die klassische Entwicklungserfahrung zu haben, als vor dem Docker lokal zu arbeiten, wo Sie Hot-Reloads, inkrementelle Builds, Debugger ... durchführen können. Alle Ihre lokalen Änderungen werden jedoch sofort mit einem Remote-Container synchronisiert. Remote-Container bieten Zugriff auf die Geschwindigkeit der Cloud, ermöglichen eine neue Ebene der Zusammenarbeit und integrieren die Entwicklung in eine produktionsähnliche Umgebung. Außerdem entfällt die Belastung durch lokale Installationen.
quelle
Wie bereits von Robert angegeben, ist Minikube der richtige Weg.
Hier ist eine Kurzanleitung, um mit Minikube zu beginnen. Die allgemeinen Schritte sind:
Installieren Sie minikube
Erstellen Sie einen Minikube-Cluster (in einer virtuellen Maschine, die unter Windows VirtualBox oder Docker für Mac oder HyperV sein kann).
Erstellen Sie ein Docker-Image Ihrer Anwendungsdatei (mithilfe von Dockerfile).
Führen Sie das Image aus, indem Sie eine Bereitstellung erstellen
Erstellen Sie einen Dienst, der Ihre Anwendung verfügbar macht, damit Sie darauf zugreifen können.
quelle