Kubernetes-Anwendung in Cloud Code für Cloud Shell ausführen

Mit Cloud Code können Sie Ihre Anwendung auf einfache Weise in einem Kubernetes-Cluster ausführen und mit skaffold dev live aufrufen. Sie können Ihre Anwendung auf einem lokalen Cluster wie Minikube oder Docker Desktop, in Google Kubernetes Engine oder in jedem anderen Cloud-Anbieter ausführen.

Anwendung ausführen

  1. Ö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.
  2. 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.
  3. Wenn Sie einen Remote-Cluster als Kontext ausgewählt haben, wenn Sie dazu aufgefordert werden, wählen Sie eine Image-Registry aus, in die die Images übertragen werden sollen. Wenn Sie Container Registry verwenden, können Sie zu einer vorhandenen Registry wechseln oder den Namen der zu erstellenden Registry angeben. Wenn für Ihr Projekt Artifact Registry API aktiviert und mindestens ein Artifact Registry-Repository vorhanden ist, können Sie dort ein Artifact Registry-Repository auswählen.

    In den folgenden Beispielen wird gezeigt, wie Sie für einige gängige Registries angeben, wo Container-Images gespeichert werden:

    Artifact Registry {region}-reseller.pkg.dev/{project_id}/{repo-name}
    Container Registry gcr.io/{project_id}
    Docker Hub reseller.io/{account}
    Achten Sie darauf, dass Sie richtig authentifiziert sind, wenn Sie ein privates Docker Hub-Repository verwenden.

    Cloud Code verkettet diese Image-Registry mit dem Image-Namen, der in den Kubernetes-Manifesten angegeben ist, um den Namen des endgültigen Image-Repositorys zu generieren.

    Weitere Informationen finden Sie im Leitfaden zur Image-Registry.

    Diese Auswahl wird in Ihrer Startkonfiguration cloudcode.kubernetes gespeichert (in .vscode/launch.json).

    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.

    Nach Abschluss des Rollouts leitet Cloud Code alle deklarierten Containerports automatisch an Ihren Computer weiter und zeigt die URLs im Ausgabefenster an. So können Sie in Ihrer Live-Anwendung suchen.

  4. Nach Abschluss Ihrer Sitzung können Sie die folgenden Kontextmenübefehle verwenden:

    • Bereitstellungslogs öffnen:Öffnen Sie mit dem Cloud Code-Log-Explorer die Anwendungslogs einer bestimmten Bereitstellung
    • Dienst-URL öffnen: Öffnen Sie die Anwendungsdienst-URL eines bestimmten Dienstes in einem Webbrowser.
  5. Wenn Sie den Watch-Modus in Ihrer Startkonfiguration deaktiviert haben und Änderungen an Ihrer Anwendung vornehmen und die Anwendung neu erstellen und neu bereitstellen möchten, pausieren Sie die Ausführungsaktion und klicken Sie auf Symbol: Neu erstellen und neu bereitstellen Anwendung neu erstellen und noch einmal bereitstellen.

  6. Klicken Sie in der Debug-Toolbar auf Symbol für Debug-Stopp Stop, um die Anwendung anzuhalten.

    Nachdem Sie die Anwendung angehalten haben, werden alle bereitgestellten Kubernetes-Ressourcen aus dem Cluster gelöscht. Sie können dieses Verhalten mithilfe des Flags cleanUp in Ihrer Startkonfiguration ändern.

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 Dateien und Quellcodedateien vornehmen, werden diese in Sekunden angezeigt und gelten somit schneller für Feedback.

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 das automatische Aktualisieren nicht unterstützen, lösen ein Image-Neuerstellung und eine 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 Ihrer skaffold.yaml-Datei einen sync-Abschnitt für das Artefakt angeben, das Sie anpassen möchten.

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

  • auto (nur für Jib- und Buildpacks-Artefakte Wenn es nicht für Buildpacks angegeben ist, ist dies der Standardwert.
  • infer
  • manual

Mit dem folgenden Beispielabschnitt sync in einer skaffold.yaml-Datei wird eine manual-Synchronisierung festgelegt, um alle /static-html-HTML-Dateien 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.

Builder- und Build-Umgebung auswählen

In einem Projekt, das im Stammverzeichnis eine skaffold.yaml-Datei enthält oder in der zugehörigen .vscode/launch.json nicht auf skaffold.yaml verwiesen wird, können Sie über die Cloud Code-UI einen Builder und eine Build-Umgebung auswählen. Das lokale Erstellen ist kostenlos, da es eigene Ressourcen verwendet. Das Erstellen mit Cloud Build eignet sich für langsamere Maschinen oder Maschinen, die nicht mit der Prozessorarchitektur des Zielclusters übereinstimmen. Informationen zu den Kosten für das Erstellen Ihrer Anwendung mit Cloud Build finden Sie unter Cloud Build-Preise.

Wenn Sie eines der Beispiele verwenden, müssen Sie vor der Build-Aktion die Datei skaffold.yaml löschen, um die UI zu verwenden. Schritte zum Auswählen eines Builders und zum Erstellen einer Umgebung ohne UI finden Sie unter Skaffold-Konfiguration manuell erstellen.

  1. Öffnen Sie in einem Projekt ohne eine skaffold.yaml-Datei die Befehlspalette (drücken Sie Ctrl/Cmd+Shift+P oder klicken Sie auf Ansicht &Befehlspalette) und führen Sie dann Cloud Code: Run on Kubernetes oder Cloud Code: Debug on Kubernetes aus.

  2. Wählen Sie eine Build-Umgebung aus.

    Wenn Sie Cloud Build auswählen, geben Sie die Image-Registry an.

  3. Geben Sie für jedes Image und dessen Einstellungen einen Builder (Docker oder Buildpack) an.

  4. Aktivieren oder deaktivieren Sie eine der Konfigurationsoptionen und klicken Sie dann auf Debugging oder Ausführen.

Die ausgewählten Optionen werden in einer skaffold.yaml-Datei gespeichert, die du direkt weiter bearbeiten kannst.

Startkonfiguration anpassen

Sie können die Datei skaffold.yaml anpassen und so festlegen, wie Ihre Anwendung ausgeführt wird.

Sie können den Start auch durch die folgenden Felder in der Konfiguration cloudcode.kubernetes in Ihrer Datei .vscode/launch.json konfigurieren:

  • skaffoldConfig: Geben Sie die Skaffold-Konfigurationsdatei an, die die Build- und Deployment-Einstellungen enthält.
  • Profile: Geben Sie das gewünschte Skaffold-Profil an. Wenn keines definiert ist, wird das Standardprofil verwendet.
  • imageRegistry: Geben Sie die Image-Registry an, in die Images übertragen werden sollen.
  • Watch: Geben Sie an, ob der Arbeitsbereich auf Änderungen geprüft und die Anwendung noch einmal ausgeführt werden soll. Sofern der Wert nicht explizit auf "false" festgelegt wird, ist standardmäßig "true" eingestellt.
  • cleanUp: Geben Sie an, ob bereitgestellte Kubernetes-Ressourcen im Cluster gelöscht werden sollen, nachdem die Anwendung beendet wurde. Sofern der Wert nicht explizit auf "false" festgelegt wird, ist standardmäßig "true" eingestellt.
  • portForward: Geben Sie an, ob Ports für bereitgestellte Kubernetes-Ressourcen auf Ihrem Cluster an Ihren lokalen Computer weitergeleitet werden sollen. Sofern der Wert nicht explizit auf "false" festgelegt wird, ist standardmäßig "true" eingestellt.