Instalar extensiones de VM creando políticas de extensiones

En este documento se describe cómo crear políticas de extensiones de máquinas virtuales, que le permiten instalar y gestionar automáticamente extensiones en un conjunto de máquinas virtuales de Compute Engine. Si defines una política, puedes asegurarte de que se instalen y mantengan extensiones específicas en las VMs que cumplan los criterios que especifiques, como las etiquetas de las VMs.

Antes de empezar

Roles de gestión de identidades y accesos necesarios

Para obtener el permiso que necesitas para crear una política de extensiones, pide a tu administrador que te conceda el rol de gestión de identidades y accesos Administrador de políticas de extensiones de VM (roles/compute.vmExtensionPolicyAdmin). Para obtener más información sobre cómo conceder roles, consulta el artículo Gestionar acceso a proyectos, carpetas y organizaciones.

Este rol predefinido contiene el permiso compute.vmExtensionPolicies.create, que es necesario para crear una política de extensiones.

También puedes obtener este permiso con roles personalizados u otros roles predefinidos.

Para obtener más información sobre los roles y permisos de gestión de identidades y accesos en Compute Engine, consulta el artículo sobre roles y permisos de Compute Engine.

Prioridad de las políticas y resolución de conflictos

Cuando se aplican varias políticas a la misma VM, VM Extension Manager usa la prioridad de las políticas para resolver los conflictos.

Si dos políticas entran en conflicto en relación con la misma extensión, prevalecerá la que tenga mayor prioridad. Los valores de prioridad van de 0 a 65.535, donde un número más bajo significa una prioridad más alta. La prioridad predeterminada es 1000. Si hay varias políticas con la misma prioridad, VM Extension Manager aplica a las VMs la política que se haya actualizado más recientemente. Si se elimina una política, no se quitará la extensión si se sigue aplicando una política de menor prioridad a la VM.

Crear una política de extensión de VM global

Puedes crear una política de extensión de VM global para instalar extensiones en VMs de varias zonas de tu proyecto según un plan de lanzamiento. Una política de extensión de VM global no se aplica directamente a las VMs. En su lugar, a medida que se implementa la política, VM Extension Manager crea políticas en cada zona en función del plan de lanzamiento. Estas políticas gestionan la instalación de extensiones en las VMs de sus respectivas zonas.

Puedes usar gcloud o el método globalVmExtensionPolicies.insert para crear políticas de extensión globales.

Acerca de los planes de lanzamiento

Las políticas de extensiones de VM globales usan planes de lanzamiento para gestionar la implementación de extensiones en diferentes ubicaciones. Puedes usar uno de los planes de lanzamiento predefinidos o crear uno personalizado.

Planes de lanzamiento predefinidos

  • slow_rollout: la política se implementa en un plazo de cinco días. El lanzamiento lento es el plan de lanzamiento predeterminado.
  • fast_rollout: aplica la política inmediatamente a todas las zonas.

Planes de lanzamiento personalizados

Puedes crear planes de lanzamiento personalizados con el método rolloutPlans.insert. Por ejemplo, el siguiente JSON define un plan de lanzamiento llamado test-rollout-plan que tiene como objetivo dos zonas:

{
  "name": "test-rollout-plan",
  "waves": [
    {
      "selectors": [
        {
          "locationSelector": {
            "includedLocations": [
              "us-central1-a",
              "us-west1-a"
            ]
          }
        }
      ],
      "validation": {
        "type": "time",
        "timeBasedValidationMetadata": {
          "waitDuration": "0s"
        }
      },
      "orchestrationOptions": {
        "maxConcurrentResourcesPerLocation": "10",
        "maxConcurrentLocations": "10"
      }
    }
  ]
}

Después, puede usar este plan de lanzamiento personalizado al crear una política global, como se muestra en el ejemplo 2.

Crear una política global

Usa el comando gcloud beta compute global-vm-extension-policies create para crear una política de extensión de VM global:

  gcloud beta compute global-vm-extension-policies create POLICY_NAME 
--description="DESCRIPTION"
--extensions=EXTENSION_NAME_1,EXTENSION_NAME_2
--version=EXTENSION_NAME_1=VERSION_1,EXTENSION_NAME_2=VERSION_2
--config-from-file=EXTENSION_NAME_1=CONFIG_FILE_PATH_1,EXTENSION_NAME_2=CONFIG_FILE_PATH_2
--inclusion-labels=KEY_1=VALUE_1
--priority=PRIORITY
--rollout-predefined-plan=ROLLOUT_PLAN
--rollout-conflict-behavior=ROLLOUT_CONFLICT_BEHAVIOR

Haz los cambios siguientes:

  • POLICY_NAME: un nombre para la política de extensión de VM.
  • DESCRIPTION: una descripción opcional de la política.
  • EXTENSION_NAME_1,EXTENSION_NAME_2: lista de extensiones separadas por comas que se añadirán a la política. Debes especificar al menos una extensión. Los valores válidos de las extensiones son los siguientes:
    • ops-agent
    • google-cloud-sap-extension
    • google-cloud-workload-extension
  • EXTENSION_NAME_1=VERSION_1,EXTENSION_NAME_2=VERSION_2: una lista de pares clave-valor separados por comas, donde la clave es el nombre de la extensión y el valor es la versión de la extensión. Si no especifica una versión para una extensión, VM Extension Manager usará la versión más reciente disponible y la actualizará automáticamente cuando haya nuevas versiones.

  • EXTENSION_NAME_1=CONFIG_FILE_PATH_1,EXTENSION_NAME_2=CONFIG_FILE_PATH_2: una lista separada por comas de pares clave-valor en la que la clave es el nombre de la extensión y el valor es la ruta al archivo de configuración de esa extensión. Este archivo se encuentra en la VM en la que ejecutas el comando gcloud y no en la VM en la que instalas la extensión.

    También puede proporcionar la configuración como una cadena insertada. Para ello, utilice la marca --config en lugar de --config-from-file. Por ejemplo, EXTENSION_NAME_1="CONFIG_1". Puedes usar --config-from-file o --config, pero no ambos en el mismo comando.

  • KEY_1=VALUE_1: lista de pares clave-valor separados por comas que definen etiquetas de inclusión para un selector. Las VMs deben tener todas las etiquetas especificadas en un selector para poder orientarse a ellas. Si especifica --inclusion-labels varias veces, la política se aplicará a las VMs que coincidan con cualquiera de los selectores proporcionados (operador lógico OR). Si omites esta marca, la política se aplicará a todas las VMs de tu proyecto en todas las zonas.

  • PRIORITY: un número entero que define la prioridad de la política. Cuanto mayor sea el número, mayor será la prioridad. El valor predeterminado es 0. Si varias políticas tienen la misma prioridad, se aplicará a las VMs la que se haya actualizado más recientemente.

  • ROLLOUT_PLAN: especifica slow_rollout o fast_rollout. Si necesitas usar un plan de lanzamiento personalizado, usa la marca --rollout-custom-plan en lugar de --rollout-predefined-plan y especifica el nombre del plan. Por ejemplo:

      --rollout-custom-plan=projects/PROJECT_NUMBER/locations/global/rolloutPlans/ROLLOUT_PLAN_NAME
    

    Haz los cambios siguientes:

    • PROJECT_NUMBER: el proyecto en el que se define el plan de lanzamiento.
    • ROLLOUT_PLAN_NAME: el nombre del plan de lanzamiento personalizado que has definido. Si no se especifica ninguna marca de plan de lanzamiento, se usa slow_rollout.
  • ROLLOUT_CONFLICT_BEHAVIOR: especifica el comportamiento cuando se detecta un conflicto entre una política zonal y una global. Los valores posibles son:

    • "" (cadena vacía): se usa el valor de la política zonal.
    • overwrite: la política global anula la política zonal.

      Para obtener más información, consulta la marca --rollout-conflict-behavior.

    Ejemplo 1

    El siguiente comando crea una política llamada global-test-extension-policy que instala la extensión ops-agent en el proyecto test-project. La marca --config-from-file especifica la ruta a un archivo local que contiene una configuración YAML para el agente de Ops, y --rollout-predefined-plan especifica el plan slow_rollout.

    gcloud beta compute global-vm-extension-policies create global-test-extension-policy \
        --project=test-project \
        --extensions=ops-agent \
        --config-from-file=ops-agent="/usr/ops-agent-config.yaml" \
        --rollout-predefined-plan=slow_rollout

    Ejemplo 2

    El siguiente comando crea una política llamada global-test-extension-policy-2 que instala la extensión ops-agent para el proyecto test-project en las VMs con la etiqueta env=prod. La prioridad de la política se establece en 500 y la marca --config-from-file especifica la ruta a un archivo local que contiene una configuración YAML para el agente de operaciones. La marca --rollout-custom-plan especifica un plan de lanzamiento personalizado.

     gcloud beta compute global-vm-extension-policies create global-test-extension-policy-2 \
        --project=test-project \
        --extensions=ops-agent \
        --config-from-file=ops-agent="/usr/ops-agent-config.yaml" \
        --priority=500 \
        --inclusion-labels=env=prod \
        --rollout-custom-plan=projects/12345678/locations/global/rolloutPlans/test-rollout-plan

Crear una política de extensión de VM zonal

Utilice uno de los siguientes métodos para crear una política de extensión de VM zonal. Esta política zonal define qué extensiones se van a instalar y en qué VMs de una zona específica.

Consola

  1. En la Google Cloud consola, ve a la página Políticas de extensiones de VM.

    Ir a las políticas de extensiones de MV

  2. Haz clic en Crear política de extensión.
  3. En el campo Name (Nombre), introduce un nombre para la política.
  4. Opcional: En el campo Descripción, escribe una descripción de la política.
  5. En el campo Priority (Prioridad), especifica un número de prioridad para resolver los conflictos entre políticas. Cuanto más bajo sea el número, mayor será la prioridad. El valor predeterminado es 1000.
  6. En la lista Zona, selecciona la zona en la que quieras aplicar esta política.
  7. En la sección Extensiones, haz clic en Añadir extensión y sigue estos pasos para cada extensión que quieras instalar en las VMs de destino:
    1. En la lista Extensión, selecciona una extensión. Consulta las extensiones admitidas.
    2. En la lista Versión, especifica el número de versión de la extensión. Déjelo en blanco para seleccionar la versión más reciente.
      • En el caso del agente de Ops, puedes especificar la versión 2.58.0 o una posterior.
      • En Extension for SAP y Extension for Compute workloads, deja el campo en blanco para seleccionar la versión más reciente.
    3. Opcional: En el campo Config file content (Contenido del archivo de configuración), introduce los parámetros de configuración de la extensión.
  8. En la sección Instancias de VM de destino, selecciona las VMs de la política. Para seleccionar VMs con etiquetas específicas, haz clic en Añadir etiquetas y añade el par clave-valor.
  9. Haz clic en Crear.

gcloud

Para crear una política de extensiones de VM zonales y desplegarla en las VMs de una zona específica, usa el comando gcloud beta compute zone-vm-extension-policies create:

gcloud beta compute zone-vm-extension-policies create POLICY_NAME \
    --zone=ZONE \
    --description="DESCRIPTION" \
    --extensions=EXTENSION_NAME_1,EXTENSION_NAME_2 \
    --version=EXTENSION_NAME_1=VERSION_1,EXTENSION_NAME_2=VERSION_2 \
    --config-from-file=EXTENSION_NAME_1=CONFIG_FILE_PATH_1,EXTENSION_NAME_2=CONFIG_FILE_PATH_2 \
    --inclusion-labels=KEY_1=VALUE_1 \
    --priority=PRIORITY

Haz los cambios siguientes:

  • POLICY_NAME: un nombre para la política de extensión de VM.
  • ZONE: la zona en la que se aplica esta política.
  • DESCRIPTION: una descripción opcional de la política.
  • EXTENSION_NAME_1,EXTENSION_NAME_2: lista de extensiones separadas por comas que se añadirán a la política. Debes especificar al menos una extensión. Los valores válidos de las extensiones son los siguientes:
    • ops-agent
    • google-cloud-sap-extension
    • google-cloud-workload-extension
  • EXTENSION_NAME_1=VERSION_1,EXTENSION_NAME_2=VERSION_2: lista de pares clave-valor separados por comas, donde la clave es el nombre de la extensión y el valor es la versión de la extensión. Si no especifica una versión de una extensión, VM Extension Manager usará la versión más reciente disponible y la actualizará automáticamente cuando haya nuevas versiones.

  • EXTENSION_NAME_1=CONFIG_FILE_PATH_1,EXTENSION_NAME_2=CONFIG_FILE_PATH_2: lista de pares clave-valor separados por comas en la que la clave es el nombre de la extensión y el valor es la ruta al archivo de configuración de esa extensión. Esta ruta se encuentra en la VM en la que ejecutas el comando gcloud, no en la VM en la que instalas la extensión.

    También puede proporcionar la configuración como una cadena insertada. Para ello, utilice la marca --config en lugar de --config-from-file. Por ejemplo, EXTENSION_NAME_1="CONFIG_1". Puedes usar --config-from-file o --config, pero no ambos en el mismo comando.

  • KEY_1=VALUE_1: lista de pares clave-valor separados por comas que definen las etiquetas de inclusión de un selector. Las VMs deben tener todas las etiquetas especificadas en un selector para poder segmentarlas. Si especifica --inclusion-labels varias veces, la política se aplicará a las VMs que coincidan con cualquiera de los selectores proporcionados (operador lógico OR). Si omite esta marca, la política se aplicará a todas las VMs de la zona especificada.

  • PRIORITY: un número entero del 0 al 65535 que define la prioridad de la política. Cuanto más bajo sea el número, mayor será la prioridad. El valor predeterminado es 1000.

    El comando falla si ya existe una política con el nombre especificado en la zona.

Ejemplo 1

El siguiente comando crea una política llamada test-extension-policy que instala la extensión ops-agent en la zona us-central1-f del proyecto test-project. La marca --config-from-file especifica la ruta a un archivo local que contiene una configuración YAML para el agente de operaciones.

gcloud beta compute zone-vm-extension-policies create test-extension-policy  \
    --project=test-project \
    --zone=us-central1-f \
    --extensions=ops-agent \
    --config-from-file=ops-agent="/usr/ops-agent-config.yaml"

Ejemplo 2

El siguiente comando crea una política llamada test-extension-policy-2 que instala la extensión ops-agent en la zona us-central1-f del proyecto test-project en las VMs con la etiqueta env=prod. La prioridad de la política se establece en 500 y la marca --config-from-file especifica la ruta a un archivo local que contiene una configuración YAML para el agente de operaciones.

 gcloud beta compute zone-vm-extension-policies create test-extension-policy-2  \
    --project=test-project \
    --zone=us-central1-f \
    --extensions=ops-agent \
    --config-from-file=ops-agent="/usr/ops-agent-config.yaml" \
    --priority=500 \
    --inclusion-labels=env=prod

Siguientes pasos