Udostępnij przez


Problemy z używaniem rozszerzeń maszyn wirtualnych w systemach Azure Virtual Machines z obsługą języka Python w wersji 3

Uwaga / Notatka

Firma Microsoft zachęca użytkowników do wdrażania języka Python 3.x w swoich systemach, chyba że obciążenie wymaga obsługi języka Python 2.x . Przykłady tego wymagania mogą obejmować starsze skrypty administracyjne lub rozszerzenia, takie jak Azure Disk Encryption i Azure Monitor.

Przed zainstalowaniem środowiska Python 2.x w środowisku produkcyjnym należy wziąć pod uwagę kwestię długoterminowego wsparcia języka Python 2.x , szczególnie możliwość otrzymywania aktualizacji zabezpieczeń. Ponieważ produkty, w tym niektóre z wymienionych rozszerzeń, są aktualizowane z obsługą Python 3.8, powinieneś zaprzestać używania Python 2.x.

Niektóre dystrybucje systemu Linux przeszły do języka Python 3.8 i całkowicie usunęły starszy /usr/bin/python punkt wejścia dla języka Python. To przejście wpływa na standardowe, zautomatyzowane wdrażanie niektórych rozszerzeń maszyn wirtualnych przy spełnieniu dwóch warunków:

  • Rozszerzenia, które nadal przechodzą do obsługi języka Python 3.x
  • Rozszerzenia korzystające ze starszego /usr/bin/python punktu wejścia

Użytkownicy dystrybucji systemu Linux, którzy przeszli do środowiska Python 3.x , muszą upewnić się, że starszy /usr/bin/python punkt wejścia istnieje przed podjęciem próby wdrożenia tych rozszerzeń na maszynach wirtualnych. W przeciwnym razie wdrożenie rozszerzenia może zakończyć się niepowodzeniem.

  • Zatwierdzone dystrybucje systemu Linux, których dotyczy problem, obejmują systemy Ubuntu Server 20.04 LTS i Ubuntu Pro 20.04 LTS.

  • Rozszerzenia maszyn wirtualnych, których dotyczy problem, obejmują usługę Azure Disk Encryption, usługę Log Analytics, dostęp do maszyny wirtualnej (używany do resetowania haseł) i diagnostykę gościa (używaną do dodatkowych liczników wydajności).

Aktualizacje na miejscu, takie jak przesiadka z systemu Ubuntu 18.04 LTS na system Ubuntu 20.04 LTS, powinny zachować /usr/bin/python symlink i pozostać niezmienione.

Uwaga / Notatka

Wypróbuj pomoc maszyny wirtualnej, aby uzyskać szybszą diagnostykę. Zalecamy uruchomienie asysty maszyny wirtualnej dla systemu Windows lub asystenta maszyny wirtualnej dla systemu Linux. Te narzędzia diagnostyczne oparte na skryptach ułatwiają identyfikowanie typowych problemów, które mają wpływ na agenta gościa maszyny wirtualnej platformy Azure i ogólną kondycję maszyny wirtualnej.

Jeśli występują problemy z wydajnością maszyn wirtualnych, przed skontaktowaniem się z pomocą techniczną uruchom te narzędzia.

Rezolucja

Przed wdrożeniem rozszerzeń w znanych scenariuszach opisanych wcześniej w podsumowaniu należy wziąć pod uwagę te ogólne zalecenia:

  1. Przed wdrożeniem rozszerzenia należy przywrócić symlink /usr/bin/python przy użyciu metody dostarczonej przez dostawcę dystrybucji systemu Linux.

    • Na przykład w przypadku języka Python 2.7 użyj: sudo apt update && sudo apt install python-is-python2
  2. To zalecenie dotyczy klientów platformy Azure i nie jest obsługiwane w usłudze Azure Stack:

    • Jeśli już wdrożono wystąpienie, które wykazuje ten problem, użyj funkcji Uruchom polecenie w bloku maszyny wirtualnej, aby uruchomić polecenia wymienione powyżej. Samo rozszerzenie Uruchom polecenie nie ma wpływu na przejście do języka Python 3.8.
  3. Jeśli wdrażasz nowe wystąpienie i musisz ustawić rozszerzenie w czasie aprowizacji, użyj danych użytkownika cloud-init , aby zainstalować pakiety wymienione powyżej.

    Na przykład w przypadku języka 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. Jeśli administratorzy zasad organizacji określają, że rozszerzenia nie powinny być wdrażane na maszynach wirtualnych, możesz wyłączyć obsługę rozszerzeń w czasie aprowizacji:

    • interfejs API REST

      Aby wyłączyć i włączyć rozszerzenia, gdy można wdrożyć maszynę wirtualną przy użyciu tej właściwości:

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

Dalsze kroki

Zobacz Inne zmiany w systemie podstawowym od wersji 18.04 LTS - domyślnie Python 3, aby uzyskać dodatkowe informacje.