Bagikan melalui


Masalah saat menggunakan ekstensi VM di sistem Azure Virtual Machines Linux yang mengaktifkan Python 3

Catatan

Microsoft mendorong pengguna untuk mengadopsi Python 3.x dalam sistem mereka kecuali beban kerja Anda memerlukan dukungan Python 2.x. Contoh persyaratan ini mungkin mencakup skrip administrasi lama, atau ekstensi seperti Azure Disk Encryption dan Azure Monitor.

Sebelum memasang Python 2.x dalam produksi, pertimbangkan pertanyaan tentang dukungan jangka panjang Python 2.x, terutama kemampuan mereka untuk menerima pembaruan keamanan. Sebagai produk, termasuk beberapa ekstensi yang disebutkan, pembaruan dengan dukungan Python 3.8, Anda harus menghentikan penggunaan Python 2.x.

Beberapa distribusi Linux telah beralih ke Python 3.8 dan menghapus entrypoint warisan /usr/bin/python untuk semua Python. Transisi ini berdampak pada penyebaran otomatis ekstensi komputer virtual (VM) tertentu yang siap pakai dengan dua kondisi berikut:

  • Ekstensi yang masih bertransisi ke dukungan Python 3.x
  • Ekstensi yang menggunakan entrypoint warisan /usr/bin/python

Pengguna distribusi Linux yang telah beralih ke Python 3.x harus memastikan /usr/bin/python entripoint warisan ada sebelum mencoba untuk menyebarkan ekstensi tersebut ke VM mereka. Jika tidak, penyebaran ekstensi mungkin gagal.

  • Distribusi Linux yang didukung yang terpengaruh termasuk Ubuntu Server 20.04 LTS dan Ubuntu Pro 20.04 LTS.

  • Ekstensi VM yang terpengaruh termasuk Azure Disk Encryption, Analitik Log, Akses VM (digunakan untuk Atur Ulang Sandi), dan Diagnostik Tamu (digunakan untuk penghitung kinerja tambahan).

Peningkatan di tempat, seperti peningkatan dari Ubuntu 18.04 LTS ke Ubuntu 20.04 LTS, harus mempertahankan symlink /usr/bin/python, dan tetap tidak terpengaruh.

Resolusi

Pertimbangkan rekomendasi umum ini sebelum menerapkan ekstensi dalam skenario yang diketahui terpengaruh yang dijelaskan sebelumnya dalam Ringkasan:

  1. Sebelum menyebarkan ekstensi, kembalikan symlink /usr/bin/python dengan menggunakan metode yang disediakan vendor distribusi Linux.

    • Misalnya, untuk Python 2.7, gunakan: sudo apt update && sudo apt install python-is-python2
  2. Rekomendasi ini untuk pelanggan Azure dan tidak didukung di Azure Stack:

    • Jika Anda telah menyebarkan instans yang menunjukkan masalah ini, gunakan fungsi perintah Jalankan di bilah VM untuk menjalankan perintah yang disebutkan di atas. Ekstensi perintah Jalankan itu sendiri tidak terpengaruh oleh transisi ke Python 3.8.
  3. Jika Anda menyebarkan instans baru, dan perlu mengatur ekstensi pada waktu provisi, gunakan data pengguna cloud-init untuk menginstal paket yang disebutkan di atas.

    Misalnya, untuk 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. Jika administrator kebijakan organisasi menentukan bahwa ekstensi tidak boleh digunakan di VM, Anda dapat menonaktifkan dukungan ekstensi pada waktu penyediaan:

    • REST API

      Untuk menonaktifkan dan mengaktifkan ekstensi saat Anda dapat menerapkan VM dengan properti ini:

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

Langkah berikutnya

Silakan lihat Perubahan sistem dasar lainnya sejak 18.04 LTS - Python 3 secara default untuk informasi tambahan.