Modelos deterministas de instância

Nesta página, descrevemos quando e por que é necessário criar modelos de instâncias determinísticas. Esses modelos deixam bastante claro quando o modelo de instância é implantado, em termos de tipo de serviços ou aplicativos de terceiros que precisam ser instalados em suas instâncias. Ao criá-los, você minimiza a ambiguidade e o comportamento inesperado de seus modelos de instância.

Antes de começar

Por que é necessário criar modelos de instâncias determinísticas

Em geral, recomendamos que você defina as propriedades do modelo de instância da maneira mais explícita e determinística possível. Se decidir empregar scripts de inicialização que instalem ou usem serviços de terceiros nos seus modelos de instância, verifique se informações explícitas como a versão do aplicativo a ser instalado são fornecidas. O Compute Engine depende das informações definidas no modelo. Ele não tem nenhum controle sobre os serviços de terceiros referenciados. O modelo de instância pode apresentar comportamentos inesperados quando ele é muito vago.

Por exemplo, pense em o comando a seguir para criar um modelo de instância com um script de inicialização que instala o apache2 e usa um arquivo hospedado em um 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-get install -y apache2
    scp myuser@108.59.87.185:index.php /var/www/'

Há dois possíveis problemas nesse script de inicialização:

  • No script, a versão do apache2 a ser instalada não está definida explicitamente, e ele depende da versão atual disponível no repositório apt-get.
  • O script depende de um arquivo hospedado em um serviço de terceiros sem controle de versão. Esse arquivo pode ter sido alterado depois que o modelo de instância foi usado pela última vez.

Ao usar um autoescalador com um modelo de instância não determinístico, novas instâncias podem acabar sendo adicionadas a um grupo de instâncias gerenciadas com uma configuração diferente, como outra versão do apache2.

De maneira semelhante, se você aplica esse modelo a um grupo de instâncias gerenciadas, atualiza o grupo para um modelo diferente usando o serviço Instance Group Updater e decide revertê-lo ao modelo anterior, pode acabar com as instâncias usando uma versão do apache2 ou do arquivo index.php diferente daquela usada antes da atualização, já que na inicialização as instâncias sempre buscam a versão mais recente.

Como evitar comportamento ambíguo ou inesperado do modelo de instância

Para evitar comportamento inesperado do modelo, use um destes métodos:

  • Use imagens otimizadas para contêiner ou do Docker, com tags do Docker. Por exemplo, recomendamos que você atribua novas tags a cada versão nova da imagem do Docker. Além disso, use essas tags nos modelos de instância, em vez da tag padrão mais recente. Para imagens otimizadas para contêiner, faça uma referência explícita a uma versão específica da imagem no arquivo de manifesto. O exemplo abaixo usa a imagem do Docker "myimage" na versão com a tag "version_2_1_3":

    version: v1beta2
    containers:
      - name: simple-echo
        image: myimage:version_2_1_3
           [ rest of your manifest file ]
    
  • Crie uma imagem personalizada para ser usada como a imagem do modelo. Dê preferência a essa opção, porque você consegue garantir que as instâncias sejam idênticas. Ao usar um script de inicialização, o resultado pode ser diferente, dependendo das atualizações do pacote de distribuição. Use scripts de inicialização nos modelos de instância para criar protótipos e fazer um desenvolvimento rápido. Escolha as imagens personalizadas quando estiver pronto para implantar os serviços de produção-qualidade.

  • Caso precise usar os scripts de inicialização, verifique se é possível torná-los deterministas. Por exemplo, crie uma nova versão do modelo anterior e especifique um script de inicialização determinista da seguinte maneira:

    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-get install -y apache2=2.2.20-1ubuntu1
        scp myuser@108.59.87.185:version_2_1_3/index.php /var/www/'
    

    em que "version_2_1_3" é um subdiretório com scripts PHP para a versão 2.1.3 do seu serviço.

Próximas etapas

Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…

Documentação do Compute Engine