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:
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
- Na przykład w przypadku języka Python 2.7 użyj:
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.
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
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 .