suporte cloud-init para máquinas virtuais no Azure

Atenção

Este artigo faz referência ao CentOS, uma distribuição Linux que está se aproximando do status de Fim da Vida Útil (EOL). Por favor, considere o seu uso e planeje de acordo. Para obter mais informações, consulte as diretrizes de Fim da Vida Útil do CentOS.

Aplica-se a: ✔️ Linux VMs ✔️ Conjuntos de escala flexível

Este artigo explica o suporte que existe para cloud-init para configurar uma máquina virtual (VM) ou Conjuntos de Dimensionamento de Máquina Virtual no momento do provisionamento no Azure. Essas configurações de inicialização na nuvem 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 transmitirá seus valores de parâmetro Criar VM, como nome de host, nome de usuário e senha, e os disponibilizará para a VM à medida que ela for inicializada. Um 'agente de provisionamento' consumirá esses valores, configurará a VM e relatará quando concluído.

O Azure dá suporte a dois agentes de provisionamento cloud-init e ao Agente Linux do Azure (WALA).

Visão geral do cloud-init

cloud-init é uma abordagem amplamente utilizada para personalizar uma VM Linux à medida que ela é inicializada pela primeira vez. Pode utilizar o cloud-init para instalar pacotes e escrever ficheiros ou para configurar utilizadores e segurança. Como o cloud-init é chamado durante o processo de inicialização inicial, não há etapas adicionais ou agentes necessários para aplicar sua configuração. Para obter mais informações sobre como formatar corretamente seus #cloud-config arquivos ou outras entradas, consulte o site de documentação cloud-init. #cloud-config Os arquivos são arquivos de texto codificados em Base64.

cloud-init também funciona em distribuições. Por exemplo, não utiliza apt-get install nem yum install para instalar um pacote. Em vez disso, pode definir uma lista dos pacotes a instalar. O cloud-init usa automaticamente a ferramenta nativa de gerenciamento de pacotes para a distro selecionada.

Estamos trabalhando ativamente com nossos parceiros de distribuição Linux aprovados para ter imagens habilitadas para inicialização na nuvem disponíveis no Azure Marketplace. Essas imagens farão com que suas implantações e configurações de inicialização na nuvem funcionem perfeitamente com VMs e conjuntos de dimensionamento de máquinas virtuais. Inicialmente, colaboramos com os parceiros de distribuição Linux aprovados e upstream para garantir funções cloud-init com o sistema operacional no Azure, em seguida, os pacotes são atualizados e disponibilizados publicamente nos repositórios de pacotes de distro.

Há dois estágios para disponibilizar o cloud-init para as distribuições Linux com suporte no Azure, suporte a pacotes e, em seguida, suporte a imagens:

  • 'cloud-init package support on Azure' documentos, quais pacotes cloud-init em diante são suportados ou em visualização, para que você possa usar esses pacotes com o sistema operacional em uma imagem personalizada.
  • Documentos 'Image cloud-init ready' se a imagem já estiver configurada para usar cloud-init.

Canónico

Editora / Versão Oferecer SKU Versão imagem cloud-init pronto suporte a pacotes cloud-init no Azure
Canônico 22.04 UbuntuServer 22.04-LTS mais recente sim sim
Canônico 20.04 UbuntuServer 20.04-LTS mais recente sim sim
Canônico 18.04 UbuntuServer 18.04-LTS mais recente sim sim

RHEL

Editora / Versão Oferecer SKU Versão imagem cloud-init pronto suporte a pacotes 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
  • Todos os outros SKUs RedHat a partir do RHEL 7 (versão 7.7) e RHEL 8 (versão 8.1), incluindo imagens Gen1 e Gen2, são provisionados usando cloud-init. O Cloud-init não é suportado no RHEL 6.

CentOS

Editora / Versão Oferecer SKU Versão imagem cloud-init pronto suporte a pacotes 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
  • Todos os outros SKUs do CentOS a partir do CentOS 7 (versão 7.7) e do CentOS 8 (versão 8.1), incluindo imagens Gen1 e Gen2, são provisionados usando cloud-init. As imagens do CentOS 6.10, 7.4, 7.5 e 7.6 não suportam cloud-init.

Nota

OpenLogic é agora Rogue Wave Software

Oracle

Editora / Versão Oferecer SKU Versão imagem cloud-init pronto suporte a pacotes cloud-init no Azure
Oráculo 7 Oracle Linux 77, 78, OL79 mais recente sim sim
Oráculo 8 Oracle Linux 81, OL82, OL83-LVM, OL84-LVM mais recente sim sim
  • Todos os outros Oracle SKUs a partir do Oracle 7 (versão 7.7) e Oracle 8 (versão 8.1), incluindo imagens Gen1 e Gen2, são provisionados usando cloud-init.

SUSE SLES

Editora / Versão Oferecer SKU Versão imagem cloud-init pronto suporte a pacotes 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 cloud-init.
  • Além disso, essas imagens também são provisionadas com cloud-init -
Editora / Versão Oferecer 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) gerente-proxy-4-byosgen1:2020.06.10
SUSE 15 SLES (SUSE Linux Enterprise Server) manager-server-4-byos:gen1:2020.06.10

Debian

Editora / Versão Oferecer SKU Versão imagem cloud-init pronto suporte a pacotes 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 inicialização na nuvem.

Qual é a diferença entre cloud-init e o Linux Agent (WALA)?

O WALA é um agente específico da plataforma Azure usado para provisionar e configurar VMs e manipular extensões do Azure.

Estamos aprimorando a tarefa de configurar VMs para usar cloud-init em vez do Linux Agent, a fim de permitir que os clientes existentes cloud-init usem seus scripts cloud-init atuais, ou novos clientes aproveitem a rica funcionalidade de configuração cloud-init. Se você tiver investimentos existentes em scripts cloud-init para configurar sistemas Linux, não há configurações adicionais necessárias para permitir que o cloud-init os processe.

cloud-init não pode processar extensões do Azure, então o WALA ainda é necessário na imagem para processar extensões, mas precisará ter seu código de provisionamento desabilitado, para imagens de distros Linux endossadas que estão sendo convertidas para provisionamento pelo cloud-init, elas terão o WALA instalado e configurado corretamente.

Ao criar uma VM, se você não incluir o switch CLI --custom-data do Azure no momento do provisionamento, cloud-init ou WALA usará os parâmetros mínimos de provisionamento de VM necessários para provisionar a VM e concluir a implantação com os padrões. Se você fizer referência à configuração cloud-init com o --custom-data switch, tudo o que estiver contido em seus dados personalizados estará disponível para cloud-init quando a VM for inicializada.

As configurações cloud-init aplicadas a VMs não têm restrições de tempo e não farão com que uma implantação falhe com o tempo limite. Isso não é verdade para WALA, se você alterar os padrões do WALA para processar dados personalizados, ele não poderá exceder o tempo total de provisionamento de VM de 40 minutos, se assim for, a VM Create falhará.

provisionamento de VM 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 usará os metadados disponíveis no Serviço de Metadados de Instância do Azure para provisionar a VM. Esta opção funciona apenas para a chave SSH e dados do usuário. 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 inicialização na nuvem

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 de distribuição Linux precisam optar por habilitar e integrar o cloud-init em suas imagens publicadas do Azure base. Depois de confirmar que a imagem que você deseja implantar está habilitada para cloud-init, você pode usar a CLI do Azure para implantar a imagem.

A primeira etapa na implantação dessa imagem é criar um grupo de recursos com o comando az group create . Um grupo de recursos do Azure é um contentor lógico no qual os recursos do Azure são implementados e geridos.

O exemplo seguinte cria um grupo de recursos com o nome myResourceGroup na localização eastus.

az group create --name myResourceGroup --location eastus

A próxima etapa é criar um arquivo em seu shell atual, chamado cloud-init.txt e colar a configuração a seguir. Para este exemplo, crie o arquivo no Cloud Shell e não em sua máquina local. Você pode usar qualquer editor de sua escolha. Introduza sensible-editor cloud-init.txt para criar o ficheiro e ver uma lista dos editores disponíveis. Neste exemplo, estamos usando o editor nano . Escolha #1 para usar o editor nano . Certifique-se de que o ficheiro de inicialização da cloud é 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

Nota

cloud-init tem vários tipos de entrada, cloud-init usará a primeira linha do customData/userData para indicar como deve processar a entrada, por exemplo #cloud-config , indica que o conteúdo deve ser processado como uma configuração cloud-init.

Pressione Ctrl + X para sair do arquivo, digite y para salvar o arquivo e pressione Enter para confirmar o nome do arquivo ao sair.

A etapa final é criar uma VM com o comando az vm create .

O exemplo a seguir cria uma VM chamada centos74 e cria chaves SSH se elas ainda não existirem em um local de chave padrão. Para utilizar um conjunto específico de chaves, utilize a opção --ssh-key-value. Utilize o parâmetro --custom-data para passar o ficheiro de configuração de inicialização da cloud. Forneça o caminho completo para a configuração do cloud-init.txt, se tiver guardado o ficheiro fora do 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 sua implantação. Tome nota do publicIpAddress. Este endereço é utilizado para aceder à VM. Leva algum tempo para que a VM seja criada, os pacotes sejam instalados e o aplicativo seja iniciado. Existem tarefas em segundo plano que continuam a ser executadas após a CLI do Azure devolver o utilizador à linha de comandos. Você pode SSH na VM e usar as etapas descritas na seção Solução de problemas para exibir os logs de inicialização na nuvem.

Você também pode implantar uma VM habilitada para inicialização na nuvem passando os parâmetros no modelo ARM.

Solução de problemas de cloud-init

Depois que a VM tiver sido provisionada, o cloud-init será executado através de todos os módulos e scripts definidos para --custom-data configurar a VM. Se você precisar solucionar quaisquer erros ou omissões da configuração, você precisa procurar o nome do módulo (disk_setupruncmd ou por exemplo) no log cloud-init - localizado em /var/log/cloud-init.log.

Nota

Nem todas as falhas de módulo resultam em uma falha fatal de configuração geral de inicialização na nuvem. Por exemplo, usando o runcmd módulo, 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 do cloud-init, consulte a documentação do cloud-init

Telemetria

cloud-init recolhe dados de utilização e envia-os para a Microsoft para ajudar a melhorar os 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 monitorar o desempenho e a confiabilidade. Os dados recolhidos não incluem quaisquer identificadores (identificadores pessoais). Leia a nossa declaração de privacidade para saber mais. Alguns exemplos de telemetria que estão sendo coletados são (esta não é uma lista exaustiva): informações relacionadas ao sistema operacional (versão cloud-init, versão distro, versão kernel), métricas de desempenho de ações essenciais de provisionamento de VM (tempo para obter concessão DHCP, tempo para recuperar metadados necessários para configurar a VM, etc.), log cloud-init e log dmesg.

A coleta de telemetria está atualmente habilitada para a maioria das imagens do nosso mercado que usam cloud-init. Ele é habilitado especificando o repórter de telemetria KVP para 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. A remoção desse arquivo durante a preparação da imagem desabilitará a coleta de telemetria para qualquer VM criada a partir dessa imagem.

Conteúdo de exemplo do 10-azure-kvp.cfg

reporting:
  logging:
    type: log
  telemetry:
    type: hyperv

Próximos passos

Solucione problemas com o cloud-init.

Para obter exemplos de alterações de configuração no cloud-init, consulte os seguintes documentos: