Esta página describe cuándo y por qué crear plantillas de instancias deterministas. Las plantillas de instancias deterministas dejan claro explícitamente el tipo de servicios o aplicaciones de terceros que se instalarán en sus instancias cuando se implemente la plantilla de instancias. Al crear plantillas de instancias deterministas, minimiza la ambigüedad y el comportamiento inesperado de sus plantillas de instancias.
¿Por qué crear plantillas de instancias deterministas?
En general, recomendamos que las propiedades de su plantilla de instancia sean lo más explícitas y deterministas posible. Si emplea scripts de inicio en sus plantillas de instancias que instalan o utilizan servicios de terceros, asegúrese de que estos scripts proporcionen información explícita, como la versión de la aplicación 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 su plantilla es demasiado vaga, su plantilla de instancia podría comportarse de manera inesperada.
Por ejemplo, considere el siguiente comando para crear una plantilla de instancia con un script de inicio que instala apache2 y utiliza 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 este script de inicio:
- El script no define explícitamente qué versión de apache2 instalar y depende de la versión actual disponible en el repositorio
apt
. - El script se basa en un archivo alojado en un tercero que no tiene versiones y podría haberse modificado desde la última vez que se utilizó la plantilla de instancia.
Si usa un escalador automático , una plantilla de instancias no determinista puede hacer que su escalador automático agregue nuevas instancias a un grupo de instancias administrado con una configuración diferente, como una versión diferente de apache2.
De manera similar, si aplicó esta plantilla a un grupo de instancias administrado, actualizó el grupo a un servicio de plantilla diferente y luego decidió revertir a la plantilla anterior, podría terminar con instancias que usan una versión diferente del archivo apache2 o index.php que antes de la actualización porque sus instancias siempre buscarían la versión más reciente al inicio.
Evitar el comportamiento ambiguo o inesperado de la plantilla de instancias
Para evitar un comportamiento inesperado de la plantilla, utilice uno de los siguientes métodos:
Utilice imágenes optimizadas para contenedores o Docker, con etiquetas Docker. Por ejemplo, le recomendamos que asigne nuevas etiquetas para cada nueva compilación de su imagen de Docker y use estas etiquetas en sus plantillas de instancia en lugar de la última etiqueta predeterminada. Para una imagen optimizada para contenedores, puede hacer referencia explícita a una compilación particular de su imagen en su archivo de manifiesto. El siguiente ejemplo utiliza la imagen de Docker "myimage" en la versión etiquetada con "version_2_1_3":
version: v1beta2 containers: - name: simple-echo image: myimage:version_2_1_3 [ rest of your manifest file ]
Cree una imagen personalizada para usarla como imagen de la plantilla. Esto es preferible a los scripts de inicio porque garantiza que todas las instancias sean iguales. Los scripts de inicio pueden tener resultados diferentes después de las actualizaciones del paquete de distribución. Utilice scripts de inicio en sus plantillas de instancias para la creación de prototipos y un desarrollo rápido, y utilice imágenes personalizadas cuando esté listo para implementar servicios con calidad de producción.
Si utiliza scripts de inicio, considere actualizar sus scripts para que sean deterministas. Por ejemplo, cree una nueva versión de la plantilla anterior y especifique un script de inicio determinista de la siguiente manera:
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/'
donde "versión_2_1_3" es un subdirectorio que contiene scripts PHP para la versión 2.1.3 de su servicio.