Entwicklung in Cloud Code for VS Code beschleunigen

Um Ihre lokale Entwicklung in Cloud Code for VS Code zu beschleunigen, nutzen Sie Synchronisierung und Hot Refresh, automatische Bereitstellung beim Speichern und Verwenden von Skaffold-Modulen um Teile einer Anwendung separat zu entwickeln.

Skaffold-Dateisynchronisierung und Hot Reload aktivieren

Skaffold unterstützt das Kopieren geänderter Dateien in einen bereitgestellten Container, um die Effizienz des lokalen Entwicklungsworkflows zu verbessern und die Neuerstellung, erneute Bereitstellung und den Neustart von Pods zu vermeiden. Wenn Sie also Änderungen an statischen und Quellcodedateien arbeiten, können Sie sehen, dass Ihre Änderungen in Sekundenschnelle wirksam werden, was zu einer beschleunigten Feedback Loop ein.

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 Reload konfiguriert ist, erkennt Skaffold Änderungen an unterstützten Dateien und synchronisiert diese Änderungen mit dem ausgeführten Container in Ihrem Cluster. Änderungen an Dateitypen, die keine Hotline unterstützen neu erstellen und Pod-Neustart auslösen.

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 einen sync-Abschnitt in Ihrer skaffold.yaml-Datei für die das du anpassst.

Folgende Synchronisierungseinstellungen können festgelegt werden (in der Reihenfolge ihrer Präferenz):

  • auto: Skaffold konfiguriert die Synchronisierung automatisch. (nur für Jib und Buildpacks) artifacts.) Dies ist die Standardeinstellung für Buildpacks.
  • infer: Die Ziele für jede geänderte Datei werden aus dem Builder abgeleitet.
  • manual: Sie müssen die Dateien in Ihrem lokalen Arbeitsbereich und ihr Ziel im laufenden Container angeben.

Im folgenden Beispielabschnitt sync in einer skaffold.yaml-Datei wird ein manual synchronisieren, um alle /static-html-HTML-Dateien mit static zu synchronisieren Ordner in einem Container:

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 Funktionen bei der Entwicklung in Kubernetes hinzufügen

Starten Sie nach der Einrichtung der Dateisynchronisierung und des Hot Aktualisierungen einen Iterationszyklus und fügen Sie mehr Funktionen hinzufügen. Ihre Änderungen werden in Kubernetes bereitgestellt ohne das Deployment anzuhalten und zu entfernen, das Image mit Tags versehen oder den Cluster aktualisieren.

Ein Standard-Iterationszyklus sieht etwa so aus:

  1. Nehmen Sie eine Änderung an Ihrem Projekt vor. Wenn Sie z. B. das Tag Cloud Code Java Guestbook-Anwendung einen neuen Endpunkt zum FrontendController so:

    1. Öffnen Sie die Datei FrontendController.java aus src/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);
      }
      
    2. Fügen Sie die erforderlichen Importe für die neuen Annotationen RequestMapping und ResponseBody.

  2. 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.

  3. Klicken Sie zum Beenden der kontinuierlichen Entwicklungssitzung auf das Symbol Beenden.

    Cloud Code löscht alle Kubernetes-Ressourcen, die für die Entwicklungssitzung verwendet wurden.

Mikrodienstanwendungen mit Skaffold-Konfigurationen entwickeln

Bei der Entwicklung von Mikrodienstanwendungen kann es hilfreich sein, an separaten um Debugging und Bereitstellung zu vereinfachen.

Sie können Teile Ihrer Anwendung unabhängig entwickeln und debuggen, indem Sie Skaffold-Module hinzufügen. Die Beispielanwendung Bank of Anthos ist beispielsweise eine Anwendung mit zehn Mikrodiensten. Das Beispiel skaffold.yaml 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:

  1. Öffnen Sie das Projekt, in dem Sie die Module definieren möchten.

  2. Öffnen Sie die Datei skaffold.yaml.

  3. Wenn Ihre skaffold.yaml-Datei mehrere Konfigurationen hat, Konfigurieren Sie ein Skaffold-Modul, indem Sie die folgende Zeile angeben:

    metadata:
      name: MODULE_NAME_1
    

    In der Bank of Anthos-skaffold.yaml-Umgebung wird beispielsweise im db-Modul die Datenbankbereitstellung definiert:

    apiVersion: skaffold/v3
    kind: Config
    metadata:
      name: db # module defining database deployments
    requires:
    - configs:
      - setup
    build:
      artifacts:
      - image: accounts-db
        context: src/accounts-db
      - image: ledger-db
        context: src/ledger-db
    manifests:
      rawYaml:
      - dev-kubernetes-manifests/accounts-db.yaml
      - dev-kubernetes-manifests/ledger-db.yaml
    deploy:
      kubectl: {}
  4. Bei Konfigurationen, die auf einer anderen Konfiguration basieren, bevor die aktuelle Konfiguration bereitgestellt werden kann, müssen Sie die Konfiguration den Abhängigkeiten hinzufügen. Fügen Sie zum Angeben einer Konfigurationsabhängigkeit eine configs-Liste zur Abschnitt requires Ihrer skaffold.yaml-Datei.

    Die skaffold.yaml-Datei der Bank of Anthos enthält beispielsweise die Konfigurationsabhängigkeit setup.

    Wenn Sie eine Abhängigkeit definieren möchten, 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 aufgelistete Konfigurationen können auf Abhängigkeiten verweisen, die in derselben Datei oder in anderen skaffold.yaml-Dateien im aktuellen Projekt definiert sind.

  5. Konfigurationsabhängigkeiten durch Erstellen jedes einzelnen Skaffold testen um sicherzustellen, dass sie mit ihren Abhängigkeiten mithilfe der Schritte in Spezifische Skaffold-Module und deren Abhängigkeiten erstellen

Bestimmte Skaffold-Module und deren Abhängigkeiten erstellen

Nachdem Sie Ihre Module und deren Abhängigkeiten definiert haben, können Sie angeben, Module, die Sie mit Cloud-Code in der Datei launch.json ausführen möchten.

Wenn für Ihr Projekt keine launch.json-Datei definiert ist, führen Sie Cloud Code: Run on Kubernetes oder Cloud Code: Debug on Kubernetes. aufgefordert, die zu erstellenden Module auszuwählen:

  1. Öffnen Sie die Befehlspalette (Ctrl/Cmd+Shift+P) und führen Sie dann Cloud Code: In Kubernetes ausführen
  2. Klicken Sie auf Module auswählen.
  3. Wählen Sie die Module aus, die Sie bereitstellen möchten, und klicken Sie dann auf OK. Jedes wird mit seinen Abhängigkeiten erstellt.
  4. 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, gehen Sie so vor, um das Skaffold auszuwählen. zu erstellende Module:

  1. Öffnen Sie die launch.json-Datei Ihres Projekts.

  2. Bearbeiten Sie die Startkonfiguration und fügen Sie die Option skaffoldFlags mit einem Durch Kommas getrennte Liste von modules, die erstellt werden sollen. Wenn skaffoldFlags 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,
        }
      }
    
  3. Führen Sie die bearbeitete Startkonfiguration aus.

Kontinuierliche Entwicklung in Kubernetes

Nachdem Sie das Ausführungsziel mit den gewünschten Optionen konfiguriert haben, Ihre App regelmäßig ausführen oder mit der Entwicklung beginnen, Iterationszyklus in Ihrer IDE an, um alle Änderungen zu Ihrer Live-Anwendung hinzufügen.

Das Ausführungsziel Run on Kubernetes startet den Entwicklungszyklus auf Ihrer Kubernetes-Cluster. Nachdem Sie den Entwicklungszyklus gestartet haben, erstellt Cloud Code mit Skaffold ein Image für das Projekt, fügt es dann hinzu, überträgt es per Push in das konfigurierte Repository und stellt mit kubectl die Kubernetes-Manifeste des Projekts bereit.

  1. Passen Sie die Bereitstellung mit den verfügbaren Konfigurationsoptionen an.
  2. Wenn Ihre Anwendung für die Verwendung von Skaffold-Module können Sie Sie können bestimmte Module zum Erstellen oder Bereitstellen auswählen.
  3. Ö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.
  4. 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.
  5. Wenn Sie einen Remote-Cluster als Kontext ausgewählt haben, wählen Sie bei entsprechender Aufforderung ein Image aus Registry, in die die Images übertragen werden sollen. Wenn Sie Container Registry verwenden, Rufen Sie eine vorhandene Registry auf oder geben Sie den Namen der zu erstellenden Registry an. Wenn Ihr Projekt Artifact Registry API aktiviert und mindestens ein Artifact Registry-Repository kann ein vorhandenes Artifact Registry-Repository suchen 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

Support erhalten

Wenn Sie uns Feedback geben möchten, können Sie Probleme auf GitHub melden oder eine Frage in Stack Overflow stellen.