Problemas al usar extensiones de VM en los sistemas de Azure Virtual Machines para Linux habilitados para Python 3
Nota
Microsoft recomienda a los usuarios adoptar Python 3.x en sus sistemas a menos que la carga de trabajo requiera compatibilidad con Python 2.x. Algunos ejemplos de este requisito pueden incluir scripts de administración heredados o extensiones como Azure Disk Encryption y Azure Monitor.
Antes de instalar Python 2.x en producción, tenga en cuenta la cuestión de la compatibilidad a largo plazo con Python 2.x, especialmente su capacidad para recibir actualizaciones de seguridad. Respecto a los productos, incluida parte de la extensión mencionada, actualización con compatibilidad para Python 3.8, debe dejar de usar Python 2.x.
Algunas distribuciones de Linux han pasado a Python 3.8 y han quitado el punto de entrada de /usr/bin/python
heredado para Python por completo. Esta transición afecta a la implementación automatizada e integrada de ciertas extensiones de máquina virtual (VM) con estas dos condiciones:
- Extensiones en transición a la compatibilidad con Python 3.x
- Extensiones que usan el punto de entrada
/usr/bin/python
heredado
Los usuarios de distribución de Linux que han pasado a Python 3.x deben asegurarse de que el punto de entrada /usr/bin/python
heredado exista antes de intentar implementar esas extensiones en sus VM. De lo contrario, podría producirse un error en la implementación de la extensión.
Las distribuciones de Linux aprobadas que se ven afectadas incluyen Ubuntu Server 20.04 LTS y Ubuntu Pro 20.04 LTS.
Entre las extensiones de VM afectadas se incluyen Azure Disk Encryption, Log Analytics, VM Access (Acceso de VM), que se usa para el restablecimiento de contraseña, y Guest Diagnostics (Diagnóstico de invitado), que se usa para otros contadores de rendimiento.
Las actualizaciones locales, como la actualización de Ubuntu 18.04 LTS a Ubuntu 20.04 LTS, deben conservar el vínculo simbólico de /usr/bin/python
y no deben verse afectadas.
Solución
Tenga en cuenta estas recomendaciones generales antes de implementar extensiones en los escenarios afectados conocidos que se han descrito anteriormente en el Resumen:
Antes de implementar la extensión, restablezca el vínculo simbólico
/usr/bin/python
mediante el método de distribución de Linux proporcionado por el proveedor.- Por ejemplo, para Python 2.7, use:
sudo apt update && sudo apt install python-is-python2
- Por ejemplo, para Python 2.7, use:
Esta recomendación es para los clientes de Azure y no se admite en Azure Stack:
- Si ya ha implementado una instancia que presenta este problema, use la funcionalidad del comando Ejecutar en la hoja de VM para ejecutar los comandos mencionados anteriormente. La propia extensión del comando de ejecución no se ve afectada por la transición a Python 3.8.
Si va a implementar una nueva instancia y necesita establecer una extensión en el momento del aprovisionamiento, use los datos de usuario de cloud-init para instalar los paquetes mencionados anteriormente.
Por ejemplo, para 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
si los administradores de directivas de la organización determinan que las extensiones no se deben implementar en VM, puede deshabilitar la compatibilidad con las extensiones en el momento del aprovisionamiento:
API DE REST
Para deshabilitar y habilitar las extensiones cuando se puede implementar una VM con esta propiedad:
"osProfile": { "allowExtensionOperations": false },
Pasos siguientes
Consulte otros cambios del sistema base desde 18.04 LTS-Python 3 predeterminado para obtener información adicional.