Partilhar via


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:

  1. 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
  2. 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.
  3. 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
    
  4. 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.