Partilhar via


Perceber melhor o cloud-init

Aplica-se a: ✔️ Linux VMs ✔️ Conjuntos de escala flexível

Para saber mais sobre o cloud-init ou solucioná-lo em um nível mais profundo, você precisa entender como ele funciona. Este documento destaca as partes importantes e explica as especificidades do Azure.

Quando cloud-init é incluído em uma imagem generalizada e uma VM é criada a partir dessa imagem, ela processa configurações e é executada através de cinco estágios durante a inicialização inicial. Esses estágios mostram em que ponto o cloud-init aplica suas configurações.

Compreender a configuração do Cloud-Init

Configurar uma VM para ser executada em uma plataforma usa cloud-init para aplicar várias configurações. As principais configurações com as quais você interage é User data (customData), que suporta vários formatos. Para obter mais informações, consulte a documentação de User-Data Formats & cloud-init 21.2. Você também tem a capacidade de adicionar e executar scripts (/var/lib/cloud/scripts) para outras configurações.

Imagens pré-configuradas do Azure Marketplace

Algumas configurações já estão incorporadas em imagens do Azure Marketplace que vêm com cloud-init.

  • Fonte de dados em nuvem - cloud-init contém código que pode interagir com plataformas de nuvem, esses códigos são chamados de 'fontes de dados'. Quando uma VM é criada a partir de uma imagem cloud-init no Azure, cloud-init carrega a fonte de dados do Azure, que interage com os pontos de extremidade de metadados do Azure para obter a configuração específica da VM.

  • Configuração de tempo de execução (/run/cloud-init).

  • Configuração de imagem (/etc/cloud), como /etc/cloud/cloud.cfg, /etc/cloud/cloud.cfg.d/*.cfg. Um exemplo de onde essa configuração é usada no Azure, é comum que as imagens do sistema operacional Linux com cloud-init tenham uma diretiva de fonte de dados do Azure que informa ao cloud-init qual fonte de dados ele deve usar, essa configuração economiza tempo de inicialização na nuvem:

    sudo cat /etc/cloud/cloud.cfg.d/90_dpkg.cfg
    
    # to update this file, run dpkg-reconfigure cloud-init
    datasource_list: [ Azure ]
    

Estágios de inicialização Cloud-init (configuração de processamento)

Quando você provisiona VMs com cloud-init, há cinco estágios de inicialização de configuração. A saída desses estágios é visível nos logs.

  1. Estágio do gerador: O gerador systemd cloud-init é iniciado e determina que o cloud-init deve ser incluído nas metas de inicialização e, em caso afirmativo, habilita o cloud-init.

  2. Estágio local cloud-init: aqui, o cloud-init procura a fonte de dados "Azure" local, que permite que o cloud-init interaja com o Azure e aplique uma configuração de rede, incluindo fallback.

  3. Cloud-init init Stage (Network): A rede deve estar online e as informações da NIC e da tabela de rotas devem ser geradas. Nesta etapa, os módulos listados em cloud_init_modules/etc/cloud/cloud.cfg são executados. A VM no Azure é montada, o disco efêmero é formatado, o nome do host é definido, juntamente com outras tarefas.

    Seguem-se alguns dos seguintes elementos cloud_init_modules:

    - migrator
    - seed_random
    - bootcmd
    - write-files
    - growpart
    - resizefs
    - disk_setup
    - mounts
    - set_hostname
    - update_hostname
    - ssh
    

    Após esse estágio, o cloud-init envia um sinal para a plataforma do Azure de que a VM foi provisionada com êxito. Alguns módulos podem ter falhado, no entanto, nem todas as falhas de módulo resultam automaticamente em uma falha de provisionamento.

  4. Cloud-init Config Stage: Nesta etapa, os módulos definidos cloud_config_modules e listados em /etc/cloud/cloud.cfg são executados.

  5. Estágio final do Cloud-init: Nesta etapa final, os módulos em , listados em cloud_final_modules/etc/cloud/cloud.cfg, são executados. Aqui os módulos que precisam ser executados no final do processo de inicialização são executados, como instalações de pacotes e scripts de execução, etc.

    • Durante esta etapa, você pode executar scripts colocando-os nos diretórios em /var/lib/cloud/scripts:
      • per-boot - scripts dentro deste diretório, executados em cada reinicialização
      • per-instance - scripts dentro deste diretório são executados quando uma nova instância é inicializada pela primeira vez
      • per-once - scripts dentro deste diretório executados apenas uma vez

Próximos passos

Solução de problemas de inicialização na nuvem.