在已啟用 Python 3 的 Linux Azure 虛擬機器系統中使用 VM 延伸模組的問題
注意
Microsoft 鼓勵使用者在其系統中採用 Python 3.x,除非您的 工作負載需要 Python 2.x 支援。 此需求的範例可能包括舊版系統管理指令碼,或 Azure 磁碟加密和 Azure 監視器等延伸模組。
在 生產環境中安裝 Python 2.x 之前,請考慮 Python 2.x 的長期支援問題,特別是其接收安全性更新的能力。 產品,包括一些所述的延伸模組,使用 Python 3.8 支援進行更新,您應該停止使用 Python 2.x。
某些 Linux 發行版本已轉換成 Python 3.8,並已完全移除 Python 的舊版 /usr/bin/python
輸入點。 此轉換會影響具有下列兩個條件的特定虛擬機器 (VM) 延伸模組的現用自動化部署:
- 仍在轉換至 Python 3.x 支援的延伸模組
- 使用舊版
/usr/bin/python
進入點的延伸模組
已轉換至 Python 3.x 的 Linux 發行版本使用者必須確保舊版 /usr/bin/python
進入點存在,然後再嘗試將這些延伸模組部署至其 VM。 否則,延伸模組部署可能會失敗。
受影響的已背書 Linux 發行版包括 Ubuntu Server 20.04 LTS 和 Ubuntu Pro 20.04 LTS。
受影響的 VM 延伸模組包括 Azure 磁碟加密、Log Analytics、VM 存取 (用於密碼重設),以及客體診斷 (用於其他效能計數器)。
就地升級,例如從 Ubuntu 18.04 LTS 升級至 Ubuntu 20.04 LTS,應該保留 /usr/bin/python
符號連結,而且不會受到影響。
解決方法
在先前在摘要中所述的已知受影響案例中部署延伸模組之前,請先考量下列一般建議:
在部署延伸模組之前,請先使用Linux散發廠商提供的方法,恢復
/usr/bin/python
符號連結。- 例如,針對 Python 2.7,請使用:
sudo apt update && sudo apt install python-is-python2
- 例如,針對 Python 2.7,請使用:
此建議適用於 Azure 客戶,而且 Azure Stack 不支援:
- 如果您已部署顯示此問題的執行個體,請使用 VM 刀鋒視窗中的「執行命令」功能來執行上述命令。 執行命令延伸模組本身不會受到轉換至 Python 3.8 的影響。
如果您要部署新的執行個體,而且需要在佈建階段設定延伸模組,請使用 cloud-init 使用者資料來安裝上述套件。
例如,針對 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
如果您的組織原則管理員判斷不應該在 VM 中部署延伸模組,您可以在佈建階段停用延伸模組支援:
REST API
若要在您可以使用此屬性部署 VM 時停用並啟用延伸模組:
"osProfile": { "allowExtensionOperations": false },
下一步
如需其他資訊,請參閱自 18.04 LTS - Python 3 以來的其他基底系統變更。