En esta página, se describe cómo configurar Cloud Deploy para renderizar la configuración de cada destino en una canalización de entrega.
Cloud Deploy usa Skaffold para renderizar tus manifiestos de Kubernetes. El servicio admite la renderización de manifiestos sin procesar y herramientas de administración de manifiestos más avanzadas, como Helm, Kustomize y kpt.
El proceso de renderización tiene dos etapas:
La herramienta de administración de manifiestos genera el manifiesto.
Skaffold sustituye las referencias de imagen en el manifiesto por las imágenes que deseas implementar en la versión.
En esta página, se incluyen ejemplos de configuración mediante Helm y Kustomize.
Usa Skaffold para generar tu configuración
Si aún no tienes un archivo de configuración de Skaffold (skaffold.yaml
), puedes usar Skaffold a fin de generar uno, según lo que haya en tu repositorio.
Instala Skaffold con Google Cloud CLI:
gcloud components install skaffold
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 se ve de la siguiente manera:
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
Renderiza los manifiestos sin procesar
Los manifiestos sin renderizar son manifiestos que no se administran mediante una herramienta como Helm o Kustomize, y, por lo tanto, no necesitan ningún procesamiento previo antes de hidratarse e implementarse en un clúster.
De forma predeterminada, Cloud Deploy usa skaffold render
para renderizar los manifiestos de Kubernetes y reemplaza los nombres de imagen sin etiquetar por los nombres de las imágenes etiquetadas de las imágenes de contenedor que implementas. Luego, cuando asciendes la versión, Cloud Deploy usa skaffold apply
para aplicar los manifiestos e implementar las imágenes en tu clúster de Google Kubernetes Engine.
Una estrofa manifests
de una configuración básica se ve de la siguiente manera:
manifests:
rawYaml:
- PATH_TO_MANIFEST
Consulta la documentación de Skaffold para obtener más información sobre los valores que se pueden pasar aquí.
Renderiza mediante 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
en un perfil de Skaffold.
Cada una de estas definiciones se ve de la siguiente manera:
apiVersion: skaffold/v4beta7
kind: Config
manifests:
helm:
releases:
- name: RELEASE_NAME
chartPath: PATH_TO_HELM_CHART
Aquí:
RELEASE_NAME es el nombre de la instancia del gráfico de Helm para esta versión.
PATH_TO_HELM_CHART es la ruta de acceso local a un gráfico de Helm empaquetado o un directorio de gráfico de Helm sin empaquetar.
Puedes usar opciones de configuración adicionales de Helm, como se describe en la documentación de Skaffold.
Renderiza mediante Kustomize
Puedes usar Kustomize con Cloud Deploy. Para ello, debes apuntar a los archivos de Kustomization desde la estrofa deploy
en la configuración de tu perfil skaffold.yaml
.
Incluyes una configuración de Kustomize independiente para cada destino para el que usas Kustomize, en cada profile
correspondiente en tu skaffold.yaml
.
Cada una de estas definiciones se ve de la siguiente manera:
apiVersion: skaffold/v4beta7
kind: Config
manifests:
kustomize:
paths:
- PATH_TO_KUSTOMIZE
Aquí:
PATH_TO_KUSTOMIZE apunta a tus archivos de Kustomization. El valor predeterminado es ["."]
.
Puedes usar opciones de configuración adicionales de Kustomize, como se describe en la documentación de Skaffold.
Configura diferentes manifiestos por objetivo
A menudo, cada objetivo necesita una configuración ligeramente diferente. Por ejemplo, es posible que tengas más réplicas en tus implementaciones de producción que en las de puesta en escena.
Puedes renderizar un conjunto diferente de manifiestos para cada destino si proporcionas cada variación como un perfil de Skaffold diferente.
Perfiles con manifiestos sin procesar
Cuando trabajas con manifiestos sin procesar, puedes dirigir Cloud Deploy a un archivo diferente, según el destino. Puedes 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
A continuación, se muestra un ejemplo de skaffold.yaml
que tiene diferentes perfiles para la etapa de pruebas y la producción mediante Kustomize, en el que 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 la canalización de entrega
Estos perfiles, definidos en skaffold.yaml
, se mencionan en la configuración de la canalización de entrega, por objetivo:
serialPipeline:
stages:
- targetId: staging-target
profiles:
- staging
- targetId: prod-target
profiles:
- prod
Cómo reemplazar una imagen específica cuando creas la versión
Tu manifiesto puede usar un marcador de posición para el nombre de la imagen, que puedes reemplazar cuando crees la versión.
Este es un ejemplo de un 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 tu versión, puedes usar la marca --images=
para identificar la
Imagen específica que se implementará. Por ejemplo, el siguiente comando crea una versión y sustituye un nombre de imagen calificado por SHA por el nombre del marcador de posición:
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
.
¿Qué sigue?
- Obtén más información sobre la configuración de la canalización de entrega de Cloud Deploy.
- Prueba la explicación de los perfiles de Skaffold para Cloud Deploy.
- Obtén más información sobre Kustomize.
- Obtén más información sobre Helm.
- Obtén más información sobre Kpt.
- Considera usar Artifact Registry para almacenar artefactos como gráficos de Helm o Kustomizations.