In diesem Dokument wird beschrieben, wie Sie Skaffold als Teil von Cloud Deploy verwenden, einschließlich:
- Skaffold für die Verwendung mit einer Cloud Deploy-Bereitstellungspipeline konfigurieren
- Skaffold und Cloud Deploy mit Rendering-Tools 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 aber derzeit kein Skaffold
Skaffold ist ein Open-Source-Befehlszeilentool, mit dem Entwickler ihre Produktivität steigern können. Es orchestriert die kontinuierliche 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. Bei der Bereitstellung ruft Cloud Deploy Skaffold noch einmal auf, um diese Manifeste anzuwenden und Ihre Anwendung in jedem Ziel in Ihrer Progression 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. Cloud Code for VS Code und Cloud Code for IntelliJ IDE-Erweiterungen 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 Continuous Delivery verwenden,
mit den Schritten „Erstellen“, „Bereitstellen“, „Rendern“ und „Anwenden“. Cloud Deploy verwendet
die Rendering- und Anwendungs
funktionen von Skaffold. Um Cloud Deploy verwenden zu können, 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 eine Reihe von Basismanifesten für alle Ihre Bereitstellungen konfigurieren. Anschließend können Sie 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 für die Verwendung von Cloud Deploy erforderlich?
Für eine einfache Cloud Deploy-Bereitstellungspipeline muss die
skaffold.yaml Konfigurationsdatei
mindestens die folgende Konfiguration enthalten:
Die Headerinformationen, die alle
skaffold.yaml-Konfigurationen benötigen:apiVersion: skaffold/v4beta7 kind: ConfigEin
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 Kubernetes-Rohmanifest:
manifests: rawYaml: - deployment.yamlWenn Sie einen Renderer (z. B. 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
Ein
deployAbschnitt mit entwederdeploy.kubectlfür die Bereitstellung in GKE oder angehängten GKE-Clustern oderdeploy.cloudrunfür die Bereitstellung in Cloud Run.Für GKE und angehängte GKE-Cluster:
deploy: kubectl: {}Der Abschnitt „deploy“ stellt die Anwendungsmanifeste bereit, die im Abschnitt „manifests“ angegeben wurden.
Für Cloud Run-Ziele:
deploy: cloudrun: {}Der Abschnitt „deploy“ stellt die Anwendungsmanifeste bereit, die im Abschnitt „manifests“ angegeben wurden.
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, wenn 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 jedes Release müssen Sie mindestens eine skaffold.yaml-Datei angeben, in der die zu verwendenden Manifeste identifiziert werden. Im
vorherigen Abschnitt
finden Sie eine Anleitung dazu, was in diese Datei gehört.
skaffold.yaml-Datei 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 Cloud Storage-Quellbereitstellungsverzeichnis verfügbar.
Der folgende Befehl enthält das Flag --from-k8s-manifest, das das Kubernetes-Manifest übergibt. Cloud Deploy verwendet die Informationen im Manifest, um die skaffold.yaml-Datei zu generieren, die dann für das Release verwendet wird.
gcloud deploy releases create RELEASE_NAME --delivery-pipeline=PIPELINE_NAME --from-k8s-manifest=MANIFEST --region=REGION
Wenn Sie die skaffold.yaml-Datei aus einer Cloud Run-Dienst-YAML-Datei generieren möchten, 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 dem Flag --source führt zu einem Fehler.
Generierte skaffold.yaml-Datei verwenden
Die generierte skaffold.yaml-Datei eignet sich für das Onboarding, das Erlernen und die Demonstration von Cloud Deploy. Wenn Sie mit Cloud Deploy vertraut sind,
und für Produktionsarbeitslasten, benötigen Sie möglicherweise eine Skaffold-Konfiguration, die
zwischen Ihren Zielen unterscheidet (mit Skaffold-Profilen).
Wenn Sie die generierte skaffold.yaml-Datei als Ausgangspunkt für die Erstellung einer eigenen differenzierten Skaffold-Konfiguration verwenden, müssen Sie die Datei im Quellarchiv für das Rendering und nicht die gerenderte Datei verwenden. Die Renderingquelle kann auf der Seite Release-Details auf dem Tab Artefakte heruntergeladen werden.
Diese generierte
skaffold.yaml-Datei 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-Datei ist unter Zielartefakte verfügbar.Klicken Sie im Bereich Zielartefakte auf Artefakte ansehen.

Skaffold für die lokale Entwicklung verwenden
Einer der Vorteile von Skaffold ist, dass Sie es für die lokale
Entwicklung und für CI/CD verwenden können.
Im dev-Modus überwacht Skaffold Ihre Quelldateien. Wenn eine Änderung erkannt wird, erstellt Skaffold die Images neu, führt Tests durch und stellt die Container in einem Minikube-Cluster (z. B.) auf Ihrem lokalen Computer bereit.
Wenn Sie Skaffold auf diese Weise verwenden, können Sie dieselben 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 einen Standardabschnitt „deploy“ 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 in 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 den Prozess des Manifest-Renderings von der Bereitstellung.
Cloud Deploy ruft skaffold render,
auf, um die Manifeste zu rendern, und skaffold apply
um sie auf das Zielanzuwenden.
Durch diese Trennung zwischen Rendern und Anwenden können Sie den vollständigen deklarativen Zustand Ihrer Anwendung in der Konfiguration erfassen, sodass sie sicher und wiederholbar 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 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 zum Rendern verwenden.
Weitere Informationen zur Bereitstellung mit kubectl als
Deployer in Cloud Deploy finden Sie unter Cloud Deploy-Dienstarchitektur.
Skaffold-Profile
Sie können separate Skaffold
Profile erstellen, die in
skaffold.yaml in einem profiles: Abschnitt identifiziert werden.
Wenn Sie Skaffold-Profile mit Cloud Deploy verwenden, können Sie separate Profile für alle oder einige Ihrer Ziele erstellen. Beispielsweise verschiedene Profile für dev, staging und prod.
Profile sind nicht erforderlich, um Skaffold in Cloud Deploy zu verwenden, aber nützlich, um Manifestanpassungen für Ihre Ziele zu definieren, z. B. mit verschiedenen kustomization.yaml-Dateien von Kustomize pro Ziel.
Kustomize-Unterstützung zu skaffold.yaml hinzufügen
Die Einbindung Ihrer Kustomize-Konfiguration in Ihre Cloud Deploy-/Skaffold-Konfiguration besteht aus den folgenden Schritten:
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 Ihrer
skaffold.yaml-Datei einendeploy-Abschnitt für jedes Profil.Sie können auch einen
deploy-Abschnitt außerhalb der definierten Profile haben, wenn Sie keine Profile verwenden oder eine Standardbereitstellungskonfiguration verwenden, die nicht an ein Profil gebunden ist.Das folgende Beispiel zeigt eine Skaffold-Konfiguration mit
deploy-Abschnitten pro Profil und verwendet eine fiktive Beispiel-App namensmy-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,stagingundprod. 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 zu skaffold.yaml hinzufügen
Sie können Helm verwenden, um Ihre Manifeste zu rendern. Cloud Deploy verwendet Helm nicht zum Bereitstellen Ihrer Anwendungen und unterstützt nur kubectl als Deployer.
Um Helm zu verwenden, benötigen Sie Ihr Helm-Diagramm oder Ihre Helm-Diagramme, die an einem beliebigen Speicherort gespeichert sind, auf den Sie von skaffold.yaml aus verweisen können. Dieser Speicherort kann sich in einem Dateisystem, einem Repository (möglicherweise zusammen mit skaffold.yaml) oder einem OCI-Repository (Open Container Initiative) befinden.
Um ein Helm-Diagramm zu verwenden, fügen Sie Ihrer
skaffold.yaml-Datei einen helm-Abschnitt hinzu.
apiVersion: skaffold/v4beta7
kind: Config
build:
artifacts:
- image: skaffold-helm-image
manifests:
helm:
releases:
- name: skaffold-helm-image
chartPath: charts
deploy:
kubectl: {}
Die skaffold.yaml Referenz
zeigt, 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:
-
Die Verwendung von
--module=zum Auswählen bestimmter Module fürbuild,render,applyusw. wird nicht unterstützt. Statische Module werden unterstützt. In Helm die Möglichkeit, einen Namespace zu erstellen, wenn 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.
Informationen dazu, wie Cloud Deploy die zu verwendenden Toolversionen auswählt und wie Sie ermitteln, welche Versionen verwendet werden.
Erfahren Sie, wie Sie Skaffold Profile in Verbindung mit erweiterten Manifestverwaltungstools wie Helm, Kustomize und kpt verwenden.