Manifeste in Cloud Deploy verwalten

Auf dieser Seite wird beschrieben, wie Cloud Deploy konfiguriert wird, um die Konfiguration für jedes Ziel in einer Bereitstellungspipeline zu rendern.

Cloud Deploy verwendet Skaffold, um Ihre Kubernetes-Manifeste zu rendern. Der Dienst unterstützt das Rendering von RAW-Manifesten und erweiterten Manifestverwaltungstools wie Helm, Kustomize und kpt.

Der Renderingprozess umfasst zwei Phasen:

  1. Das Manifest-Managementtool generiert das Manifest.

  2. Skaffold ersetzt die Image-Referenzen im Manifest durch die Images, die Sie in Ihrem Release bereitstellen möchten.

Diese Seite enthält Konfigurationsbeispiele mit Helm und Kustomize.

Skaffold zum Generieren der Konfiguration verwenden

Wenn Sie noch keine Skaffold-Konfigurationsdatei (skaffold.yaml) haben, können Sie basierend auf dem Inhalt Ihres Repositorys Skaffold verwenden.

  1. Installieren Sie Skaffold mit der Google Cloud CLI:

    gcloud components install skaffold

  2. Führen Sie skaffold init in dem Repository aus, das Ihre Manifeste enthält:

    skaffold init --skip-build

Mit diesem Befehl wird eine skaffold.yaml-Datei in Ihrem Repository erstellt. Diese Datei verweist auf die Manifeste in diesem Repository. Dieser Inhalt sieht so aus:

apiVersion: skaffold/v4beta7
kind: Config
metadata:
  name: sample-app
manifests:
  rawYaml:
    - k8s-manifests/deployment.yaml
    - k8s-manifests/rbac.yaml
    - k8s-manifests/redis.yaml
    - k8s-manifests/service.yaml

RAW-Manifeste rendern

Raw-Manifeste sind Manifeste, die nicht von einem Tool wie Helm oder Kustomize verwaltet werden und daher keine Vorverarbeitung erfordern, bevor sie in einem Cluster hydriert und in einem Cluster bereitgestellt werden.

Standardmäßig verwendet Cloud Deploy skaffold render zum Rendern Ihrer Kubernetes-Manifeste. Dabei werden nicht getaggte Image-Namen durch die getaggten Image-Namen der bereitgestellten Container-Images ersetzt. Wenn Sie dann den Release hochstufen, verwendet Cloud Deploy skaffold apply, um die Manifeste anzuwenden und die Images in Ihrem Google Kubernetes Engine-Cluster bereitzustellen.

Eine manifests-Stanza aus einer grundlegenden Konfiguration sieht so aus:

manifests:
  rawYaml:
    - PATH_TO_MANIFEST

Weitere Informationen dazu, welche Werte hier übergeben werden können, finden Sie in der Skaffold-Dokumentation.

Rendering mit Helm

Sie können Cloud Deploy verwenden, um Ihre Helm-Diagramme zu rendern. Fügen Sie dazu Helm-Diagrammdetails in eine deploy-Stanza in einem Skaffold-Profil ein.

Jede Definition sieht so aus:

apiVersion: skaffold/v4beta7
kind: Config
manifests:
  helm:
    releases:
      - name: RELEASE_NAME
        chartPath: PATH_TO_HELM_CHART

Wobei:

RELEASE_NAME ist der Name der Helm-Diagramminstanz für diesen Release.

PATH_TO_HELM_CHART ist der lokale Pfad zu einem gepackten Helm-Diagramm oder einem entpackten Helm-Diagrammverzeichnis.

Sie können zusätzliche Helm-Konfigurationsoptionen verwenden, wie in der Skaffold-Dokumentation beschrieben.

Rendering mit Kustomize

Sie können Kustomize mit Cloud Deploy verwenden. Verweisen Sie dazu auf die Kustomization-Dateien aus der deploy-Stanza in Ihrer skaffold.yaml-Profilkonfiguration.

Sie fügen eine separate Kustomize-Konfiguration für jedes Ziel hinzu, für das Sie Kustomize verwenden, und zwar unter jeder entsprechenden profile in Ihrer skaffold.yaml.

Jede Definition sieht so aus:

apiVersion: skaffold/v4beta7
kind: Config
manifests:
  kustomize:
    paths:
      - PATH_TO_KUSTOMIZE

Wobei:

PATH_TO_KUSTOMIZE verweist auf Ihre Kustomization-Dateien. Der Standardwert ist ["."]

Sie können zusätzliche Kustomize-Konfigurationsoptionen verwenden, wie in der Skaffold-Dokumentation beschrieben.

Unterschiedliche Manifeste pro Ziel konfigurieren

Oft erfordert jedes Ziel eine etwas andere Konfiguration. Beispielsweise können die Produktionsbereitstellungen mehr Replikate enthalten als die Staging-Bereitstellungen.

Sie können für jedes Ziel eine andere Gruppe von Manifesten rendern, indem Sie jede Variante als anderes Skaffold-Profil bereitstellen.

Profile mit RAW-Manifesten

Bei der Arbeit mit Rohmanifesten können Sie Cloud Deploy je nach Ziel auf eine andere Datei verweisen. Sie könnten sie so konfigurieren:

apiVersion: skaffold/v4beta7
kind: Config
profiles:
  - name: prod
    manifests:
      rawYaml:
        - prod.yaml
  - name: staging
    manifests:
      rawYaml:
        - staging.yaml

Profile mit Kustomize

Hier sehen Sie ein Beispiel-skaffold.yaml mit unterschiedlichen Profilen für Staging und Produktion mit Kustomize, wobei jedes Profil auf eine andere Kustomisierung verweist:

apiVersion: skaffold/v4beta7
kind: Config
profiles:
  - name: prod
    manifests:
      kustomize:
        paths:
          - environments/prod
  - name: staging
    manifests:
      kustomize:
        paths:
          - environments/staging

Profile, auf die in der Bereitstellungspipeline verwiesen wird

Auf diese in skaffold.yaml definierten Profile wird in der Konfiguration der Bereitstellungspipeline pro Ziel verwiesen:

serialPipeline:
  stages:
  - targetId: staging-target
    profiles:
    - staging
  - targetId: prod-target
    profiles:
    - prod

Beim Erstellen des Release ein bestimmtes Bild ersetzen

Ihr Manifest kann einen Platzhalter für den Image-Namen enthalten, den Sie beim Erstellen der Version ersetzen können.

Hier ein Beispiel für ein Manifest mit einem Platzhalter für das Bild:

apiVersion: v1
kind: Deployment
metadata:
  name: getting-started
  labels:
    app: nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: my-app-image

Wenn Sie eine Version erstellen, können Sie mit dem Flag --images= das Image angeben, das bereitgestellt werden soll. Mit dem folgenden Befehl wird beispielsweise eine Version erstellt und der Platzhaltername durch einen SHA-qualifizierten Image-Namen ersetzt:

gcloud deploy releases create test-release-001 \
  --project=test-gke-using-deployment \
  --region=us-central1 \
  --delivery-pipeline=my-gke-demo-app-1 \
  --images=my-app-image=gcr.io/google-containers/nginx@sha256:f49a843c290594dcf4d193535d1f4ba8af7d56cea2cf79d1e9554f077f1e7aaa

Das resultierende gerenderte Manifest enthält jetzt einen Verweis auf das angegebene Bild anstelle von my-app-image.

Nächste Schritte