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.

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: