Erste Schritte mit Skaffold in Cloud Deploy

In diesem Dokument werden die ersten Schritte mit Skaffold im Rahmen von Cloud Deploy beschrieben:

  • Skaffold für die Verwendung mit einer Cloud Deploy-Bereitstellungspipeline konfigurieren
  • Skaffold und Cloud Deploy mit Renderingtools von Drittanbietern wie Helm und Kustomize verwenden
  • Optional, Skaffold für die lokale Entwicklung verwenden
  • Optional mit Skaffold für kontinuierliche Integration und kontinuierliche Bereitstellung (CI/CD)

Warum Skaffold?

Möchten Sie wissen, warum Cloud Deploy Skaffold verwendet und warum Sie eine Skaffold-Konfiguration verwalten müssen? Lesen Sie weiter.

Ich kenne mich mit CI/CD aus, verwende aber derzeit Skaffold nicht

Skaffold ist ein Open-Source-Befehlszeilentool zur Verbesserung der Produktivität für Entwickler. Sie orchestriert Continuous Entwicklung, Continuous Integration (CI) und Continuous Delivery (CD).

Skaffold bietet eine deklarative, portable Konfiguration mit einer Plug-in-Architektur, mit der Sie verschiedene Tools für die Renderingphase verwenden können.

Wenn ein Release erstellt wird, ruft Cloud Deploy Skaffold auf, um Ihre Manifeste zu rendern. Zum Zeitpunkt der Bereitstellung ruft Cloud Deploy Skaffold noch einmal auf, um diese Manifeste anzuwenden und Ihre Anwendung für jedes Ziel in Ihrem Fortschritt bereitzustellen. Nach der Bereitstellung führt Skafold Systemdiagnosen durch, um die Ziellaufzeit für die erfolgreiche Bereitstellung zu überwachen.

Skaffold für kontinuierliche Entwicklung

Wenn Sie Skaffold für die kontinuierliche Entwicklung verwenden, werden Images erstellt, getestet und in einem Cluster (oder Minikube) bereitgestellt, während Sie den Code ändern. Mit den IDE-Erweiterungen Cloud Code for VS Code und Cloud Code for IntelliJ können Sie Skaffold für eine kontinuierliche Entwicklung in Visual Studio Code- und JetBrains-IDEs einbinden.

Skaffold für Continuous Delivery

Sie können auch Skaffold für Continuous Delivery mit Schritten zum Erstellen, Bereitstellen, Rendern und Anwenden verwenden. Cloud Deploy verwendet die Rendering- und Anwendungsfunktionen von Skafold. Sie benötigen mindestens eine gültige skaffold.yaml-Konfigurationsdatei, um Cloud Deploy verwenden zu können.

Über Skaffold können Sie auch Tools zur Manifestverwaltung von Drittanbietern wie Helm und Kustomize einbinden. Wenn Sie Skaffold auf diese Weise verwenden, können Sie die Funktionen dieser Tools zum Rendern von Manifesten nutzen. kubectl bleibt der deployer für diese Manifeste.

Ich habe noch keine Erfahrung mit der Bereitstellung in Kubernetes

Mit Skaffold können Sie einen Basissatz von Manifesten für alle Ihre Bereitstellungen konfigurieren. Sie können dann die Rendering-Engine von Skaffold über Cloud Deploy verwenden, um jedes bereitstellungsspezifische Manifest aus einem dieser Basismanifeste zu rendern und dann bereitzustellen.

Weitere Informationen zum Verwalten von Manifesten, einschließlich Beispielen für die Verwendung von Skaffold und Cloud Deploy mit gängigen Tools für Manifestvorlagen wie Helm und Kustomize

Was ist erforderlich, damit Cloud Deploy funktioniert?

Wenn Sie eine einfache Cloud Deploy-Bereitstellungspipeline verwenden möchten, muss die Konfigurationsdatei skaffold.yaml mindestens die folgende Konfiguration haben:

  • Die Header-Informationen, die alle skaffold.yaml-Konfigurationen benötigen:

    apiVersion: skaffold/v4beta7
    kind: Config
    
  • Eine manifests-Stanza für GKE, GKE Enterprise oder Cloud Run, die alle Kubernetes-Rohmanifeste auflistet (es sei denn, Sie verwenden ein Manifestverwaltungstool wie Helm oder Kustomize).

    Hier ein Beispiel mit einem Kubernetes-RAW-Manifest:

    manifests:
      rawYaml:
      - deployment.yaml
    

    Wenn Sie einen Renderer (wie Helm oder Kustomize) zum Rendern von Manifesten verwenden möchten, lesen Sie die Informationen unter Helm-Unterstützung zu skaffold.yaml hinzufügen und Kustomize-Unterstützung zu skaffold.yaml hinzufügen. Dort erfahren Sie, wie Sie Skaffold für die Verwendung dieser Tools konfigurieren.

    Beispiele für Helm und Kustomize finden Sie unter Manifeste verwalten.

  • Eine deploy-Stanza mit entweder deploy.kubectl für die Bereitstellung in GKE oder GKE Enterprise oder deploy.cloudrun für die Bereitstellung in Cloud Run.

    Für GKE- und GKE Enterprise-Ziele:

    deploy:
      kubectl: {}
    

    Die Bereitstellungs-Stanza stellt die Anwendungsmanifeste bereit, die in der Manifest-Stanza bereitgestellt wurden.

    Für Cloud Run-Ziele:

    deploy:
      cloudrun: {}
    

    Die Bereitstellungs-Stanza stellt die in der Manifest-Stanza angegebenen Anwendungsmanifeste bereit.

Wenn Sie benutzerdefinierte Ziele verwenden, muss Ihre skaffold.yaml den Header (apiVersion und kind:) sowie die benutzerdefinierten Aktionen enthalten, die vom benutzerdefinierten Ziel verwendet werden, sofern der benutzerdefinierte Zieltyp nicht bereits auf eine Remote-Skaffold-Konfiguration verweist.

skaffold.yaml-Datei erstellen

Cloud Deploy verwendet Skaffold zum Rendern und Bereitstellen Ihrer Anwendungen.

Für jeden Release musst du mindestens eine skaffold.yaml-Datei bereitstellen, in der die zu verwendenden Manifeste angegeben sind. Im vorherigen Abschnitt erfahren Sie, was in dieser Datei enthalten sein muss.

skaffold.yaml von Cloud Deploy generieren lassen

Wenn Sie keine skaffold.yaml-Datei, aber ein einzelnes Kubernetes-Manifest oder eine Cloud Run-Dienstdefinitionsdatei haben, kann Cloud Deploy eine skaffold.yaml-Datei für Sie generieren .

Die generierte Skaffold-Datei ist nach Abschluss des Release im Quell-Staging-Verzeichnis von Cloud Storage verfügbar.

Der folgende Befehl enthält das Flag --from-k8s-manifest und übergibt das Kubernetes-Manifest. Cloud Deploy verwendet die Informationen im Manifest, um das skaffold.yaml zu generieren, das dann für den Release verwendet wird.

gcloud deploy releases create  RELEASE_NAME --delivery-pipeline=PIPELINE_NAME --from-k8s-manifest=MANIFEST --region=REGION

Um skaffold.yaml aus der YAML-Datei eines Cloud Run-Dienstes zu generieren, verwenden Sie denselben Befehl, aber mit --from-run-manifest anstelle von --from-k8s-manifest.

Die Verwendung eines dieser Flags mit dem Flag --skaffold-file oder --source generiert einen Fehler.

Mit der generierten skaffold.yaml-Datei

Die generierte skaffold.yaml eignet sich zum Onboarding, Lernen und Demonstrieren von Cloud Deploy. Nachdem Sie sich mit Cloud Deploy und für Produktionsarbeitslasten vertraut gemacht haben, benötigen Sie möglicherweise eine Skaffold-Konfiguration, die zwischen Ihren Zielen unterscheidet (mithilfe von Skaffold-Profilen).

Wenn Sie die generierte skaffold.yaml-Datei als Ausgangspunkt für Ihre eigene differenzierte Skaffold-Konfiguration verwenden, achten Sie darauf, die Datei im Rendering-Quellarchiv zu verwenden, nicht die gerenderte Datei. Die Renderingquelle kann auf der Seite **Releasedetails ** über den Tab Artefakte heruntergeladen werden.

  • Diese generierte skaffold.yaml ist in der Renderingquelle enthalten, die in einem Cloud Storage-Bucket gespeichert ist.

    Sie können sich diese Datei ansehen, indem Sie die Datei .tar.gz herunterladen und extrahieren.

  • Das gerenderte skaffold.yaml ist unter Zielartefakte verfügbar.

    Klicken Sie im Bereich Zielartefakte auf Artefakte ansehen.

    Detailseite des Release mit Quell- und Zielartefakten für das Rendering

Skaffold für die lokale Entwicklung verwenden

Eine der Stärken von Skaffold besteht darin, dass Sie es für die lokale Entwicklung und für CI/CD verwenden können. Im dev-Modus beobachtet Skaffold Ihre Quelldateien. Wenn Skaffold eine Änderung erkennt, erstellt Skaffold die Images neu, testet sie noch einmal und stellt die Container beispielsweise in einem Minikube-Cluster auf Ihrem lokalen Computer bereit.

Wenn Sie Skaffold auf diese Weise verwenden, können Sie lokal dieselben Befehle wie für das Remote-Deployment verwenden.

Wenn Sie Skaffold für die lokale Entwicklung verwenden, können Sie separate Skaffold-Profile für Ihre Ziele und eine standardmäßige Bereitstellungs-Stanza für die lokale Entwicklung definieren.

Wenn Sie den dev-Modus beenden, bereinigt Skaffold bereitgestellte Artefakte aus dem Cluster.

Skaffold für CI/CD verwenden

Neben der Verwendung von Skaffold für die kontinuierliche lokale Erstellung und Bereitstellung können Sie Skaffold für CI/CD nutzen. Cloud Deploy verwendet die CI/CD-Features in Skaffold, um Ihre Manifeste zu rendern und anzuwenden und Ihre Anwendung für die von Ihnen definierten Ziele bereitzustellen. Voraussetzung ist, dass Container-Images mit einem CI-Tool wie Cloud Build und einer Image-Registry wie Artifact Registry erstellt wurden.

Rendern, bereitstellen und anwenden

Skaffold trennt den Manifest-Renderingprozess von der Bereitstellung. Cloud Deploy ruft skaffold render auf, um die Manifeste zu rendern, und skaffold apply, um sie auf das Ziel anzuwenden.

Durch diese Trennung zwischen Rendering und Anwenden können Sie den vollständigen deklarativen Status Ihrer Anwendung in der Konfiguration erfassen, sodass sie sicher und wiederholt angewendet werden kann (z. B. für Rollbacks). Diese Technik erleichtert auch Genehmigungen. Da Manifeste vor dem ersten Roll-out für alle Ziele gerendert werden, können Sie die gerenderte YAML-Datei sehen, die auf jedes Ziel angewendet wird.

Cloud Deploy unterstützt nicht die Verwendung anderer Bereitsteller zum Bereitstellen Ihrer Anwendung. Sie können jedoch Tools wie Helm oder Kustomize zum Rendern verwenden.

Weitere Informationen zur Bereitstellung von Cloud Deploy mit kubectl als Bereitsteller finden Sie unter Cloud Deploy-Dienstarchitektur.

Skaffold-Profile

Sie können separate Stanza-Profile für Skaffold erstellen, die in skaffold.yaml identifiziert werden.profiles:

Wenn Sie Skaffold-Profile mit Cloud Deploy verwenden, können Sie separate Profile für alle oder einige Ihrer Ziele erstellen. z. B. verschiedene Profile für dev, staging und prod.

Profile sind für die Verwendung von Skaffold in Cloud Deploy nicht erforderlich, aber nützlich, um Manifestanpassungen unter Ihren Zielen zu definieren, z. B. mit verschiedenen Kustomize-kustomization.yaml-Dateien pro Ziel.

Kustomize-Support zu skaffold.yaml hinzufügen

So binden Sie Ihre Kustomize-Konfiguration in Ihre Cloud Deploy/Skaffold-Konfiguration ein:

  1. Fügen Sie die Datei kustomization.yaml in Ihre Konfigurationsdateien ein.

    Sie können Ihre Konfigurationsdateien in einem lokalen Verzeichnis oder in einem Cloud Storage-Bucket speichern.

  2. Erstellen Sie in der Datei skaffold.yaml für jedes Profil eine deploy-Stanza.

    Sie können auch eine deploy-Stanza außerhalb definierter Profile haben, wenn Sie keine Profile verwenden oder für eine Standardbereitstellungskonfiguration, die nicht an ein Profil gebunden ist.

    Das folgende Beispiel zeigt eine Skaffold-Konfiguration, die deploy-Stanzas pro Profil zeigt und eine fiktive Beispielanwendung namens my-app verwendet:

    apiVersion: skaffold/v4beta7
    kind: Config
    build:
      artifacts:
        - image: my-app-web-profiles
          context: my-app-web-profiles
        - image: my-app-application-profiles
          context: my-app-application-profiles
      googleCloudBuild:
        projectId: ${PROJECT_ID}
    profiles:
    - name: local
      manifests:
        kustomize:
          paths:
            - my-app-application-profiles/kubernetes/local
    - name: test
      manifests:
        kustomize:
          paths:
            - my-app-application-profiles/kubernetes/test
    - name: staging
      manifests:
        kustomize:
          paths:
            - my-app-application-profiles/kubernetes/staging
    - name: prod
      manifests:
        kustomize:
          paths:
            - my-app-application-profiles/kubernetes/prod
    deploy:
      kubectl: {}
    

    Die hier gezeigte Skaffold-Konfiguration hat separate Profile für die Ziele test, staging und prod. Es zeigt auch ein Profil für die lokale Entwicklung. In jedem Profil gibt es eine deploy.kustomize-Stanza mit einem Pfad, der auf den Standort der Kustomisierung verweist, die für dieses Ziel verwendet werden soll.

Helm-Unterstützung zu skaffold.yaml hinzufügen

Du kannst deine Manifeste mit Helm rendern. Cloud Deploy verwendet zum Bereitstellen Ihrer Anwendungen nicht Helm und unterstützt nur kubectl als Deployer.

Wenn Sie Helm verwenden möchten, benötigen Sie Ihr Helm-Diagramm oder Ihre Helm-Diagramme, die an einem beliebigen Ort gespeichert sind, auf den Sie in Ihrem skaffold.yaml verweisen können. Dieser Speicherort kann in einem Dateisystem, einem Repository, möglicherweise zusammen mit Ihrem skaffold.yaml oder einem Open Container Initiative-Repository (OCI) erfolgen.

Wenn Sie ein Helm-Diagramm verwenden möchten, fügen Sie der Datei skaffold.yaml eine helm-Stanza hinzu.

apiVersion: skaffold/v4beta7
kind: Config
build:
  artifacts:
  - image: skaffold-helm-image
manifests:
  helm:
    releases:
    - name: skaffold-helm-image
      chartPath: charts
deploy:
  kubectl: {}

Die Referenz skaffold.yaml zeigt, was in dieser helm-Stanza erforderlich ist.

Nicht unterstützte Skaffold-Features

Die folgenden Features von Skaffold können in Cloud Deploy nicht verwendet werden:

Nächste Schritte