Usar anotaciones y etiquetas con Cloud Deploy

Puedes adjuntar anotaciones y etiquetas a tus recursos de Cloud Deploy. No son obligatorios.

En este documento se enumeran los recursos a los que puedes adjuntar etiquetas y anotaciones, y se describe cómo puedes usarlas y dónde puedes verlas.

Acerca de las anotaciones y las etiquetas

Las anotaciones son pares clave-valor de texto de formato libre. Puedes usarlos para adjuntar información arbitraria asociada al recurso.

Puedes usar etiquetas para organizar los recursos. Por ejemplo, puedes aplicar lógica en función de la selección de etiquetas.

Al igual que las anotaciones, las etiquetas son pares clave-valor. Sin embargo, deben cumplir las siguientes limitaciones:

  • Un recurso de Cloud Deploy puede tener un máximo de 64 etiquetas.

  • Tanto las claves como los valores deben tener 128 bytes como máximo.

  • Las claves y los valores solo pueden contener letras minúsculas, caracteres numéricos, guiones bajos y guiones.

  • Las claves deben empezar por una letra minúscula o un carácter internacional.

  • Todos los caracteres deben usar la codificación UTF-8. Se permite utilizar caracteres internacionales.

La marca --labels (por ejemplo, en gcloud deploy releases create) puede aceptar una lista de pares clave-valor:

"name=wrench,mass=1.3kg,count=3"

Consulta más información en la documentación de la API Cloud Deploy.

Añadir anotaciones y etiquetas a los recursos de Cloud Deploy

Puedes añadir anotaciones y etiquetas a los siguientes recursos de Cloud Deploy:

  • Flujos de procesamiento de entrega

    En el caso de las canalizaciones de entrega, debes añadir anotaciones y etiquetas al archivo de configuración YAML.

apiVersion: deploy.cloud.google.com/v1
  kind: DeliveryPipeline
  metadata:
   name:
   annotations:
     key: "value"
   labels:
     key: "value"
  description:
  serialPipeline:
   stages:
   - targetId:
     profiles: []
   - targetId:
     profiles: []
  • Destinos

    Añada anotaciones y etiquetas a los objetivos en el archivo YAML de configuración de objetivos.

    Por ejemplo, puedes incluir un enlace a más información sobre la monitorización de terceros de tu aplicación. Sin embargo, si el destino se comparte, recuerda que se puede usar en más de una aplicación, por lo que el enlace no debe ser específico de una aplicación.

  • Versiones

    Puedes añadir anotaciones o etiquetas (o ambas) a una versión con las marcas --labels y --annotations en el comando gcloud deploy releases create. Las etiquetas y las anotaciones que añadas a una versión no se conservarán como etiquetas ni anotaciones en los lanzamientos resultantes.

    Por ejemplo, puedes usar anotaciones para incluir una referencia a una solicitud de extracción de Git, un autor o un hash SHA de la confirmación de Git que contenga los cambios que se van a implementar. Consulta más información en el artículo Usar anotaciones para registrar la procedencia de la versión.

  • Implementaciones

    Puedes añadir anotaciones y etiquetas a los nuevos lanzamientos especificando --labels o --annotations en el comando gcloud deploy releases promote.

    Puedes añadir anotaciones y etiquetas a la primera publicación especificando --initial-rollout-labels o --initial-rollout-annotations en el comando gcloud deploy releases create.

    Estas son algunas de las acciones que puedes llevar a cabo con las anotaciones en un lanzamiento:

    • Crea una anotación que contenga la URL que apunta a los resultados de la prueba.
    • Crea una anotación con un número de incidencia relevante de un sistema de gestión de flujos de trabajo.

¿Dónde puedo encontrar las anotaciones de un recurso?

Puedes ver las anotaciones y las etiquetas de cualquier recurso admitido mediante el comando describe del recurso o consultando sus metadatos en laGoogle Cloud consola.

Desde la CLI de gcloud

Para ver las anotaciones y las etiquetas de un recurso desde la línea de comandos, usa el comando describe en ese recurso. En el siguiente ejemplo se muestran los detalles de un destino:

 $ gcloud deploy targets describe qsprod --delivery-pipeline=my-demo-app-1 \
                                              --region=us-central1 \
                                              --project=quickstart-basic8

El comando anterior devuelve el siguiente resultado:

 Target:
   annotations:
     approver_ticket_queue_url: https://workflows.example.com/deploy_approvals/4985729
   createTime: '2021-10-28T19:33:56.907887878Z'
   description: development cluster
   etag: 5b3bbee48f693cd7
   gke:
     cluster: projects/quickstart-basic8/locations/us-central1/clusters/quickstart-cluster-qsdev
   name: projects/quickstart-basic8/locations/us-central1/targets/qsdev
   uid: 3f3a5f8e7e0648e3bb17898ee531455d
   updateTime: '2021-11-10T16:55:11.502660604Z'

Ten en cuenta que esta salida incluye la anotación target_name.

En la consola Google Cloud

Para ver las anotaciones y las etiquetas de cualquier recurso de Cloud Deploy que tenga estos metadatos, consulta los detalles de ese recurso en la Google Cloud consola.

Por ejemplo, aquí se muestran los detalles del flujo de procesamiento de entrega de un flujo de procesamiento que incluye una anotación:

Detalles del flujo de procesamiento de entrega en la consola Google Cloud

Estos son los detalles de un lanzamiento:

Detalles de la versión en la consola Google Cloud

Etiquetas automáticas de Cloud Deploy

De forma predeterminada, Cloud Deploy añade las siguientes etiquetas a los manifiestos renderizados:

  • app.kubernetes.io/managed-by:

    Una etiqueta estándar para indicar las herramientas de implementación. Siempre se le asigna el valor google-cloud-deploy para identificar el origen de la carga de trabajo.

  • deploy.cloud.google.com/location:

    La ubicación de la canalización de entrega implementada, por ejemplo, us-central1.

  • deploy.cloud.google.com/project-id:

    El ID del proyecto de la canalización de distribución desplegada.

  • deploy.cloud.google.com/delivery-pipeline-id:

    ID de recurso de la canalización de entrega utilizada. Esta información se ha obtenido de la captura de la versión.

  • deploy.cloud.google.com/release-id:

    ID de recurso de la versión implementada.

  • deploy.cloud.google.com/target-id:

    ID de recurso del destino de la implementación. Esta información se ha obtenido de la captura de la versión.

Ejemplo de uso

Un ejemplo de uso de estas etiquetas aplicadas automáticamente sería crear un gráfico en Google Cloud Observability que agregue una métrica de contenedor por propiedades de Cloud Deploy:

fetch k8s_container
| metric 'kubernetes.io/container/cpu/core_usage_time'
| filter metadata.user.c'app.kubernetes.io/managed-by' = "google-cloud-deploy"
| group_by [
    pipeline: metadata.user.c'deploy.cloud.google.com/delivery-pipeline-id',
    target: metadata.user.c'deploy.cloud.google.com/target-id',
    release: metadata.user.c'deploy.cloud.google.com/release-id',],
      sum(val())
| rate 1m

También puede usarlo con métricas personalizadas. Por ejemplo, si PodMonitor se configura con una etiqueta para que coincida con app.kubernetes.io/managed-by: google-cloud-deploy. Después, puedes usar una consulta para definir un gráfico de métricas personalizadas:

fetch k8s_container
| metric workload.googleapis.com/example_requests_total
| filter metadata.user_labels.c'app.kubernetes.io/managed-by' = "google-cloud-deploy"
| group_by [
    pipeline: metadata.user.c'deploy.cloud.google.com/delivery-pipeline-id',
    target: metadata.user.c'deploy.cloud.google.com/target-id',
    release: metadata.user.c'deploy.cloud.google.com/release-id',],
    sum(val())
| rate 1m

Inhabilitar las etiquetas automáticas

Es posible que tu organización no permita estas etiquetas automáticas por motivos normativos, de cumplimiento u otros. Para ello, el servicio de políticas de organización ofrece una restricción que controla si se aplican o no estas etiquetas.

Para evitar que Cloud Deploy añada automáticamente etiquetas a los manifiestos renderizados, define la restricción del servicio de políticas de la organización clouddeploy.disableServiceLabelGeneration para que se aplique. Aplicar esta restricción no le impide especificar etiquetas manualmente ni elimina etiquetas de las versiones actuales.

Consulta más información sobre cómo habilitar restricciones en el artículo Usar restricciones booleanas en la política de organización.