Erste Schritte mit Skaffold in Cloud Deploy

In diesem Dokument wird beschrieben, wie Sie Skaffold als Teil von Cloud Deploy verwenden. Es enthält folgende 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? Lesen Sie weiter.

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

Skaffold ist ein Open-Source-Befehlszeilentool zur Verbesserung der Produktivität für zu entwickeln. Sie orchestriert Continuous Development, 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. 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 Ziellaufzeit auf eine erfolgreiche Bereitstellung zu prüfen.

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 integrieren Skaffold in Visual Studio Code und JetBrains-IDEs, um eine kontinuierliche Entwicklung zu ermöglichen.

Skaffold für Continuous Delivery

Sie können auch Skaffold für die kontinuierliche Bereitstellung mit den Schritten „Erstellen“, „Bereitstellen“, „Rendern“ und „Anwenden“ verwenden. Cloud Deploy verwendet die Rendering- und Anwendungsfunktionen von Skaffold. Zur Verwendung von Cloud Deploy benötigen Sie mindestens eine gültige skaffold.yaml-Konfigurationsdatei.

Über Skaffold können Sie auch die Manifestverwaltung von Drittanbietern einbinden wie Helm und Kustomize. Wenn Sie Skaffold auf diese Weise verwenden, können Sie die Funktionen dieser Tools nutzen, Manifests. 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 Ihre Bereitstellungen. 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 zur Verwendung von Skaffold und Cloud Deploy mit gängigen Tools zur Manifest-Vorlage, wie Helm und Kustomize.

Was ist erforderlich, damit Cloud Deploy funktioniert?

Um eine einfache Cloud Deploy-Bereitstellungspipeline zu verwenden, Konfigurationsdatei skaffold.yaml benötigt mindestens die folgende Konfiguration:

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

    apiVersion: skaffold/v4beta7
    kind: Config
    
  • Eine manifests-Strophe für GKE, GKE Enterprise oder Cloud Run, in der alle Roh-Kubernetes-Manifeste aufgeführt sind (es sei denn, Sie verwenden ein Manifestverwaltungstool wie Helm oder Kustomize).

    Hier ist ein Beispiel, das ein unbearbeitetes Kubernetes-Manifest verwendet:

    manifests:
      rawYaml:
      - deployment.yaml
    

    Wenn Sie ein Renderer wie Helm oder Kustomize zum Rendern von Manifesten verwenden möchten, finden Sie unter Helm-Unterstützung zu skaffold.yaml hinzufügen und Kustomize-Unterstützung zu skaffold.yaml hinzufügen eine Anleitung zum Konfigurieren von Skaffold für die Verwendung dieser Tools.

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

  • Eine deploy-Stanza mit deploy.kubectl für die Bereitstellung in GKE oder in GKE Enterprise oder deploy.cloudrun zum Bereitstellen auf Cloud Run zu übertragen.

    Für GKE- und GKE Enterprise-Ziele:

    deploy:
      kubectl: {}
    

    In der Strophe „deploy“ werden die Anwendungsmanifeste bereitgestellt, die in der Strophe „manifests“ angegeben wurden.

    Für Cloud Run-Ziele:

    deploy:
      cloudrun: {}
    

    In der Deploy-Stanza werden die in der Manifests-Stanza bereitgestellten Anwendungsmanifeste bereitgestellt.

Wenn Sie benutzerdefinierte Ziele verwenden, muss Ihre skaffold.yaml den Header (apiVersion und kind:) sowie die benutzerdefinierten Aktionen enthalten, die für das benutzerdefinierte 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 angeben, die identifiziert die zu verwendenden Manifeste. Informationen dazu, was in diese Datei aufgenommen werden muss, finden Sie im vorherigen Abschnitt.

skaffold.yaml von Cloud Deploy generieren lassen

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

Die generierte Skaffold-Datei ist in der Cloud Storage-Quelle verfügbar Staging-Verzeichnis, nachdem die Veröffentlichung abgeschlossen ist.

Der folgende Befehl enthält das Flag --from-k8s-manifest, über das das Kubernetes-Manifest übergeben wird. Cloud Deploy verwendet die Informationen in der 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 

Wenn Sie die skaffold.yaml aus einer Cloud Run-Dienst-YAML-Datei 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 --source verwenden, wird ein Fehler ausgegeben.

Generierte skaffold.yaml-Datei verwenden

Die generierte skaffold.yaml eignet sich für Onboarding, Lernen und Cloud Deploy demonstriert. Nachdem Sie mit Cloud Deploy vertraut sind, und für Produktionsarbeitslasten eignet sich eine Skaffold-Konfiguration, zur Unterscheidung Ihrer Ziele mithilfe von Skaffold-Profilen

Wenn Sie die generierte skaffold.yaml-Datei als Ausgangspunkt für die Erstellung Ihre eigene differenzierte Skaffold-Konfiguration verwenden, das Quellarchiv wird gerendert, nicht die gerenderte Datei. Die Renderingquelle ist auf dem Tab Artefakte unter **Releasedetails ** zum Download verfügbar Seite.

  • 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 Ziel-Artefakte auf Artefakte ansehen.

    Seite mit Release-Details mit Quell- und Zielartefakten für das Rendering

Skaffold für die lokale Entwicklung verwenden

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

Wenn Sie Skaffold auf diese Weise verwenden, können Sie lokal dieselben Befehle wie für Remotebereitstellung.

Wenn Sie Skaffold für die lokale Entwicklung verwenden, können Sie separate Skaffold-Profile für Ihre Ziele und einen Standard-Bereitstellungsabschnitt 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

Sie können Skaffold nicht nur für kontinuierliches lokales Erstellen und Bereitstellen, sondern auch für CI/CD verwenden. Cloud Deploy verwendet die CI/CD-Features in Skaffold zum Rendern und Anwenden der Manifeste sowie zum Bereitstellen der Anwendung auf der Grundlage Ihrer definierten Ziele, wobei Container-Images mit einem CI-Tool wie Cloud Build erstellt wurden und eine Image-Registry wie Artifact Registry.

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 rendern und anwenden können Sie den gesamten deklarativen Status Ihrer Anwendung in der Konfiguration, damit sie sicher und wiederholbar angewendet werden (z. B. für Rollbacks). Bei dieser Technik erleichtern das Genehmigungen. Weil Manifeste für alle Ziele vor dem Beim ersten Rollout sehen Sie die gerenderte YAML-Datei, die auf die einzelnen Ziel.

Cloud Deploy unterstützt die Verwendung anderer Bereitsteller zur Bereitstellung Ihres . Sie können jedoch Tools wie Helm oder Kustomize zum Rendern:

Weitere Informationen zum Bereitstellen mit Cloud Deploy und kubectl als Bereitstellungstool finden Sie unter Cloud Deploy-Dienstarchitektur.

Skaffold-Profile

Sie können separate Skaffold-Dateien erstellen, profiles – identifiziert in skaffold.yaml, in einer profiles:-Stanza.

Wenn Sie Skaffold-Profile mit Cloud Deploy verwenden, können Sie separate Profile für alle oder einige Ihrer Ziele erstellen. Beispiel: unterschiedliche 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. mit verschiedenen Kustomize-kustomization.yaml-Dateien pro Ziel.

Kustomize-Support zu skaffold.yaml hinzufügen

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

  1. Fügen Sie eine kustomization.yaml-Datei zu Ihren Konfigurationsdateien hinzu.

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

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

    Sie können auch eine deploy-Stanza außerhalb aller definierten Profile haben, wenn keine Profile verwenden oder für eine Standardbereitstellungskonfiguration, die nicht an eine zu erstellen.

    Im Folgenden finden Sie ein Beispiel für eine Skaffold-Konfiguration, die deploy Stanzas pro und eine fiktive Beispiel-App 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 test, staging und prod Ziele. 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 verweist, die für dieses Ziel verwendet werden soll.

Helm-Support zu 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 Ihre Helm-Diagramme, die an einem beliebigen Ort gespeichert sein müssen, auf den Sie in Ihrem skaffold.yaml verweisen können. Dieser Speicherort kann in einer Datei enthalten sein System, ein Repository, möglicherweise zusammen mit Ihrer skaffold.yaml, oder ein Container Initiative-Repository (OCI).

Um ein Helm-Diagramm zu verwenden, fügen Sie eine helm-Stanza zu Ihrem Datei skaffold.yaml

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 diesem helm-Strophenabschnitt erforderlich ist.

Nicht unterstützte Skaffold-Features

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

Nächste Schritte