Suporte à cloud-init para máquinas virtuais no Azure
Aplica-se a: ✔️ VMs do Linux ✔️ Conjuntos de dimensionamento flexíveis
Este artigo mostra que o suporte que existe para a cloud-init para configurar uma VM (máquina virtual) ou Conjuntos de Dimensionamento de Máquinas Virtuais no momento do provisionamento no Azure. Essas configurações de cloud-init são executadas na primeira inicialização depois que os recursos são provisionados pelo Azure.
O provisionamento de VM é o processo em que o Azure repassa os valores dos parâmetros de Criação da VM, como nome do host, nome do usuário e senha, e os disponibiliza para a VM quando ela é inicializada. Um 'agente de provisionamento' consumirá esses valores, vai configurar a VM e relatará quando isso for concluído.
O Azure dá suporte a dois agentes de provisionamento de cloud-init e ao WALA (Agente Linux do Azure).
Visão geral da cloud-init
A cloud-init é uma abordagem amplamente utilizada para personalizar uma VM do Linux quando ela é inicializada pela primeira vez. Você pode utilizar a inicialização de nuvem para instalar pacotes e gravar arquivos, ou para configurar usuários e segurança. Como o cloud-init é executado durante o processo de inicialização inicial, não há etapa adicional ou agentes necessários para aplicar a configuração. Para obter mais informações sobre como formatar corretamente seus arquivos #cloud-config
ou outras entradas, confira o site de documentação da cloud-init. Os arquivos #cloud-config
são arquivos de texto codificados em base64.
A cloud-init também funciona entre distribuições diferentes. Por exemplo, você não usa apt-get install nem yum install para instalar um pacote. Em vez disso, você pode definir uma lista de pacotes para instalar. A cloud-init usará automaticamente a ferramenta de gerenciamento de pacote nativo de distribuição que você selecionar.
Trabalhamos ativamente com nossos parceiros endossados de distribuição de Linux para termos imagens de cloud-init habilitadas disponíveis no Azure Marketplace. Essas imagens farão com que as implantações e as configurações de cloud-init funcionem perfeitamente com VMs e conjuntos de dimensionamento de máquinas virtuais. Inicialmente, colaboramos com os parceiros da distribuição de Linux endossada e upstream para garantir as funções de cloud-init com o sistema operacional no Azure, então os pacotes são atualizados e disponibilizados publicamente nos repositórios de pacotes da distribuição.
Há dois estágios para disponibilizar cloud-init para as distribuições Linux com suporte do Azure, o suporte para pacotes e o suporte para imagens:
- "suporte a pacotes do cloud-init no Azure" documenta quais pacotes do cloud-init, juntamente com as versões posteriores, são compatíveis ou estão em versão prévia, para que você possa usar esses pacotes com o sistema operacional em uma imagem personalizada.
- "imagem pronta para o cloud-init" documenta se a imagem já está configurada para usar o cloud-init.
Canônico
Fornecedor/versão | Oferta | SKU | Versão | imagem pronta para o cloud-init | suporte ao pacote do cloud-init no Azure |
---|---|---|---|---|---|
Canonical 24.04 | UbuntuServer | 22.04-LTS | mais recente | sim | sim |
Canonical 22.04 | UbuntuServer | 22.04-LTS | mais recente | sim | sim |
Canonical 20.04 | UbuntuServer | 20.04 - LTS | mais recente | sim | sim |
RHEL
Fornecedor/versão | Oferta | SKU | Versão | imagem pronta para o cloud-init | suporte ao pacote do cloud-init no Azure |
---|---|---|---|---|---|
RedHat 7 | RHEL | 7.7, 7.8, 7_9 | mais recente | sim | sim |
RedHat 8 | RHEL | 8.1, 8.2, 8_3, 8_4 | mais recente | sim | sim |
RedHat 9 | RHEL | 9_0, 9_1 | mais recente | sim | sim |
- Todas as outras SKUs do RedHat a partir do RHEL 7 (versão 7.7) e do RHEL 8 (versão 8.1), incluindo as imagens Gen1 e Gen2 são provisionadas usando o cloud-init. Não há suporte para o cloud-init no RHEL 6.
Oracle
Fornecedor/versão | Oferta | SKU | Versão | imagem pronta para o cloud-init | suporte ao pacote do cloud-init no Azure |
---|---|---|---|---|---|
Oracle 7 | Oracle Linux | 77, 78, ol79 | mais recente | sim | sim |
Oracle 8 | Oracle Linux | 81, ol82, ol83-lvm, ol84-lvm | mais recente | sim | sim |
- Todas as outras SKUs do Oracle a partir do Oracle 7 (versão 7.7) e do Oracle 8 (versão 8.1), incluindo as imagens Gen1 e Gen2 são provisionadas usando o cloud-init.
SUSE SLES
Fornecedor/versão | Oferta | SKU | Versão | imagem pronta para o cloud-init | suporte ao pacote do cloud-init no Azure |
---|---|---|---|---|---|
SUSE 15 | SLES (SUSE Linux Enterprise Server) | sp1, sp2, sp3 | mais recente | sim | sim |
SUSE 12 | SLES (SUSE Linux Enterprise Server) | sp5 | mais recente | sim | sim |
Debian
Fornecedor/versão | Oferta | SKU | Versão | imagem pronta para o cloud-init | suporte ao pacote do cloud-init no Azure |
---|---|---|---|---|---|
debian-10 | Debian | 10-cloudinit-gen2 | Debian:debian-10:10-cloudinit-gen2:0.0.1015 | sim | sim |
debian-10 | Debian | 10-cloudinit-gen2 | Debian:debian-10:10-cloudinit-gen2:0.0.991 | sim | sim |
debian-10 | Debian | 10-cloudinit-gen2 | Debian:debian-10:10-cloudinit-gen2:0.0.999 | sim | sim |
Atualmente, o Azure Stack dá suporte ao provisionamento de imagens habilitadas para o cloud-init.
Qual é a diferença entre cloud-init e o Agente do Linux (WALA)?
O WALA é um agente específico da plataforma do Azure usado para provisionar e configurar VMs e lidar com extensões do Azure.
Estamos aprimorando a tarefa de configuração de VMs para usar cloud-init em vez do agente do Linux, para permitir que clientes existentes de cloud-init usem seus scripts atuais de cloud-init ou que novos clientes aproveitem as funcionalidades avançadas de configuração do cloud-init. Se você tiver investimentos existentes em scripts do cloud-init para configurar os sistemas Linux, não há nenhuma configuração adicional necessária para habilitar o cloud-init para processá-los.
O cloud-init não pode processar extensões do Azure, portanto, o WALA ainda é necessário na imagem para processar as extensões, mas precisa ter seu código de provisionamento desabilitado. Quanto às imagens endossadas do Linux que estão sendo convertidas em provisionamento pelo cloud-init, elas têm o WALA instalado e configurado corretamente.
Ao criar uma VM, se você não incluir a opção --custom-data
da CLI do Azure no momento de provisionamento, o cloud-init ou o WALA usa os parâmetros mínimos necessários da VM para provisionar a VM e concluir a implantação com os padrões. Se você fizer referência à configuração do cloud-init com a opção --custom-data
, tudo o que estiver contido em seus dados personalizados estará disponível para o cloud-init quando a VM for inicializada.
As configurações do cloud-init aplicadas às VMs não possuem restrições de tempo e não farão com que uma implantação falhe com o tempo limite. Isso não é verdade para o WALA, se você alterar o padrão WALA para processar os dados personalizados, ele não poderá exceder o limite total de tempo de provisionamento da VM de 40 minutos, se assim for, a criação da VM falhará.
provisionamento de VM do cloud-init sem um driver UDF
A partir do cloud-init 21.2, você pode usar o cloud-init para provisionar uma VM no Azure sem um driver UDF. Se um driver UDF não estiver disponível na imagem, o cloud-init usa os metadados disponíveis no Serviço de Metadados da Instância do Azure para provisionar a VM. Essa opção funciona apenas para dados de usuário e chave SSH. Para passar uma senha ou dados personalizados para uma VM durante o provisionamento, você deve usar um driver UDF.
Implantando uma Máquina Virtual habilitada para cloud-init
Implantar uma máquina virtual habilitada para cloud-init é tão simples quanto fazer referência a uma distribuição habilitada para cloud-init durante a implantação. Os mantenedores da distribuição de Linux precisam optar por habilitar e integrar o cloud-init em suas imagens publicadas da base do Azure. Depois de confirmar que a imagem que quer implantar está habilitada para o cloud-init, você poderá usar a CLI do Azure para implantar a imagem.
A primeira etapa para implantar essa imagem é criar um grupo de recursos com o comando az group create. Um grupo de recursos do Azure é um contêiner lógico no qual os recursos do Azure são implantados e gerenciados.
O exemplo a seguir cria um grupo de recursos chamado myResourceGroup no local eastus.
az group create --name myResourceGroup --location eastus
A próxima etapa é criar um arquivo no shell atual, chamado cloud-init.txt, e colar a configuração a seguir. Para este exemplo, crie o arquivo no Cloud Shell, não no seu computador local. Você pode usar qualquer editor de sua escolha. Digite sensible-editor cloud-init.txt para criar o arquivo e veja uma lista de editores disponíveis. Use o código da sua escolha. Algumas opções típicas são nano, vimou ed. Certifique-se de que o arquivo de inicialização de nuvem inteiro seja copiado corretamente, especialmente a primeira linha:
SLES | Ubuntu | RHEL |
---|---|---|
# cloud-config package_upgrade: true packages: - apache2 |
# cloud-config package_upgrade: true packages: - httpd |
# cloud-config package_upgrade: true packages: - httpd |
Observação
cloud-init tem vários tipos de entrada, o cloud-init usará a primeira linha do CustomData/UserData para indicar como ele deve processar a entrada; por exemplo, #cloud-config
indica que o conteúdo deve ser processado como uma configuração de cloud-init.
Saia do arquivo e salve o arquivo de acordo com o editor. Verifique o nome do arquivo na saída.
A etapa final cria uma VM com o comando az vm create.
O exemplo a seguir cria uma VM denominada ubuntu2204
e cria chaves SSH quando elas ainda não existem em um local de chave padrão. Para usar um conjunto específico de chaves, use a opção --ssh-key-value
. Utiçize o --custom-data
parâmetro para passar no arquivo de configuração de inicialização de nuvem. Forneça o caminho completo para a configuração cloud-init.txt se você salvou o arquivo fora do seu diretório de trabalho atual.
az vm create \
--resource-group myResourceGroup \
--name ubuntu2204 \
--image Canonical:UbuntuServer:22_04-lts:latest \
--custom-data cloud-init.txt \
--generate-ssh-keys
Quando a VM tiver sido criada, a CLI do Azure mostrará as informações específicas na sua implantação. Anote publicIpAddress
. Esse endereço é usado para acessar a VM. Leva algum tempo para que a VM seja criada, os pacotes sejam instalados e o aplicativo comece a funcionar. Há tarefas em segundo plano que continuarão em execução depois que a CLI do Azure faz você voltar para o prompt. Você pode usar SSH na VM e usar as etapas descritas na seção de resolução de problemas para exibir os logs de cloud-init.
Também é possível implantar uma VM habilitada para Cloud-init passando os parâmetros no modelo ARM.
Resolução de problemas do cloud-init
Depois que a VM tiver sido provisionada, o cloud-init será executado em todos os módulos e scripts definidos em --custom-data
para configurar a VM. Se você precisar solucionar quaisquer erros ou omissões da configuração, você precisará pesquisar o nome do módulo (disk_setup
ou runcmd
por exemplo) no log do cloud-init - localizado em /var/log/cloud-init.log.
Observação
Nem toda falha do módulo resulta em uma falha fatal de configuração geral do cloud-init. Por exemplo, usando o módulo runcmd
, se o script falhar, o cloud-init ainda relatará o provisionamento bem-sucedido, porque o módulo runcmd foi executado.
Para obter mais informações sobre o log do cloud-init, consulte a documentação cloud-init
Telemetria
O cloud-init coleta dados de uso e os envia à Microsoft para ajudar a melhorar nossos produtos e serviços. A telemetria só é coletada durante o processo de provisionamento (primeira inicialização da VM). Os dados coletados nos ajudam a investigar falhas de provisionamento e a monitorar o desempenho e a confiabilidade. Os dados coletados não incluem identificadores (identificadores pessoais). Leia a nossa política de privacidade para saber mais. Alguns exemplos da telemetria coletada são (esta não é uma lista completa): informações relacionadas ao sistema operacional (versão de cloud-init, versão de distribuição, versão do kernel), métricas de desempenho de ações essenciais de provisionamento de VM (tempo para obter concessão de DHCP, tempo para recuperar metadados necessários para configurar a VM etc.), log de cloud-init e log de dmesg.
Atualmente, a coleta de telemetria está habilitada para a maioria das nossas imagens do marketplace que usam o cloud-init. Ele é habilitado especificando o repórter de telemetria KVP do cloud-init. Na maioria das imagens do Azure Marketplace, essa configuração pode ser encontrada no arquivo /etc/cloud/cloud.cfg.d/10-azure-kvp.cfg. Remover esse arquivo durante a preparação da imagem desabilita a coleta de telemetria para qualquer VM criada a partir dessa imagem.
Conteúdo de exemplo de 10-azure-kvp.cfg
reporting:
logging:
type: log
telemetry:
type: hyperv
Próximas etapas
Solucionar problemas com cloud-init.
Para obter exemplos de alterações de configuração do cloud-init, consulte os seguintes documentos:
- Add an additional Linux user to a VM (Adicionar um usuário adicional do Linux a uma VM)
- Run a package manager to update existing packages on first boot (Executar um gerenciador de pacotes para atualizar os pacotes existentes na primeira inicialização)
- Change VM local hostname (Alterar o nome do host local da VM)
- Install an application package, update configuration files and inject keys (Instalar um pacote de aplicativo, atualizar os arquivos de configuração e injetar chaves)