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.
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.
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.
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.
Cloud-init Config Stage: Nesta etapa, os módulos definidos e listados em
cloud_config_modules
/etc/cloud/cloud
.cfg são executados.Estágio final do Cloud-init: Nesta etapa final, os módulos em
cloud_final_modules
, listados em/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çãoper-instance
- scripts dentro deste diretório são executados quando uma nova instância é inicializada pela primeira vezper-once
- scripts dentro deste diretório executados apenas uma vez
- Durante esta etapa, você pode executar scripts colocando-os nos diretórios em