Freigeben über


Probleme bei der Verwendung von VM-Erweiterungen in Python 3-fähigen Linux-Systemen mit Azure Virtual Machines

Hinweis

Microsoft ermutigt Benutzer, in ihren Systemen Python 3.x einzuführen, sofern die Workloads keine Unterstützung von Python 2.x erfordern. Beispiele für diese Anforderung sind veraltete Verwaltungsskripts oder Erweiterungen wie Azure Disk Encryption und Azure Monitor.

Vor der Installation von Python 2.x in Produktionsumgebungen sollten Sie die Frage der langfristigen Unterstützung von Python 2.x untersuchen. Dies gilt insbesondere für die Möglichkeit, Sicherheitsupdates zu erhalten. Da Updates einiger Produkte, einschließlich einiger der erwähnten Erweiterungen, die Unterstützung für Python 3.8 beinhalten, sollten Sie Ihre Verwendung von Python 2.x einstellen.

Einige Linux-Distributionen wurden auf Python 3.8 umgestellt, und der Legacy-Einstiegspunkt /usr/bin/python für Python wurde vollständig entfernt. Diese Umstellung wirkt sich auf die standardmäßige automatisierte Bereitstellung bestimmter VM-Erweiterungen mit diesen beiden Bedingungen aus:

  • Erweiterungen, bei denen die Umstellung auf Python 3.x noch durchgeführt wird
  • Erweiterungen, die den Legacy-Einstiegspunkt /usr/bin/python verwenden

Benutzer von Linux-Distributionen, die auf Python 3.x umgestellt haben, müssen sicherstellen, dass der Legacy-Einstiegspunkt /usr/bin/python vorhanden ist, bevor sie diese Erweiterungen auf ihren VMs bereitstellen. Andernfalls tritt bei der Bereitstellung der Erweiterung möglicherweise ein Fehler auf.

  • Zu den betroffenen unterstützten Linux-Distributionen gehören Ubuntu Server 20.04 LTS und Ubuntu Pro 20.04 LTS.

  • Zu den betroffenen VM-Erweiterungen gehören Azure Disk Encryption, Log Analytics, VM Access (für die Kennwortzurücksetzung) und Guest Diagnostics (für zusätzliche Leistungsindikatoren).

Direkte Upgrades, z. B. ein Upgrade von Ubuntu 18.04 LTS auf Ubuntu 20.04 LTS, sollten den Symlink /usr/bin/python beibehalten und sind daher nicht weiter betroffen.

Lösung

Beachten Sie diese allgemeinen Empfehlungen, bevor Sie Erweiterungen in den zuvor in der Zusammenfassung beschriebenen betroffenen Szenarien bereitstellen:

  1. Stellen Sie vor dem Bereitstellen der Erweiterung den Symlink /usr/bin/python mithilfe der vom Anbieter der Linux-Distribution bereitgestellten Methode wieder her.

    • Beispiel für Python 2.7: sudo apt update && sudo apt install python-is-python2
  2. Diese Empfehlung gilt für Azure-Kunden und wird in Azure Stack nicht unterstützt:

    • Wenn Sie bereits eine Instanz bereitgestellt haben, in der dieses Problem auftritt, verwenden Sie die Funktion Befehl ausführen auf dem VM-Blatt, um die oben genannten Befehle auszuführen. Die Befehlserweiterung zum Ausführen von Befehlen ist vom Übergang zu Python 3.8 nicht betroffen.
  3. Wenn Sie eine neue Instanz bereitstellen und während der Bereitstellung eine Erweiterung festlegen müssen, verwenden Sie cloud-init-Benutzerdaten, um die oben erwähnten Pakete zu installieren.

    Beispiel für 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. Wenn die Richtlinienadministratoren Ihrer Organisation festlegen, dass Erweiterungen nicht auf VMs bereitgestellt werden sollen, können Sie die Erweiterungsunterstützung während der Bereitstellung deaktivieren:

    • REST-API

      So deaktivieren und aktivieren Sie Erweiterungen, wenn Sie eine VM mit dieser Eigenschaft bereitstellen können

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

Nächste Schritte

Weitere Informationen finden Sie unter Other base system changes since 18.04 LTS – Python 3 by default (Andere grundlegende Systemänderungen seit 18.04 LTS – Python 3 als Standard).