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 entwederdeploy.kubectl
für die Bereitstellung in GKE oder GKE Enterprise oderdeploy.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.
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:
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.
Erstellen Sie in der Datei
skaffold.yaml
für jedes Profil einedeploy
-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 namensmy-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
undprod
. Es zeigt auch ein Profil für die lokale Entwicklung. In jedem Profil gibt es einedeploy.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:
-
Die Verwendung von
--module=
zur Auswahl bestimmter Module fürbuild
,render
,apply
usw. wird nicht unterstützt. Statische Module werden unterstützt. Die Möglichkeit zum Erstellen eines Namespace in Helm, falls keiner vorhanden ist.
Nächste Schritte
Besuchen Sie die Skaffold-Website, um zu erfahren, wie das funktioniert und was es für Sie tun kann.
Üben Sie mit Cloud Deploy mit Kustomize- und Skaffold-Profilen.
Hier erfahren Sie, wie Cloud Deploy die zu verwendende Skaffold-Version auswählt, wann sich die Skaffold-Version ändert und wie Sie ermitteln, welche Version verwendet wird.