Compartilhar via


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.

Canonical

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 24.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) todos os SPs mais recente sim sim
SUSE 12 SLES (SUSE Linux Enterprise Server) sp5 mais recente sim sim
  • SUSE Linux Enterprise Server 12 é EOL desde 31 de outubro de 2024, SP5 foi o último SP

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 por limite de tempo. Isso não é verdade para o WALA: se você alterar as configurações padrão do WALA para processar custom-data, o processamento não pode exceder o tempo total permitido para provisionamento da VM, que é de 40 minutos; caso isso ocorra, 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: