Sie können die lokale Entwicklung in Cloud Code for Cloud Shell beschleunigen, indem Sie die Vorteile von Dateisynchronisierung und Hot Refresh, der automatischen Bereitstellung beim Speichern und der Verwendung von Skaffold-Modulen nutzen, um Teile einer Anwendung separat zu entwickeln.
Skaffold-Dateisynchronisierung und Hot Refresh aktivieren
Skaffold unterstützt das Kopieren geänderter Dateien in einen bereitgestellten Container, um Ihren lokalen Entwicklungsworkflow effizienter zu gestalten und Pods nicht neu erstellen, neu bereitstellen und neu starten zu müssen. Wenn Sie also Änderungen an statischen Dateien und Quellcodedateien vornehmen, werden die Änderungen innerhalb weniger Sekunden wirksam, was zu einer beschleunigten Feedbackschleife führt.
Bei statischen Dateien (z. B. HTML- und CSS-Dateien) wird dieses Kopierverhalten als Dateisynchronisierung bezeichnet.
Bei Quellcodedateien wird dieses Verhalten als Hot Reload bezeichnet und unterstützt die folgenden Dateitypen:
- Go: *.go
- Java: *.java, *.kt, *.scala, *.groovy, *.clj
- NodeJS: *.js, *.mjs, *.coffee, *.litcoffee, *.json
Wenn Hot Refresh konfiguriert ist, erkennt Skaffold Änderungen an unterstützten Dateien und synchronisiert diese mit dem ausgeführten Container im Cluster. Änderungen an Dateitypen, die kein Hot Refresh unterstützen, lösen eine Image-Neuerstellung und einen Pod-Neustart aus.
Die automatische Dateisynchronisierung und Hot Reload sind standardmäßig aktiviert, wenn Sie mit Buildpacks als Ihrem bevorzugten Builder arbeiten. Für andere Builder wie Docker können Sie in der Datei skaffold.yaml
einen sync
-Abschnitt für das Artefakt angeben, das Sie anpassen.
Folgende Synchronisierungseinstellungen können festgelegt werden (in der Reihenfolge ihrer Präferenz):
auto
: Skaffold konfiguriert die Synchronisierung automatisch. (nur für Jib- und Buildpacks-Artefakte.) Dies ist die Standardeinstellung für Buildpacks.infer
: Die Ziele für jede geänderte Datei werden vom Builder abgeleitet.manual
: Sie müssen die Dateien in Ihrem lokalen Arbeitsbereich und ihr Ziel im ausgeführten Container angeben.
Der folgende Beispielabschnitt sync
in einer skaffold.yaml
-Datei gibt eine manual
-Synchronisierung an, um alle HTML-Dateien /static-html
mit dem Ordner static
in einem Container zu synchronisieren:
build: artifacts: - image: gcr.io/k8s-skaffold/node-example context: node sync: manual: - src: 'static-html/*.html' dest: static
Einen detaillierten Blick auf die Dateisynchronisierung und die Angabe von Synchronisierungsregeln finden Sie im Skaffold-Leitfaden zur Dateisynchronisierung.
Neue Features beim Entwickeln in Kubernetes hinzufügen
Nachdem Sie die Dateisynchronisierung und das Hot Refresh eingerichtet haben, starten Sie einen Iterationszyklus und fügen Sie Ihrem Projekt weitere Funktionen hinzu. Die Änderungen werden in Ihrem Kubernetes-Cluster bereitgestellt, ohne das Deployment anzuhalten und zu entfernen, das Image manuell zu erstellen und zu taggen oder den Cluster zu aktualisieren.
Ein Standard-Iterationszyklus sieht etwa so aus:
Nehmen Sie eine Änderung an Ihrem Projekt vor. Wenn Sie beispielsweise die Cloud Code Java Guestbook-Anwendung verwenden, fügen Sie der
FrontendController
-Klasse so einen neuen Endpunkt hinzu:Öffnen Sie die Datei
FrontendController.java
aussrc/main/java/cloudcode/guestbook/frontend
und fügen Sie Folgendes hinzu:@RequestMapping("/greeting") @ResponseBody public String greeting(@RequestParam(value="name", defaultValue="World") String name) { return String.format("Hello from Kubernetes with IntelliJ, %s!", name); }
Fügen Sie die erforderlichen Importe für die neuen Annotationen
RequestMapping
undResponseBody
hinzu.
Speichern Sie Ihre Änderungen (
Ctrl
/Cmd+S
) oder erstellen Sie das Projekt.Im Konsolenfenster können Sie Fortschritts- und Bereitstellungslogs aufrufen. Bestätigen Sie die Updates, nachdem die Änderungen bereitgestellt wurden.
Klicken Sie auf das Symbol Beenden, um die Sitzung der kontinuierlichen Entwicklung zu beenden.
Cloud Code löscht alle für die Entwicklungssitzung verwendeten Kubernetes-Ressourcen.
Mikrodienstanwendungen mit Skaffold-Konfigurationen entwickeln
Bei der Entwicklung von Mikrodienstanwendungen kann es hilfreich sein, unabhängig an separaten Abschnitten zu arbeiten, um die Fehlerbehebung und Bereitstellung zu vereinfachen.
Sie können Teile Ihrer Anwendung unabhängig entwickeln und debuggen, indem Sie Ihre Anwendung in Skaffold-Module aufteilen. Das Beispiel Bank of Anthos ist beispielsweise eine Anwendung mit zehn Mikrodiensten. Die Datei skaffold.yaml
des Beispiels gruppiert diese Dienste in fünf Skaffold-Module namens setup
, db
, frontend
, backend
und loadgenerator
.
Skaffold-Module und Konfigurationsabhängigkeiten definieren
So definieren Sie Skaffold-Module und Konfigurationsabhängigkeiten:
Öffnen Sie das Projekt, in dem Sie die Module definieren möchten.
Öffnen Sie die Datei
skaffold.yaml
.Wenn die Datei
skaffold.yaml
mehrere Konfigurationen hat, geben Sie die folgende Zeile an, um eine Konfiguration zu einem Skaffold-Modul zu machen:metadata: name: MODULE_NAME_1
In der
skaffold.yaml
der Bank of Anthos definiert das Moduldb
beispielsweise Datenbankbereitstellungen:Bei Konfigurationen, die davon abhängen, dass eine andere Konfiguration bereitgestellt wird, bevor die aktuelle Konfiguration bereitgestellt werden kann, müssen Sie die Konfiguration Ihren Abhängigkeiten hinzufügen. Wenn Sie eine Konfigurationsabhängigkeit angeben möchten, fügen Sie dem Abschnitt
requires
der Dateiskaffold.yaml
eineconfigs
-Liste hinzu.Die
skaffold.yaml
-Datei der Bank of Anthos enthält beispielsweise die Konfigurationsabhängigkeitsetup
.Zum Definieren einer Abhängigkeit fügen Sie der Datei
skaffold.yaml
Folgendes hinzu, wobei DEPENDENCY_NAME der Name der Abhängigkeit ist.requires: - configs: DEPENDENCY_NAME
Auf diese Weise aufgeführte Konfigurationen können auf Abhängigkeiten verweisen, die in derselben Datei oder in anderen
skaffold.yaml
-Dateien im aktuellen Projekt definiert sind.Testen Sie Ihre Konfigurationsabhängigkeiten. Erstellen Sie dazu jedes Skaffold-Modul separat. So können Sie prüfen, ob sie mit ihren Abhängigkeiten bereitgestellt werden. Führen Sie dazu die Schritte unter Bestimmte Skaffold-Module und deren Abhängigkeiten erstellen aus.
Bestimmte Skaffold-Module und deren Abhängigkeiten erstellen
Nachdem Sie die Module und deren Abhängigkeiten definiert haben, können Sie in der Datei launch.json
angeben, welche Module mit Cloud-Code ausgeführt werden sollen.
Wenn für Ihr Projekt keine Datei launch.json
definiert ist, werden Sie beim Ausführen von Cloud Code: Run on Kubernetes oder Cloud Code: Debug on Kubernetes aufgefordert, die zu erstellenden Module auszuwählen:
- Öffnen Sie die Befehlspalette (
Ctrl
/Cmd
+Shift
+P
) und führen Sie dann Cloud Code: Run on Kubernetes aus. - Klicken Sie auf Module auswählen.
- Wählen Sie die Module aus, die Sie bereitstellen möchten, und klicken Sie dann auf OK. Jedes Modul wird mit seinen Abhängigkeiten erstellt.
- Wenn Sie dazu aufgefordert werden, wählen Sie eine Image-Registry aus und drücken Sie dann
Enter
.
Wenn Ihr Projekt ein launch.json
hat, führen Sie die folgenden Schritte aus, um die zu erstellenden Skaffold-Module auszuwählen:
Öffnen Sie die
launch.json
-Datei Ihres Projekts.Bearbeiten Sie die Startkonfiguration und fügen Sie die Option
skaffoldFlags
mit einer durch Kommas getrennten Liste vonmodules
zum Erstellen hinzu. WennskaffoldFlags
weggelassen wird, werden alle Module erstellt.{ "name": "Run on Kubernetes", "type": "cloudcode.kubernetes", "request": "launch", "skaffoldConfig": "${workspaceFolder}/skaffold.yaml", "skaffoldFlags": { "modules": ["MODULE_NAME_2,MODULE_NAME_2"], "watch": true, "cleanUp": true, } }
Führen Sie die bearbeitete Startkonfiguration aus.
Kontinuierliche Entwicklung in Kubernetes
Nachdem Sie das Ausführungsziel mit den gewünschten Optionen konfiguriert haben, können Sie sich entweder für eine regelmäßige Ausführung Ihrer Anwendung entscheiden oder einen Entwicklungsiterationszyklus in Ihrer IDE starten, um alle Änderungen an der Quelle und den Abhängigkeiten an Ihre Live-Anwendung zu übertragen.
Das Ausführungsziel Run on Kubernetes startet den Entwicklungszyklus auf Ihrem Kubernetes-Cluster. Nachdem Sie den Entwicklungszyklus gestartet haben, erstellt Cloud Code mithilfe von Skaffold ein Image für das Projekt, taggt es, überträgt es per Push an das konfigurierte Repository und stellt mithilfe von kubectl die Kubernetes-Manifeste des Projekts bereit.
- Passen Sie Ihre Bereitstellung mithilfe der verfügbaren Konfigurationsoptionen an.
- Wenn Ihre Anwendung für die Verwendung von Skaffold-Modulen konfiguriert ist, können Sie bestimmte Module zum Erstellen oder Bereitstellen auswählen.
- Öffnen Sie die Befehlspalette (drücken Sie
Ctrl
/Cmd
+Shift
+P
) und führen Sie dann den Befehl Cloud Code: Auf Kubernetes ausführen aus. - Geben Sie an, ob Sie den aktuellen Kubernetes-Kontext zum Ausführen der Anwendung verwenden oder ob Sie zu einem bevorzugten Kontext wechseln möchten. Weitere Informationen zum Einrichten eines Kubernetes-Kontexts finden Sie unter Konfiguration einrichten.
Wenn Sie einen Remote-Cluster als Kontext ausgewählt haben, wählen Sie bei entsprechender Aufforderung eine Image-Registry aus, in die die Images übertragen werden sollen. Wenn Sie Container Registry verwenden, können Sie zu einer vorhandenen Registry gehen oder den Namen der zu erstellenden Registry angeben. Wenn für Ihr Projekt die Artifact Registry API aktiviert und mindestens ein Artifact Registry-Repository aktiviert ist, können Sie ein vorhandenes Artifact Registry-Repository aufrufen und auswählen.
Anschließend erstellt Cloud Code Ihre Container, überträgt sie in die Registry, wendet Kubernetes-Konfigurationen auf den Cluster an und wartet auf den Rollout.
Nächste Schritte
- Verwenden Sie den integrierten Minikube-Cluster von Cloud Code für die lokale Entwicklung.
- Fehler in der Anwendung in Cloud Code beheben
- Weitere Informationen zur Dateisynchronisierungsfunktion von Skaffold