Suporte à cloud-init para máquinas virtuais no Azure

Cuidado

Este artigo faz referência ao CentOS, uma distribuição do Linux que está se aproximando do status de EOL (fim da vida útil). Considere seu uso e planeje adequadamente. Para obter mais informações, veja as Diretrizes sobre fim da vida útil do CentOS.

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 passará seus valores de parâmetro de criação de VM, como nome de host, nome de usuário e senha e os disponibilizará para a VM à medida que ele for inicializado. 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 22.04 UbuntuServer 22.04-LTS mais recente sim sim
Canonical 20.04 UbuntuServer 20.04 - LTS mais recente sim sim
Canonical 18.04 UbuntuServer 18.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 cloud-init no RHEL 6.

CentOS

Fornecedor/versão Oferta SKU Versão imagem pronta para o cloud-init suporte ao pacote do cloud-init no Azure
OpenLogic 7 CentOS 7.7, 7.8, 7.9 mais recente sim sim
OpenLogic 8 CentOS 8.1, 8.2, 8.3 mais recente sim sim
  • Todas as outras SKUs do CentOS a partir do CentOS 7 (versão 7.7) e do CentOS 8 (versão 8.1), incluindo as imagens Gen1 e Gen2 são provisionadas usando o cloud-init. As imagens do CentOS 6.10, 7.4, 7.5 e 7.6 não dão suporte para cloud-init.

Observação

O OpenLogic agora é Rogue Wave Software

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
  • Todas as outras SKUs SUSE a partir do SLES 15 (sp1) e SLES 12 (sp5), incluindo imagens Gen1 e Gen2, são provisionadas usando o cloud-init.
  • Além disso, essas imagens também são provisionadas com o cloud-init -
Fornecedor/versão Oferta SKU/Versão
SUSE 12 SLES (SUSE Linux Enterprise Server) sles-{byos/sap/sap-byos}:12-sp4:2020.06.10
SUSE 12 SLES (SUSE Linux Enterprise Server) sles-{byos/sap/sap-byos}:12-sp3:2020.06.10
SUSE 12 SLES (SUSE Linux Enterprise Server) sles-{byos/sap/sap-byos}:12-sp2:2020.06.10
SUSE 15 SLES (SUSE Linux Enterprise Server) manager-proxy-4-byosgen1:2020.06.10
SUSE 15 SLES (SUSE Linux Enterprise Server) manager-server-4-byos:gen1:2020.06.10

Debian

Fornecedor/versão Oferta SKU Versão imagem pronta para o cloud-init suporte ao pacote do cloud-init no Azure
debian (Gen1) debian-10 10-cloudinit 10:0.20201013.422 sim sim – suporte da versão do pacote: 20.2-2~deb10u1
debian (Gen2) debian-10 10-cloudinit-gen2 0.20201013.422 sim sim – suporte da versão do pacote: 20.2-2~deb10u1

Atualmente, o Azure Stack dará suporte ao provisionamento de imagens habilitadas para 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 extensões, mas precisará ter o respectivo código de provisionamento desabilitado, pois imagens de distribuições do Linux endossadas que estejam sendo convertidas para provisionamento pelo cloud-init terão o WALA instalado e estarão configuradas 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 de cloud-init aplicadas às VMs não têm restrições de tempo e não farão com que uma implantação falhe por tempo limite. Isso não se verifica para o WALA, pois se você alterar os padrões do WALA para processar dados personalizados, ele não poderá exceder o tempo de provisionamento total permitido de 40 minutos da VM, caso contrário, 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 você deseja implantar é habilitada para cloud-init, você pode 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. Insira sensible-editor cloud-init.txt para criar o arquivo e ver uma lista de editores disponíveis. Neste exemplo, estamos usando o editor nano. Escolha #1 para usar o editor nano. 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.

Pressione Ctrl + X para sair do arquivo, digite ypara salvar o arquivo e pressione Enter para confirmar 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 centos74 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 centos74 \
  --image OpenLogic:CentOS-CI:7-CI:latest \
  --custom-data cloud-init.txt \
  --generate-ssh-keys 

Quando a VM tiver sido criada, a CLI do Azure mostrará informações específicas para a 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 o script definido 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 detalhes sobre o registro em log de cloud-init, confira a documentação de 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 cloud-init. Ele está habilitado especificando o repórter de telemetria KVP para o 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 desabilitará a coleção 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: