Problemas ao usar extensões de VM em sistemas de Máquinas Virtuais do Azure Linux habilitados para Python 3
Nota
A Microsoft incentiva os usuários a adotar o Python 3.x em seus sistemas, a menos que sua carga de trabalho exija suporte ao Python 2.x . Exemplos desse requisito podem incluir scripts de administração herdados ou extensões como o Azure Disk Encryption e o Azure Monitor.
Antes de instalar o Python 2.x em produção, considere a questão do suporte de longo prazo do Python 2.x, particularmente sua capacidade de receber atualizações de segurança. Como os produtos, incluindo algumas das extensões mencionadas, atualizam com suporte ao Python 3.8 , você deve descontinuar o uso do Python 2.x.
Algumas distribuições Linux fizeram a transição para o Python 3.8 e removeram completamente o ponto de entrada legado /usr/bin/python
para o Python. Essa transição afeta a implantação automatizada e pronta para uso de determinadas extensões de máquina virtual (VM) com estas duas condições:
- Extensões que ainda estão em transição para o suporte ao Python 3.x
- Extensões que usam o ponto de entrada herdado
/usr/bin/python
Os usuários de distribuição Linux que fizeram a transição para o Python 3.x devem garantir que o ponto de entrada herdado /usr/bin/python
exista antes de tentar implantar essas extensões em suas VMs. Caso contrário, a implantação da extensão poderá falhar.
As distribuições Linux aprovadas que são afetadas incluem o Ubuntu Server 20.04 LTS e o Ubuntu Pro 20.04 LTS.
As Extensões de VM afetadas incluem a Criptografia de Disco do Azure, o Log Analytics, o Acesso à VM (usado para Redefinição de Senha) e o Diagnóstico de Convidado (usado para contadores de desempenho adicionais).
Atualizações in-loco, como a atualização do Ubuntu 18.04 LTS para o Ubuntu 20.04 LTS, devem manter o /usr/bin/python
link simbólico e permanecer inalteradas.
Resolução
Considere estas recomendações gerais antes de implantar extensões nos cenários afetados conhecidos descritos anteriormente no Resumo:
Antes de implantar a extensão, restabeleça o
/usr/bin/python
link simbólico usando o método fornecido pelo fornecedor de distribuição Linux.- Por exemplo, para Python 2.7, use:
sudo apt update && sudo apt install python-is-python2
- Por exemplo, para Python 2.7, use:
Esta recomendação é para clientes do Azure e não tem suporte no Azure Stack:
- Se você já implantou uma instância que apresenta esse problema, use a funcionalidade de comando Executar na folha VM para executar os comandos mencionados acima. A extensão de comando Run em si não é afetada pela transição para o Python 3.8.
Se você estiver implantando uma nova instância e precisar definir uma extensão no momento do provisionamento, use os dados do usuário cloud-init para instalar os pacotes mencionados acima.
Por exemplo, para Python 2.7:
# create cloud-init config cat > cloudinitConfig.json <<EOF #cloud-config package_update: true runcmd: - sudo apt update - sudo apt install python-is-python2 EOF # create VM az vm create \ --resource-group <resourceGroupName> \ --name <vmName> \ --image <Ubuntu 20.04 Image URN> \ --admin-username azadmin \ --ssh-key-value "<sshPubKey>" \ --custom-data ./cloudinitConfig.json
Se os administradores de políticas da sua organização determinarem que as extensões não devem ser implantadas em VMs, você poderá desabilitar o suporte a extensões no momento do provisionamento:
API REST
Para desabilitar e habilitar extensões quando você puder implantar uma VM com esta propriedade:
"osProfile": { "allowExtensionOperations": false },
Próximos passos
Consulte Outras alterações do sistema básico desde 18.04 LTS - Python 3 por padrão para obter informações adicionais.