Gestire i manifest in Cloud Deploy

Questa pagina descrive come configurare Cloud Deploy per il rendering della configurazione di ogni target in una pipeline di distribuzione.

Cloud Deploy utilizza Skaffold per il rendering dei manifest Kubernetes. Il servizio supporta il rendering dei manifest non elaborati e strumenti di gestione dei manifest più avanzati, come Helm, Kustomize e kpt.

Il processo di rendering prevede due fasi:

  1. Lo strumento di gestione dei manifest genera il manifest.

  2. Skaffold sostituisce i riferimenti alle immagini nel manifest con le immagini che vuoi eseguire il deployment nella release.

Questa pagina include esempi di configurazione che utilizzano Helm e Kustomize.

Utilizzo di Skaffold per generare la configurazione

Se non hai ancora un file di configurazione di Skaffold (skaffold.yaml), puoi utilizzare Skaffold per generarne uno in base ai contenuti del repository.

  1. Installa Skaffold utilizzando Google Cloud CLI:

    gcloud components install skaffold

  2. Esegui skaffold init nel repository che contiene i manifest:

    skaffold init --skip-build

Questo comando crea un file skaffold.yaml nel repository. Questo file fa riferimento ai manifest nel repository. I contenuti hanno questo aspetto:

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

Rendering dei manifest non elaborati

I manifest non elaborati sono manifest non gestiti da uno strumento come Helm o Kustomize e pertanto non richiedono alcuna pre-elaborazione prima di essere idratati e implementati in un cluster.

Per impostazione predefinita, Cloud Deploy utilizza skaffold render per eseguire il rendering dei manifest Kubernetes, sostituendo i nomi delle immagini senza tag con i nomi delle immagini con tag delle immagini container di cui stai eseguendo il deployment. Poi, quando promuovi la release, Cloud Deploy utilizza skaffold apply per applicare i manifest ed eseguire il deployment delle immagini nel cluster Google Kubernetes Engine.

Una sezione manifests di una configurazione di base ha questo aspetto:

manifests:
  rawYaml:
    - PATH_TO_MANIFEST

Per saperne di più sui valori che possono essere passati qui, consulta la documentazione di Skaffold.

Rendering con Helm

Puoi utilizzare Cloud Deploy per il rendering dei grafici Helm. Per farlo, includi i dettagli del grafico Helm in una sezione deploy di un profilo Skaffold.

Ogni definizione di questo tipo ha il seguente aspetto:

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

Dove:

RELEASE_NAME è il nome dell'istanza del grafico Helm per questa release.

PATH_TO_HELM_CHART è il percorso locale di un grafico Helm compresso o di una directory di grafici Helm decompressi.

Puoi utilizzare opzioni di configurazione Helm aggiuntive, come descritto nella documentazione di Skaffold.

Rendering con Kustomize

Puoi utilizzare Kustomize con Cloud Deploy. Per farlo, devi puntare ai file Kustomization dalla sezione deploy nella configurazione del profilo skaffold.yaml.

Includi una configurazione Kustomize separata per ogni target per cui utilizzi Kustomize, in ogni profile corrispondente nel file skaffold.yaml.

Ogni definizione di questo tipo ha il seguente aspetto:

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

Dove:

PATH_TO_KUSTOMIZE indica i file di personalizzazione. Il valore predefinito è ["."]

Puoi utilizzare ulteriori opzioni di configurazione di Kustomize, come descritto nella documentazione di Skaffold.

Configurazione di manifest diversi per target

Spesso ogni target richiede una configurazione leggermente diversa. Ad esempio, potresti avere più repliche nelle implementazioni di produzione rispetto a quelle di staging.

Puoi eseguire il rendering di un insieme diverso di manifest per ogni target fornendo ogni variante come un profilo Skaffold diverso.

Profili con manifest non elaborati

Quando lavori con i manifest grezzi, puoi indirizzare Cloud Deploy a un file diverso, a seconda della destinazione. Puoi configurarlo nel seguente modo:

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

Profili con Kustomize

Ecco un esempio skaffold.yaml con profili diversi per lo staging e la produzione che utilizzano Kustomize, in cui ogni profilo punta a una personalizzazione diversa:

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

Profili a cui viene fatto riferimento nella pipeline di distribuzione

Questi profili, definiti in skaffold.yaml, vengono referenziati nella configurazione della pipeline di distribuzione, per destinazione:

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

Sostituisci un'immagine specifica quando crei l'uscita

Il manifest può utilizzare un segnaposto per il nome dell'immagine, che puoi sostituire quando crei la release.

Ecco un esempio di manifest con un segnaposto per l'immagine:

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

Quando crei la release, puoi utilizzare il flag --images= per identificare l'immagine specifica da implementare. Ad esempio, il seguente comando crea una release e sostituisce un nome immagine qualificato SHA con il nome segnaposto:

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

Il manifest sottoposto a rendering risultante ora ha un riferimento all'immagine specificata anziché my-app-image.

Passaggi successivi