Поделиться через


Проблемы с использованием расширений виртуальных машин в системах виртуальных машин Linux Azure с поддержкой Python 3

Примечание

Корпорация Майкрософт рекомендует пользователям применять Python 3.x в своих системах, если только их рабочим нагрузкам не требуется поддержка Python 2.x. К примерам таких требований относятся устаревшие сценарии администрирования и такие расширения, как Шифрование дисков Azure и Azure Monitor.

Перед установкой Python 2.x в рабочей среде рассмотрите вопрос долгосрочной поддержки Python 2.x, в частности возможности получения обновлений для системы безопасности. По мере того как в продукты (в том числе некоторые из вышеупомянутых расширений) добавляется поддержка Python 3.8, следует прекращать использование Python 2.x.

Некоторые дистрибутивы Linux перешли на Python 3.8, и из них была полностью удалена устаревшая точка входа /usr/bin/python для Python. Этот переход влияет на готовое автоматизированное развертывание некоторых расширений для виртуальных машин, отвечающих двум условиям:

  • расширения, переход которых на поддержку Python 3.x еще не завершен;
  • расширения, использующие устаревшую точку входа /usr/bin/python.

Пользователи дистрибутивов Linux, которые перешли на Python 3.x, должны гарантировать наличие устаревшей точки доступа /usr/bin/python, прежде чем пытаться развернуть эти расширения на своих виртуальных машинах. В противном случае развертывание расширения может завершиться ошибкой.

  • Это касается таких поддерживаемых дистрибутивов Linux, как Ubuntu Server 20.04 LTS и Ubuntu Pro 20.04 LTS.

  • К затрагиваемым расширениям виртуальных машин относятся Шифрование дисков Azure, Анализ журналов, Доступ к виртуальным машинам (используется для сброса паролей) и Диагностика гостей (используется для дополнительных счетчиков производительности).

При обновлении на месте, например с Ubuntu 18.04 LTS до Ubuntu 20.04 LTS, следует сохранить символьную ссылку /usr/bin/python, чтобы избежать этой проблемы.

Решение

Перед развертыванием расширений в известных сценариях, описанных ранее в сводке, следует изучить изложенные ниже общие рекомендации.

  1. Перед развертыванием расширения восстановите символьную ссылку /usr/bin/python с помощью метода, предоставленного поставщиком дистрибутива Linux.

    • Например, для Python 2.7 используйте следующую команду: sudo apt update && sudo apt install python-is-python2
  2. Эта рекомендация предназначена для клиентов Azure и не поддерживается в Azure Stack:

    • Если вы уже развернули экземпляр, в котором проявляется эта проблема, используйте команду “Запустить” в колонке виртуальной машины для выполнения вышеупомянутых команд. Переход на Python 3.8 не влияет на расширение команды Run.
  3. Если вы развертываете новый экземпляр и хотите настроить расширение во время подготовки, используйте данные пользователя 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
    
  4. Если администраторы политик в организации придут к выводу, что расширения не следует развертывать на виртуальных машинах, вы можете отключить поддержку расширений во время подготовки:

    • REST API

      Чтобы отключать и включать расширения, вы можете развернуть виртуальную машину с этим свойством:

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

Дальнейшие действия

Дополнительные сведения см. в статье Другие изменения базовой системы с версии 18.04 LTS — Python 3 по умолчанию.