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?
Möchten Sie 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 verbessert werden kann. Es 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 in 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 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 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. Für die Verwendung von Cloud Deploy benötigen Sie mindestens eine gültige skaffold.yaml
-Konfigurationsdatei.
Über 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 beim Bereitstellen 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 zur Verwendung von Skaffold und Cloud Deploy mit gängigen Tools zur Manifest-Vorlage, wie Helm und Kustomize.
Was ist für die Funktion von Cloud Deploy erforderlich?
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
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 ein Beispiel für ein rohes Kubernetes-Manifest:
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
-Strophe 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: {}
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 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 für das Rendern und Bereitstellen Ihrer Anwendungen.
Für jede Version musst du mindestens eine skaffold.yaml
-Datei angeben, in der die zu verwendenden Manifeste angegeben sind. 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 nach Abschluss der Veröffentlichung im Cloud Storage-Verzeichnis für die Bereitstellung der Quelle verfügbar.
Der folgende Befehl enthält das Flag --from-k8s-manifest
, über das das Kubernetes-Manifest übergeben wird. Cloud Deploy verwendet die Informationen im Manifest, um die skaffold.yaml
zu generieren, die dann für die Veröffentlichung 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 das Onboarding, das Lernen und die Demonstration von Cloud Deploy. Wenn Sie mit Cloud Deploy vertraut sind und Produktionsarbeitslasten haben, benötigen Sie möglicherweise eine Skaffold-Konfiguration, die Ihre Ziele unterscheidet (mithilfe von Skaffold-Profilen).
Wenn Sie die generierte skaffold.yaml
-Datei als Ausgangspunkt verwenden, um Ihre eigene differenzierte Skaffold-Konfiguration zu erstellen, verwenden Sie die Datei im Rendering-Quellarchiv, nicht die gerenderte Datei. Die Renderingquelle kann auf der Seite „Release-Details“ auf dem Tab Artefakte heruntergeladen werden.
Diese generierte
skaffold.yaml
ist in der Renderingquelle enthalten, die in einem Cloud Storage-Bucket gespeichert ist.Sie können diese Datei ansehen, indem Sie die
.tar.gz
-Datei herunterladen und extrahieren.Die gerenderte
skaffold.yaml
ist unter Zielartefakte verfügbar.Klicken Sie im Bereich Ziel-Artefakte auf Artefakte ansehen.
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 bei der 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-Bereitstellungsabschnitt für die lokale Entwicklung definieren.
Wenn Sie den dev
-Modus beenden, beseitigt 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-Funktionen in Skaffold, um Ihre Manifeste zu rendern und anzuwenden und Ihre Anwendung an den definierten Zielen bereitzustellen, sofern 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 Rendern und Anwenden können Sie den vollständigen deklarativen Status Ihrer Anwendung in der Konfiguration erfassen, damit er sicher und wiederholbar angewendet werden kann (z. B. für Rollbacks). Außerdem erleichtern sie die Genehmigungen. Da Manifeste vor dem ersten Roll-out für alle Ziele gerendert werden, sehen Sie das gerenderte YAML, das auf jedes Ziel angewendet wird.
Cloud Deploy unterstützt nicht die Verwendung anderer Bereitstellungstools für die Bereitstellung Ihrer Anwendung. Sie können jedoch Tools wie Helm oder Kustomize für das Rendering verwenden.
Weitere Informationen zum Bereitstellen mit Cloud Deploy und kubectl
finden Sie unter Cloud Deploy-Dienstarchitektur.
Skaffold-Profile
Sie können separate Skaffold-Profile erstellen, die in skaffold.yaml
in einer profiles:
-Stanza angegeben sind.
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-Unterstützung zu skaffold.yaml
hinzufügen
So integrieren Sie Ihre Kustomize-Konfiguration in Ihre Cloud Deploy-/Skaffold-Konfiguration:
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 speichern.
Erstellen Sie in der
skaffold.yaml
-Datei für jedes Profil einedeploy
-Stanza.Sie können auch einen
deploy
-Abschnitt außerhalb von definierten Profilen haben, wenn Sie keine Profile verwenden oder eine Standardbereitstellungskonfiguration, die nicht mit einem Profil verknüpft ist.Im folgenden Beispiel für eine Skaffold-Konfiguration sind
deploy
Strophen pro Profil zu sehen. Außerdem wird eine fiktive Beispiel-App 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
. Außerdem wird ein Profil für die lokale Entwicklung angezeigt. In jedem Profil gibt es einendeploy.kustomize
-Abschnitt mit einem Pfad, der auf den Speicherort der Kustomisierung verweist, die für dieses Ziel verwendet werden soll.
Helm-Unterstützung für skaffold.yaml
hinzufügen
Sie können Helm verwenden, um Ihre Manifeste zu rendern. Cloud Deploy verwendet nicht Helm, um Ihre Anwendungen bereitzustellen, 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 sich in einem Dateisystem, einem Repository, möglicherweise zusammen mit Ihrer skaffold.yaml
oder in einem OCI-Repository (Open Container Initiative) befinden.
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
gibt an, was in diesem helm
-Strophenabschnitt erforderlich ist.
Nicht unterstützte Skaffold-Funktionen
Die folgenden Skaffold-Funktionen können in Cloud Deploy nicht verwendet werden:
-
Die Verwendung von
--module=
zum Auswählen bestimmter Module fürbuild
,render
,apply
usw. wird nicht unterstützt. Statische Module werden unterstützt. In Helm die Möglichkeit, einen Namespace zu erstellen, falls noch 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 die Verwendung von Cloud Deploy mit Kustomize- und Skaffold-Profilen.
Weitere Informationen Cloud Deploy wählt die zu verwendende Skaffold-Version aus, wann sich die Skaffold-Version ändert und wie die aktuell verwendete Version ermittelt wird.