Erste Schritte mit Skaffold in Cloud Deploy

In diesem Dokument wird beschrieben, wie Sie Skaffold als Teil von Cloud Deploy verwenden können. Dazu gehören die folgenden Themen:

  • 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: Skaffold für Continuous Integration und Continuous Deployment (CI/CD) verwenden

Warum Skaffold?

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

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

Skaffold ist ein Open-Source-Befehlszeilentool, mit dem die Produktivität von Entwicklern gesteigert werden kann. Es orchestriert Continuous Development, Continuous Integration (CI) und Continuous Delivery (CD).

Skaffold bietet eine deklarative, portierbare 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. Bei der Bereitstellung ruft Cloud Deploy Skaffold noch einmal auf, um diese Manifeste anzuwenden und Ihre Anwendung auf jedem Ziel in Ihrem Fortschritt bereitzustellen. Nach der Bereitstellung führt Skaffold Systemdiagnosen durch, um die Ziel-Laufzeit 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, während Sie Ihren Code ändern. Die IDE-Erweiterungen Cloud Code for VS Code und Cloud Code for IntelliJ binden Skaffold in Visual Studio Code und JetBrains-IDEs ein, um eine kontinuierliche Entwicklung zu ermöglichen.

Skaffold für Continuous Delivery

Sie können Skaffold auch für die kontinuierliche Bereitstellung mit Build-, Bereitstellungs-, Rendering- und Anwenden-Schritten verwenden. Cloud Deploy verwendet die Render- und Apply-Funktionen von Skaffold. Wenn Sie Cloud Deploy verwenden möchten, benötigen Sie mindestens eine gültige skaffold.yaml-Konfigurationsdatei.

Mit Skaffold können Sie 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 nutzen. kubectl bleibt der Deployer für diese Manifeste.

Ich bin neu bei 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 bereitzustellen.

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

Was ist erforderlich, damit Cloud Deploy funktioniert?

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

  • Die Header-Informationen, die für alle skaffold.yaml-Konfigurationen erforderlich sind:

    apiVersion: skaffold/v4beta7
    kind: Config
    
  • Ein manifests-Abschnitt für GKE, angehängte GKE-Cluster oder Cloud Run, in dem alle Kubernetes-Rohmanifeste aufgeführt sind (es sei denn, Sie verwenden ein Manifestverwaltungstool wie Helm oder Kustomize).

    Hier ein Beispiel mit einem unverarbeiteten Kubernetes-Manifest:

    manifests:
      rawYaml:
      - deployment.yaml
    

    Wenn Sie einen Renderer wie Helm oder Kustomize verwenden möchten, um Manifeste zu rendern, finden Sie unter Helm-Unterstützung für skaffold.yaml hinzufügen und Kustomize-Unterstützung für skaffold.yaml hinzufügen Informationen zur Konfiguration von Skaffold für die Verwendung dieser Tools.

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

  • Ein deploy-Abschnitt mit entweder deploy.kubectl für die Bereitstellung in GKE oder in GKE-angehängten Clustern oder deploy.cloudrun für die Bereitstellung in Cloud Run.

    Für GKE- und angehängte GKE-Cluster:

    deploy:
      kubectl: {}
    

    Im Abschnitt „deploy“ werden die Anwendungsmanifeste bereitgestellt, die im Abschnitt „manifests“ angegeben wurden.

    Für Cloud Run-Ziele:

    deploy:
      cloudrun: {}
    

    Mit dem Deploy-Abschnitt werden die im Manifest-Abschnitt bereitgestellten Anwendungsmanifeste bereitgestellt.

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

skaffold.yaml-Datei erstellen

Cloud Deploy verwendet Skaffold zum Rendern und Bereitstellen Ihrer Anwendungen.

Für jede Version müssen Sie mindestens eine skaffold.yaml-Datei angeben, in der die zu verwendenden Manifeste angegeben sind. Informationen dazu, was in diese Datei gehört, finden Sie im vorherigen Abschnitt.

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 Releases im Staging-Verzeichnis der Cloud Storage-Quelle verfügbar.

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

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

Wenn Sie die skaffold.yaml aus einer Cloud Run-Dienst-YAML generieren möchten, verwenden Sie denselben Befehl, aber mit --from-run-manifest anstelle von --from-k8s-manifest.

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

Generierte skaffold.yaml-Datei verwenden

Die generierte skaffold.yaml eignet sich für das Onboarding, zum Lernen und zum Demonstrieren von Cloud Deploy. Wenn Sie mit Cloud Deploy vertraut sind und Produktionsarbeitslasten verwenden, benötigen Sie möglicherweise eine Skaffold-Konfiguration, die zwischen den Zielen unterscheidet (mit Skaffold-Profilen).

Wenn Sie die generierte skaffold.yaml-Datei als Ausgangspunkt für die Erstellung Ihrer eigenen differenzierten Skaffold-Konfiguration verwenden, achten Sie darauf, dass Sie die Datei im Rendering-Quellarchiv und nicht die gerenderte Datei verwenden. Die Rendering-Quelle kann auf der Seite Versionsdetails über den Tab Artefakte heruntergeladen werden.

  • Diese generierte skaffold.yaml ist in der Renderquelle 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.

    Seite mit Release-Details, auf der Quell- und Zielartefakte für das Rendern angezeigt werden

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 Modus dev überwacht Skaffold Ihre Quelldateien. Wenn eine Änderung erkannt wird, erstellt Skaffold die Images neu, führt die Tests noch einmal aus und stellt die Container in einem Minikube-Cluster (z. B.) auf Ihrem lokalen Computer neu bereit.

Wenn Sie Skaffold auf diese Weise verwenden, können Sie lokal dieselben Befehle 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 einen Standard-Deploy-Abschnitt für die lokale Entwicklung definieren.

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

Skaffold für CI/CD verwenden

Neben der Verwendung von Skaffold für kontinuierliche lokale Builds und Bereitstellungen können Sie Skaffold auch für CI/CD verwenden. Cloud Deploy verwendet die CI/CD-Funktionen in Skaffold, um Ihre Manifeste zu rendern und anzuwenden und Ihre Anwendung auf den von Ihnen definierten Zielen bereitzustellen. Dabei 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 das Rendern des Manifests 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 Rendern und Anwenden können Sie den vollständigen deklarativen Status Ihrer Anwendung in der Konfiguration erfassen, sodass er sicher und wiederholbar angewendet werden kann (z. B. für Rollbacks). Dieses Verfahren erleichtert auch die Genehmigungen. Da Manifeste vor dem ersten Roll-out für alle Ziele gerendert werden, können Sie das gerenderte YAML sehen, das auf jedes Ziel angewendet wird.

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

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

Skaffold-Profile

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

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

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

Kustomize-Unterstützung für Ihr skaffold.yaml hinzufügen

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

  1. Nehmen Sie eine kustomization.yaml-Datei in Ihre Konfigurationsdateien auf.

    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 einen deploy-Abschnitt außerhalb aller definierten Profile haben, wenn Sie keine Profile verwenden oder eine Standardbereitstellungskonfiguration, die nicht an ein Profil gebunden ist.

    Das folgende Beispiel für eine Skaffold-Konfiguration zeigt deploy-Abschnitte pro Profil und verwendet eine fiktive Beispiel-App namens my-app:

    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. Außerdem wird ein Profil für die lokale Entwicklung angezeigt. In jedem Profil gibt es einen deploy.kustomize-Abschnitt mit einem Pfad, der auf den Speicherort der Kustomisierung für dieses Ziel verweist.

Helm-Unterstützung für skaffold.yaml hinzufügen

Sie können Helm verwenden, um Ihre Manifeste zu rendern. Cloud Deploy verwendet nicht Helm zum Bereitstellen Ihrer Anwendungen und unterstützt nur kubectl als Bereitstellungstool.

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

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

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

In der skaffold.yaml-Referenz sehen Sie, was in diesem helm-Abschnitt erforderlich ist.

Nicht unterstützte Skaffold-Funktionen

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

Nächste Schritte