Delen via


Problemen met het gebruik van VM-extensies in Linux Azure Virtual Machines-systemen met Python 3

Notitie

Microsoft moedigt gebruikers aan python 3.x in hun systemen te gebruiken, tenzij voor uw workload ondersteuning voor Python 2.x is vereist. Voorbeelden van deze vereiste zijn verouderde beheerscripts of extensies zoals Azure Disk Encryption en Azure Monitor.

Voordat u Python 2.x in productie installeert, moet u rekening houden met de kwestie van langetermijnondersteuning van Python 2.x, met name de mogelijkheid om beveiligingsupdates te ontvangen. Als producten, waaronder een aantal van de genoemde extensies, worden bijgewerkt met ondersteuning voor Python 3.8 , moet u het gebruik van Python 2.x stopzetten.

Sommige Linux-distributies zijn overgestapt naar Python 3.8 en hebben het verouderde /usr/bin/python invoerpunt voor Python helemaal verwijderd. Deze overgang is van invloed op de out-of-the-box geautomatiseerde implementatie van bepaalde extensies voor virtuele machines (VM's) met de volgende twee voorwaarden:

  • Extensies die nog steeds worden overgezet naar Ondersteuning voor Python 3.x
  • Extensies die gebruikmaken van het verouderde /usr/bin/python invoerpunt

Linux-distributiegebruikers die zijn overgestapt naar Python 3.x , moeten ervoor zorgen dat het verouderde /usr/bin/python toegangspunt bestaat voordat ze deze extensies op hun VM's implementeren. Anders kan de implementatie van de extensie mislukken.

  • Goedgekeurde Linux-distributies die worden beïnvloed zijn Ubuntu Server 20.04 LTS en Ubuntu Pro 20.04 LTS.

  • De betrokken VM-extensies zijn Onder andere Azure Disk Encryption, Log Analytics, VM-toegang (gebruikt voor wachtwoordherstel) en Gastdiagnose (gebruikt voor aanvullende prestatiemeteritems).

In-place upgrades, zoals een upgrade van Ubuntu 18.04 LTS naar Ubuntu 20.04 LTS, moeten de /usr/bin/python symlink behouden en niet worden beïnvloed.

Oplossing

Houd rekening met deze algemene aanbevelingen voordat u extensies implementeert in de bekende scenario's die eerder zijn beschreven in de Samenvatting:

  1. Voordat u de extensie implementeert, moet u de /usr/bin/python symlink opnieuw voltooien met behulp van de methode van de linux-distributieleverancier.

    • Gebruik bijvoorbeeld voor Python 2.7: sudo apt update && sudo apt install python-is-python2
  2. Deze aanbeveling is voor Azure-klanten en wordt niet ondersteund in Azure Stack:

    • Als u al een exemplaar hebt geïmplementeerd dat dit probleem vertoont, gebruikt u de functionaliteit van de opdracht Uitvoeren op de vm-blade om de hierboven genoemde opdrachten uit te voeren. De opdrachtextensie Uitvoeren zelf wordt niet beïnvloed door de overgang naar Python 3.8.
  3. Als u een nieuw exemplaar implementeert en een extensie moet instellen tijdens het inrichten, gebruikt u cloud-init-gebruikersgegevens om de hierboven genoemde pakketten te installeren.

    Bijvoorbeeld voor 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. Als de beleidsbeheerders van uw organisatie bepalen dat extensies niet moeten worden geïmplementeerd in VM's, kunt u ondersteuning voor extensies uitschakelen tijdens het inrichten:

    • REST-API

      Extensies uitschakelen en inschakelen wanneer u een VM met deze eigenschap kunt implementeren:

        "osProfile": {
          "allowExtensionOperations": false
        },
      

Volgende stappen

Raadpleeg Standaard andere wijzigingen in het basissysteem sinds 18.04 LTS - Python 3 voor meer informatie.