Udostępnij za pośrednictwem


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

Uwaga

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 wymienione rozszerzenie, należy zaktualizować z obsługą języka Python 3.8 , należy zaprzestać korzystania z języka 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 ma wpływ na gotowe, zautomatyzowane wdrażanie niektórych rozszerzeń maszyn wirtualnych z następującymi dwoma warunkami:

  • 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).

Uaktualnienia w miejscu, takie jak uaktualnianie z systemu Ubuntu 18.04 LTS do systemu Ubuntu 20.04 LTS, powinno zachować /usr/bin/python symlink i pozostać bez wpływu.

Rozwiązanie

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 ponownie symlink /usr/bin/python należy przywrócić 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
        },
      

Następne kroki

Aby uzyskać dodatkowe informacje, zobacz Inne zmiany systemu podstawowego od wersji 18.04 LTS — Python 3 .