Problemas ao usar extensões de VM em sistemas de máquinas virtuais Linux do Azure habilitadas para Python 3
Observação
A Microsoft incentiva os usuários a adotarem o Python 3.x em seus sistemas, a menos que sua carga de trabalho exija suporte a Python 2.x. Exemplos desse requisito podem incluir scripts de administração herdados ou extensões como Azure Disk Encryption e Azure Monitor.
Antes de instalar o Python 2.x em produção, considere a questão do suporte a longo prazo do Python 2.x, particularmente sua capacidade de receber atualizações de segurança. Como produtos, incluindo parte da extensão mencionada, atualização com suporte a Python 3.8, você deve descontinuar o uso do Python 2.x.
Algumas distribuições do Linux fizeram e transição para o Python 3.8 e removeram completamente o ponto de entrada herdado /usr/bin/python
para o Python. Essa transição afeta a implantação automatizada e pronta para uso de determinadas extensões de VM (máquina virtual) com estas duas condições:
- Extensões que ainda estão em transição para o suporte do Python 3.x
- Extensões que usam o ponto de entrada herdado
/usr/bin/python
Os usuários de distribuição do 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 tentarem implantar essas extensões em suas VMs. Caso contrário, a implantação da extensão poderá falhar.
As distribuições endossadas do Linux 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 Azure Disk Encryption, Log Analytics, Acesso à VM (usado para redefinição de senha) e Diagnósticos de convidado (usados para contadores de desempenho adicionais).
As 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
symlink 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 symlink
/usr/bin/python
usando o método fornecido pelo fornecedor de distribuição do 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á tiver implantado uma instância que exibe esse problema, use a funcionalidade Executar comando na folha da VM para executar os comandos mencionados acima. A extensão Executar comando 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 tempo de provisionamento, use dados de usuário de cloud-init para instalar os pacotes mencionados acima.
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ítica da sua organização determinarem que as extensões não devem ser implantadas nas VMs, você poderá desabilitar o suporte à extensão 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óximas etapas
Consulte Outras alterações de sistema base desde 18.04 LTS – Python 3 por padrão para obter informações adicionais.