Gestionar archivos de manifiesto en Cloud Deploy

En esta página se describe cómo configurar Cloud Deploy para renderizar la configuración de cada destino de una canalización de lanzamiento.

Cloud Deploy usa Skaffold para renderizar tus archivos de manifiesto de Kubernetes. El servicio admite la renderización de archivos de manifiesto sin procesar y herramientas de gestión de archivos de manifiesto más avanzadas, como Helm, Kustomize y kpt.

El proceso de renderización consta de dos fases:

  1. La herramienta de gestión de manifiestos genera el manifiesto.

  2. Skaffold sustituye las referencias de imagen del manifiesto por las imágenes que quieras implementar en tu lanzamiento.

En esta página se incluyen ejemplos de configuración con Helm y Kustomize.

Usar Skaffold para generar la configuración

Si aún no tienes un archivo de configuración de Skaffold (skaffold.yaml), puedes usar Skaffold para generar uno en función del contenido de tu repositorio.

  1. Instala Skaffold con Google Cloud CLI:

    gcloud components install skaffold

  2. Ejecuta skaffold init en el repositorio que contiene tus manifiestos:

    skaffold init --skip-build

Este comando crea un archivo skaffold.yaml en tu repositorio. Ese archivo hace referencia a los manifiestos de ese repositorio. El contenido tiene este aspecto:

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

Renderizar archivos de manifiesto sin procesar

Los manifiestos sin procesar son manifiestos que no se gestionan con herramientas como Helm o Kustomize y, por lo tanto, no necesitan ningún preprocesamiento antes de hidratarse e implementarse en un clúster.

De forma predeterminada, Cloud Deploy usa skaffold render para renderizar los archivos de manifiesto de Kubernetes, sustituyendo los nombres de las imágenes sin etiquetar por los nombres de las imágenes etiquetadas de las imágenes de contenedor que vas a implementar. Después, cuando promociones la versión, Cloud Deploy usará skaffold apply para aplicar los manifiestos y desplegar las imágenes en tu clúster de Google Kubernetes Engine.

Una sección manifests de una configuración básica tiene este aspecto:

manifests:
  rawYaml:
    - PATH_TO_MANIFEST

Consulta la documentación de Skaffold para obtener más información sobre los valores que se pueden transferir aquí.

Renderizar con Helm

Puedes usar Cloud Deploy para renderizar tus gráficos de Helm. Para ello, incluye los detalles del gráfico de Helm en una estrofa deploy de un perfil de Skaffold.

Cada una de estas definiciones tiene el siguiente aspecto:

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

Donde:

RELEASE_NAME es el nombre de la instancia del gráfico de Helm de esta versión.

PATH_TO_HELM_CHART es la ruta local a un gráfico de Helm empaquetado o a un directorio de gráficos de Helm desempaquetado.

Puedes usar opciones de configuración de Helm adicionales, tal como se describe en la documentación de Skaffold.

Renderizado con Kustomize

Puedes usar Kustomize con Cloud Deploy. Para ello, debes hacer referencia a los archivos de personalización desde la estrofa deploy de tu configuración de perfil skaffold.yaml.

Incluye una configuración de Kustomize independiente para cada destino en el que uses Kustomize, en cada profile correspondiente de tu skaffold.yaml.

Cada una de estas definiciones tiene el siguiente aspecto:

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

Donde:

PATH_TO_KUSTOMIZE apunta a tus archivos de personalización. El valor predeterminado es ["."]

Puedes usar opciones de configuración adicionales de Kustomize, tal como se describe en la documentación de Skaffold.

Configurar diferentes archivos de manifiesto por destino

A menudo, cada objetivo necesita una configuración ligeramente diferente. Por ejemplo, puede que tengas más réplicas en tus implementaciones de producción que en las de staging.

Puedes renderizar un conjunto diferente de archivos de manifiesto para cada destino proporcionando cada variación como un perfil de Skaffold diferente.

Perfiles con archivos de manifiesto sin procesar

Cuando trabajas con manifiestos sin procesar, puedes dirigir Cloud Deploy a un archivo diferente, en función del destino. Podrías configurarlo de la siguiente manera:

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

Perfiles con Kustomize

Aquí tienes un ejemplo skaffold.yaml que tiene diferentes perfiles para las fases de desarrollo y producción con Kustomize, donde cada perfil apunta a una Kustomization diferente:

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

Perfiles a los que se hace referencia en el canal de entrega

Estos perfiles, definidos en skaffold.yaml, se referencian en la configuración de la canalización de entrega por destino:

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

Sustituir una imagen específica al crear la versión

Tu manifiesto puede usar un marcador de posición para el nombre de la imagen, que puedes sustituir cuando crees tu lanzamiento.

Aquí tienes un ejemplo de manifiesto con un marcador de posición para la imagen:

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

Cuando crees la versión, puedes usar la marca --images= para identificar la imagen específica que quieres implementar. Por ejemplo, el siguiente comando crea una versión y sustituye el nombre de marcador de posición por el nombre de una imagen cualificada por SHA:

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

El manifiesto renderizado resultante ahora tiene una referencia a la imagen especificada en lugar de my-app-image.

Siguientes pasos