Erste Schritte mit Skaffold in Google Cloud Deploy

Mit Sammlungen den Überblick behalten Sie können Inhalte basierend auf Ihren Einstellungen speichern und kategorisieren.

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

  • Skaffold für die Verwendung mit einer Bereitstellungspipeline von Google Cloud Deploy konfigurieren
  • Skaffold und Google Cloud Deploy mit Rendering-Tools von Drittanbietern wie Helm und Kustomize verwenden
  • Optional mit Skaffold für die lokale Entwicklung
  • Optional mit Skaffold für Continuous Integration und Continuous Deployment (CI/CD)

Vorteile von Skaffold

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

Ich habe Erfahrung mit CI/CD, aber ich verwende Skaffold derzeit nicht

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

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

Wenn ein Release erstellt wird, ruft Google Cloud Deploy Skaffold auf, um Ihre Manifeste zu rendern. Zum Zeitpunkt des Deployments ruft Google Cloud Deploy noch einmal Skaffold auf, um diese Manifeste anzuwenden, um die Anwendung auf jedem Ziel im Fortschritt bereitzustellen. Nach der Bereitstellung führt Skaffold Systemdiagnosen aus, um die Ziellaufzeit auf eine erfolgreiche Bereitstellung zu überwachen.

Skaffold für die kontinuierliche Entwicklung

Wenn Sie Skaffold für die kontinuierliche Entwicklung verwenden, werden Images erstellt, getestet und in einem Cluster (oder Minikube) bereitgestellt, wenn Sie Ihren Code ändern. Die IDE-Erweiterungen Cloud Code for VS Code und Cloud Code for IntelliJ integrieren Skaffold in Visual Studio Code und JetBrains IDEs für die kontinuierliche Entwicklung.

Skaffold für Continuous Delivery

Sie können auch Skaffold für die kontinuierliche Bereitstellung mit Build-, Bereitstellungs-, Rendering- und Anwendungsschritten verwenden. Google Cloud Deploy verwendet die Rendering- und Anwendungsfunktionen von Skafold. Damit Sie Google Cloud Deploy verwenden können, benötigen Sie mindestens eine gültige skaffold.yaml-Konfigurationsdatei.

Über Skaffold lassen sich auch Manifestverwaltungstools 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 verwenden. kubectl bleibt der Bereitsteller 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 Bereitstellungen konfigurieren. Anschließend können Sie das Rendering-Modul von Skaffold über Google Cloud Deploy verwenden, um jedes Deployment-spezifische Manifest aus einem dieser Basismanifeste zu rendern und dann bereitzustellen.

Weitere Informationen zum Verwalten von Manifesten, einschließlich Beispielen zur Verwendung von Skaffold und Google Cloud Deploy mit gängigen Manifestvorlagen, wie Helm und Kustomize.

Was ist erforderlich, damit Google Cloud Deploy funktioniert?

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

  • Für alle skaffold.yaml-Konfigurationen sind folgende Headerinformationen erforderlich:

    apiVersion: skaffold/v2beta28
    Kind: Config
    
  • Eine deploy-Stanza mit deploy.kubectl für die Bereitstellung in GKE oder Anthos oder deploy.cloudrun für die Bereitstellung in Cloud Run.

    Für GKE: yaml deploy: kubectl: manifests: - ...

    Eine Liste aller Kubernetes-Rohmanifeste in der Stanza manifests. Wenn Sie einen Renderer wie Helm oder Kustomize zum Rendern von Manifesten verwenden möchten, finden Sie unter Kustomize-Unterstützung zu skaffold.yaml hinzufügen und Helm-Unterstützung zu skaffold.yaml hinzufügen weitere Informationen zur Konfiguration von Skaffold für die Verwendung dieser Tools.

    Für Cloud Run:

    metadata:
      name:
    manifests:
      rawYaml:
      - ...
    deploy:
      cloudrun: {}
    

skaffold.yaml-Datei erstellen

Google Cloud Deploy verwendet Skaffold zum Rendern und Bereitstellen Ihrer Anwendungen.

Sie müssen mindestens eine skaffold.yaml-Datei angeben, in der die zu verwendenden Manifeste angegeben sind. Beispiel:

apiVersion: skaffold/v2beta28
kind: Config
deploy:
  kubectl:
    manifests:
      - MANIFEST

In dieser Konfiguration ist MANIFEST der Pfad zu den Manifesten, die von Skaffold verarbeitet werden sollen.

skaffold.yaml von Google Cloud Deploy generieren lassen

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

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

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

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

Verwenden Sie denselben Befehl, um skaffold.yaml aus einer Cloud Run-Dienst-YAML-Datei zu generieren, jedoch mit --from-run-manifest anstelle von --from-k8s-manifest.

Wenn Sie eines dieser Flags mit dem Flag --skaffold-file oder --source verwenden, wird ein Fehler generiert.

Generierte skaffold.yaml-Datei verwenden

Das generierte skaffold.yaml eignet sich zum Onboarding, Lernen und zur Demonstration von Google Cloud Deploy. Wenn Sie mit Google Cloud Deploy und Produktionsarbeitslasten vertraut sind, können Sie eine Skaffold-Konfiguration erstellen, die sich unter Verwendung von Skaffold-Profilen von Ihren Zielen unterscheidet.

Wenn Sie die generierte Datei skaffold.yaml als Ausgangspunkt für die Erstellung einer eigenen differenzierten Skaffold-Konfiguration verwenden, achten Sie darauf, dass Sie die Datei im Rendering-Quellarchiv und nicht in der gerenderten Datei verwenden. Die Rendering-Quelle steht auf dem Tab Artefakte auf der Seite **Releasedetails ** zum Download zur Verfügung.

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

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

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

    Klicken Sie im Abschnitt Zielartefakte auf Artefakte ansehen.

    Release-Detailseite mit Rendering-Quell- und Zielartefakten

Skaffold für die lokale Entwicklung verwenden

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

Wenn Sie Skaffold auf diese Weise verwenden, können Sie die gleichen Befehle lokal wie für die Remote-Bereitstellung verwenden.

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

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

Skaffold für CI/CD verwenden

Neben Skaffold für den kontinuierlichen lokalen Build und die Bereitstellung können Sie Skaffold für CI/CD verwenden. Google Cloud Deploy verwendet die CI/CD-Features in Skaffold, um Ihre Manifeste zu rendern und anzuwenden und Ihre Anwendung auf Ihre definierten Ziele bereitzustellen. Dazu werden Container-Images verwendet, die mit einem CI-Tool wie Cloud Build und einer Image-Registry wie Artifact Registry erstellt wurden.

Rendern, bereitstellen und anwenden

Skaffold trennt den Manifest-Rendering-Prozess vom Deployment. Google 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 Übernehmen können Sie den vollständigen deklarativen Status Ihrer Anwendung in der Konfiguration erfassen, sodass sie sicher und wiederholbar angewendet werden kann (z. B. für Rollbacks). Dieses Verfahren vereinfacht auch Genehmigungen. Da Manifeste für alle Ziele vor dem ersten Roll-out gerendert werden, können Sie die gerenderte YAML-Datei sehen, die auf jedes Ziel angewendet wird.

Google Cloud Deploy unterstützt die Bereitstellung anderer Anwendungen nicht mit anderen Bereitstellern. Für das Rendering können Sie jedoch Tools wie Helm oder Kustomize verwenden.

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

Skaffold-Profile

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

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

Profile sind nicht erforderlich, um Skaffold in Google Cloud Deploy zu verwenden. Sie sind jedoch nützlich, um Manifestanpassungen für Ihre Ziele zu definieren, z. B. mit verschiedenen Kustomize-kustomization.yaml-Dateien pro Ziel.

Kustomize-Support zu skaffold.yaml hinzufügen

Die Einbindung Ihrer Kustomize-Konfiguration in Ihre Google Cloud Deploy-/Skaffold-Konfiguration umfasst Folgendes:

  1. Fügen Sie eine kustomization.yaml-Datei 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 eine deploy-Stanza für jedes Profil.

    Sie können auch eine deploy-Stanza außerhalb definierter Profile ausführen, wenn Sie keine Profile verwenden oder eine Standardbereitstellungskonfiguration haben, die nicht mit einem Profil verknüpft ist. Beispiel:

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

    Die hier gezeigte Skaffold-Konfiguration hat separate Profile für die Ziele test, staging und prod. Außerdem wird ein Profil für die lokale Entwicklung angezeigt. 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

Sie können Ihre Manifeste mit Helm rendern. Google Cloud Deploy verwendet Helm nicht zum Bereitstellen Ihrer Anwendungen und unterstützt nur kubectl als Bereitsteller.

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

Fügen Sie der Datei skaffold.yaml eine helm-Stanza hinzu, um ein Helm-Diagramm zu verwenden.

apiVersion: skaffold/v2beta28
kind: Config
build:
  artifacts:
  - image: skaffold-helm-image
deploy:
  helm:
    releases:
    - name: skaffold-helm-image
      chartPath: charts

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

kpt mit Skaffold verwenden

Wir empfehlen, kpt nicht mit Skaffold V1 in Google Cloud Deploy zu verwenden.

Nicht unterstützte Skaffold-Features

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

Nächste Schritte

  • Besuchen Sie die Skaffold-Website, um zu erfahren, wie das funktioniert und was es für Sie tun kann.

  • Übung mit Google Cloud Deploy mit Kustomize- und Skaffold-Profilen

  • Hier erfahren Sie, wie Google Cloud Deploy die zu verwendende Skaffold-Version auswählt, wann sich die Skaffold-Version ändert und wie Sie ermitteln, welche Version verwendet wird.

  • Hier erfahren Sie, wie Sie Skaffold-Profile mit erweiterten Manifest-Managementtools wie Helm, Kustomize und kpt verwenden.