Plantillas de instancias deterministas


En esta página, se describe cuándo y por qué se deben crear plantillas de instancias deterministas. Las plantillas de instancias deterministas aclaran de forma explícita el tipo de servicios o apps de terceros que se deben instalar en las instancias cuando se implementa la plantilla de instancias. La creación de plantillas de instancias deterministas ayuda a minimizar la ambigüedad y el comportamiento inesperado de tus plantillas de instancia.

¿Por qué deberías crear plantillas de instancias deterministas?

En general, recomendamos que las propiedades de la plantilla de instancias sean lo más explícitas y deterministas posible. Si usas secuencias de comandos de inicio en las plantillas de instancias que instalan o usan servicios de terceros, asegúrate de que estas secuencias de comandos proporcionen información explícita, como la versión de la app que se instalará. Compute Engine solo puede confiar en la información definida en la plantilla y no tiene control sobre los servicios de terceros a los que se hace referencia. Si tu plantilla es poco precisa, tu plantilla de instancias podría comportarse de forma inesperada.

Por ejemplo, considera el comando siguiente para crear una plantilla de instancias con una secuencia de comandos de inicio que instale apache2 y use un archivo alojado en un servidor externo:

gcloud compute instance-templates create example-template-with-startup \
    --image-family debian-9 \
    --image-project debian-cloud \
    --metadata startup-script='#! /bin/bash
    sudo apt install -y apache2
    scp myuser@108.59.87.185:index.php /var/www/'

Hay dos problemas potenciales con esta secuencia de comandos de inicio:

  • La secuencia de comandos no define de forma explícita qué versión de apache2 se debe instalar y depende de la versión actual disponible en el repositorio de apt.
  • La secuencia de comandos depende de un archivo alojado en un tercero que no tiene versiones y se podría haber modificado desde la última vez que se usó la plantilla de instancias.

Si usas un escalador automático, puede que una plantilla de instancias no determinista haga que tu escalador automático agregue instancias nuevas a un grupo de instancias administrado con una configuración diferente, como una versión diferente de apache2.

De manera similar, si aplicaste esta plantilla a un grupo de instancias administrado, actualizaste el grupo a una plantilla diferente mediante el servicio del actualizador de grupos de instancias y, luego, decidiste revertir a la plantilla anterior, podrías acabar con instancias que usen una versión de apache2 o del archivo index.php distinta a la que tenías antes de la actualización, porque las instancias siempre buscarían la versión más reciente durante el inicio.

Evita el comportamiento ambiguo o inesperado de la plantilla de instancias

Para evitar un comportamiento inesperado de la plantilla, usa uno de los métodos siguientes:

  • Usa imágenes optimizadas de contenedor o Docker, con etiquetas Docker. Por ejemplo, te recomendamos que asignes etiquetas nuevas para cada compilación nueva de la imagen de Docker y las uses en las plantillas de instancias, en lugar de usar la última etiqueta predeterminada. En cuanto a una imagen optimizada de contenedor, puedes hacer referencia de forma explícita a una compilación particular de tu imagen en el archivo de manifiesto. En el ejemplo siguiente, se usa la imagen de Docker “myimage” en la versión con la etiqueta “version_2_1_3”:

    version: v1beta2
    containers:
      - name: simple-echo
        image: myimage:version_2_1_3
           [ rest of your manifest file ]
    
  • Crea una imagen personalizada para usar como imagen de la plantilla. Esto es preferible a las secuencias de comandos de inicio porque garantiza que cada instancia sea la misma. Las secuencias de comandos de inicio pueden tener resultados diferentes después de las actualizaciones del paquete de distribución. Usa secuencias de comandos de inicio en tus plantillas de instancias para el prototipado y un desarrollo rápido. Usa imágenes personalizadas cuando estés listo y quieras implementar servicios con calidad de producción.

  • Si usas secuencias de comandos de inicio, considera actualizar tus secuencias de comandos para que sean deterministas. Por ejemplo, crea una versión nueva de la plantilla anterior y especifica una secuencia de comandos de inicio determinista de la manera siguiente:

    gcloud compute instance-templates create example-template-with-startup-2-1-3 \
        --image-family debian-9 \
        --image-project debian-cloud \
        --metadata startup-script='#! /bin/bash
        sudo apt install -y apache2=2.2.20-1ubuntu1
        scp myuser@108.59.87.185:version_2_1_3/index.php /var/www/'
    

    En el ejemplo anterior, se ilustra lo siguiente: “version_2_1_3” es un subdirectorio que contiene secuencias de comandos PHP para la versión 2.1.3 del servicio.

¿Qué sigue?