Ekstensi dan fitur mesin virtual untuk Linux

Ekstensi komputer virtual (VM) Azure merupakan aplikasi kecil yang menyediakan konfigurasi pasca-penyebaran dan tugas otomatisasi di Azure VM. Misalnya, jika mesin virtual memerlukan penginstalan perangkat lunak, perlindungan antivirus, atau kemampuan untuk menjalankan skrip di dalamnya, Anda dapat menggunakan ekstensi Mesin Virtual.

Anda dapat menjalankan ekstensi Mesin Virtual Azure dengan menggunakan Azure CLI, PowerShell, template Azure Resource Manager (template ARM), dan portal Microsoft Azure. Anda dapat menggabungkan ekstensi dengan penyebaran Mesin Virtual baru atau menjalankannya pada sistem yang ada.

Artikel ini memberikan gambaran umum tentang ekstensi Mesin Virtual Azure, prasyarat untuk menggunakannya, dan panduan tentang cara mendeteksi, mengelola, dan menghapusnya. Artikel ini memberikan informasi umum karena banyak ekstensi Mesin Virtual tersedia. Masing-masing memiliki konfigurasi yang berpotensi unik dan dokumentasinya sendiri.

Menggunakan kasus dan sampel

Setiap ekstensi Mesin Virtual Azure memiliki kasus penggunaan tertentu. Contoh meliputi:

Selain ekstensi khusus proses, ekstensi Custom Script tersedia untuk komputer virtual Windows dan Linux. Ekstensi Skrip Kustom untuk Linux memungkinkan skrip Bash apa pun dijalankan pada Mesin Virtual. Skrip kustom berguna untuk merancang penyebaran Azure yang memerlukan konfigurasi di luar apa yang dapat disediakan oleh alat Azure asli.

Prasyarat

Agen Linux Azure

Untuk menangani ekstensi pada Mesin Virtual, Anda perlu menginstal Agen Linux Azure. Beberapa ekstensi individual memiliki prasyarat, seperti akses ke sumber daya atau dependensi.

Agen Linux Azure mengelola interaksi antara Mesin Virtual Azure dan pengendali Azure fabric. Agen bertanggung jawab atas banyak aspek fungsional penyebaran dan pengelolaan mesin virtual Azure, termasuk menjalankan ekstensi mesin virtual.

Agen Linux Azure sudah diinstal sebelumnya pada gambar Marketplace Azure. Agen juga dapat dipasang secara manual pada sistem operasi yang didukung.

Agen berjalan di beberapa sistem operasi. Tetapi, kerangka kerja ekstensi memiliki batas untuk sistem operasi yang digunakan ekstensi. Beberapa ekstensi tidak didukung di semua sistem operasi dan mungkin menampilkan kode galat 51 ("OS tidak didukung"). Periksa dokumentasi ekstensi individu untuk dukungan.

Akses jaringan

Paket ekstensi diunduh dari repositori ekstensi Azure Storage. Pengunggahan status ekstensi dikirim ke Azure Storage.

Jika Anda menggunakan versi Agen Linux Azure yang didukung, Anda tidak perlu mengizinkan akses ke Azure Storage di wilayah Mesin Virtual. Anda dapat menggunakan agen untuk mengarahkan komunikasi ke pengendali Azure fabric untuk komunikasi agen. Jika Anda menggunakan versi agen yang tidak didukung, Anda harus mengizinkan akses keluar ke Azure Storage di wilayah tersebut dari mesin virtual.

Penting

Jika Anda telah memblokir akses ke alamat IP privat 168.63.129.16 dengan menggunakan firewall tamu, ekstensi akan gagal meskipun Anda menggunakan versi agen yang didukung atau Anda telah mengonfigurasi akses keluar.

Agen hanya dapat digunakan untuk mengunduh paket ekstensi dan status pelaporan. Misalnya, jika penginstalan ekstensi perlu mengunduh skrip dari GitHub (ekstensi Skrip Kustom) atau memerlukan akses ke Azure Storage (Azure Backup), maka Anda perlu membuka port firewall atau kelompok keamanan jaringan (NSG) tambahan. Ekstensi yang berbeda memiliki persyaratan yang berbeda, karena ekstensi adalah aplikasi yang berdiri sendiri. Untuk ekstensi yang memerlukan akses ke Azure Storage, Anda dapat mengizinkan akses menggunakan tag layanan Azure NSG.

Untuk mengarahkan permintaan lalu lintas agen, Agen Linux Azure memiliki dukungan server proksi. Namun, dukungan server proksi ini tidak menerapkan ekstensi. Anda harus mengonfigurasi setiap ekstensi individual untuk bekerja dengan proksi.

Menemukan ekstensi VM

Banyak ekstensi mesin virtual tersedia untuk digunakan dengan mesin virtual Azure. Untuk melihat daftar lengkap, gunakan az vm extension image list. Contoh berikut mencantumkan semua ekstensi yang tersedia di lokasi westus:

az vm extension image list --location westus --output table

Menjalankan ekstensi VM

Ekstensi Mesin Virtual Azure berjalan di Mesin Virtual yang ada. Hal ini berguna saat Anda perlu membuat perubahan konfigurasi atau memulihkan konektivitas pada Mesin Virtual yang sudah disebarkan. Ekstensi Mesin Virtual juga dapat digabungkan dengan penyebaran template ARM. Dengan menggunakan ekstensi dengan template ARM, Anda dapat menyebarkan dan mengonfigurasi Mesin Virtual Azure tanpa intervensi pasca penyebaran.

Metode berikut dapat digunakan untuk menjalankan ekstensi terhadap mesin virtual yang ada.

Azure CLI

Anda dapat menjalankan ekstensi Mesin Virtual Azure terhadap Mesin Virtual yang ada dengan menggunakan perintah az vm extension set. Contoh berikut menjalankan ekstensi Custom Script terhadap VM bernama myVM dalam grup sumber daya bernama myResourceGroup. Ganti nama grup sumber daya contoh, nama Mesin Virtual, dan skrip yang akan dijalankan (https://raw.githubusercontent.com/me/project/hello.sh) dengan informasi Anda sendiri.

az vm extension set \
  --resource-group myResourceGroup \
  --vm-name myVM \
  --name customScript \
  --publisher Microsoft.Azure.Extensions \
  --settings '{"fileUris": ["https://raw.githubusercontent.com/me/project/hello.sh"],"commandToExecute": "./hello.sh"}'

Saat ekstensi berjalan dengan benar, output-nya mirip dengan contoh berikut:

info:    Executing command vm extension set
+ Looking up the VM "myVM"
+ Installing extension "CustomScript", VM: "mvVM"
info:    vm extension set command OK

Azure PowerShell

Anda dapat menjalankan ekstensi mesin virtual Azure terhadap Mesin Virtual yang ada dengan menggunakan perintah Set-AzVMExtension. Contoh berikut menjalankan ekstensi Custom Script terhadap VM bernama myVM dalam grup sumber daya bernama myResourceGroup. Ganti nama grup sumber daya contoh, nama Mesin Virtual, dan skrip yang akan dijalankan (https://raw.githubusercontent.com/me/project/hello.sh) dengan informasi Anda sendiri.

$Params = @{
    ResourceGroupName  = 'myResourceGroup'
    VMName             = 'myVM'
    Name               = 'CustomScript'
    Publisher          = 'Microsoft.Azure.Extensions'
    ExtensionType      = 'CustomScript'
    TypeHandlerVersion = '2.1'
    Settings          = @{fileUris = @('https://raw.githubusercontent.com/me/project/hello.sh'); commandToExecute = './hello.sh'}
}
Set-AzVMExtension @Params

Saat ekstensi berjalan dengan benar, output-nya mirip dengan contoh berikut:

RequestId IsSuccessStatusCode StatusCode ReasonPhrase
--------- ------------------- ---------- ------------
                         True         OK OK

Portal Azure

Anda dapat menerapkan ekstensi Mesin Virtual ke Mesin Virtual yang ada melalui portal Microsoft Azure. Pilih Mesin Virtual di portal, pilih Ekstensi, lalu pilih Tambahkan. Pilih ekstensi yang Anda inginkan dari daftar ekstensi yang tersedia, dan ikuti petunjuk di wizard.

Gambar berikut menunjukkan penginstalan ekstensi Skrip Kustom untuk Linux dari portal Microsoft Azure:

Screenshot of the dialog for installing the Custom Script extension for Linux.

Templat Azure Resource Manager

Anda dapat menambahkan ekstensi Mesin Virtual ke template ARM dan menjalankannya dengan penyebaran template. Saat Anda menyebarkan ekstensi dengan templat, Anda dapat membuat penyebaran Azure yang dikonfigurasi sepenuhnya.

Misalnya, JSON berikut diambil dari template ARM lengkap yang menyebarkan sekumpulan Mesin Virtual dengan beban yang diseimbangkan dan database Azure SQL, lalu menginstal aplikasi .NET Core di setiap Mesin Virtual. Ekstensi VM mengurus penginstalan perangkat lunak.

{
    "apiVersion": "2015-06-15",
    "type": "extensions",
    "name": "config-app",
    "location": "[resourceGroup().location]",
    "dependsOn": [
    "[concat('Microsoft.Compute/virtualMachines/', concat(variables('vmName'),copyindex()))]"
    ],
    "tags": {
    "displayName": "config-app"
    },
    "properties": {
    "publisher": "Microsoft.Azure.Extensions",
    "type": "CustomScript",
    "typeHandlerVersion": "2.1",
    "autoUpgradeMinorVersion": true,
    "settings": {
        "fileUris": [
        "https://raw.githubusercontent.com/Microsoft/dotnet-core-sample-templates/master/dotnet-core-music-linux/scripts/config-music.sh"
        ]
    },
    "protectedSettings": {
        "commandToExecute": "[concat('sudo sh config-music.sh ',variables('musicStoreSqlName'), ' ', parameters('adminUsername'), ' ', parameters('sqlAdminPassword'))]"
    }
    }
}

Untuk informasi selengkapnya tentang membuat template ARM, lihat Mesin virtual di template Azure Resource Manager.

Membantu mengamankan data ekstensi Mesin Virtual

Saat Anda menjalankan ekstensi Mesin Virtual, Anda mungkin perlu menyertakan informasi sensitif seperti kredensial, nama akun penyimpanan, dan kunci akses. Banyak ekstensi VM menyertakan konfigurasi terlindungi yang mengenkripsi data dan hanya mendekripsinya di dalam VM target. Setiap ekstensi memiliki skema konfigurasi khusus yang dilindungi, dan masing-masing dirinci dalam dokumentasi khusus ekstensi.

Contoh berikut menunjukkan instans ekstensi Custom Script untuk Linux. Perintah untuk menjalankannya mencakup satu set info masuk. Dalam contoh ini, perintah yang akan dijalankan tidak dienkripsi.

{
  "apiVersion": "2015-06-15",
  "type": "extensions",
  "name": "config-app",
  "location": "[resourceGroup().location]",
  "dependsOn": [
    "[concat('Microsoft.Compute/virtualMachines/', concat(variables('vmName'),copyindex()))]"
  ],
  "tags": {
    "displayName": "config-app"
  },
  "properties": {
    "publisher": "Microsoft.Azure.Extensions",
    "type": "CustomScript",
    "typeHandlerVersion": "2.1",
    "autoUpgradeMinorVersion": true,
    "settings": {
      "fileUris": [
        "https://raw.githubusercontent.com/Microsoft/dotnet-core-sample-templates/master/dotnet-core-music-linux/scripts/config-music.sh"
      ],
      "commandToExecute": "[concat('sudo sh config-music.sh ',variables('musicStoreSqlName'), ' ', parameters('adminUsername'), ' ', parameters('sqlAdminPassword'))]"
    }
  }
}

Memindahkan properti commandToExecute ke konfigurasi protected membantu mengamankan string eksekusi, seperti yang ditunjukkan pada contoh berikut:

{
  "apiVersion": "2015-06-15",
  "type": "extensions",
  "name": "config-app",
  "location": "[resourceGroup().location]",
  "dependsOn": [
    "[concat('Microsoft.Compute/virtualMachines/', concat(variables('vmName'),copyindex()))]"
  ],
  "tags": {
    "displayName": "config-app"
  },
  "properties": {
    "publisher": "Microsoft.Azure.Extensions",
    "type": "CustomScript",
    "typeHandlerVersion": "2.1",
    "autoUpgradeMinorVersion": true,
    "settings": {
      "fileUris": [
        "https://raw.githubusercontent.com/Microsoft/dotnet-core-sample-templates/master/dotnet-core-music-linux/scripts/config-music.sh"
      ]
    },
    "protectedSettings": {
      "commandToExecute": "[concat('sudo sh config-music.sh ',variables('musicStoreSqlName'), ' ', parameters('adminUsername'), ' ', parameters('sqlAdminPassword'))]"
    }
  }
}

Cara agen dan ekstensi diperbarui

Agen dan ekstensi memiliki mekanisme pembaruan otomatis yang sama.

Saat pembaruan tersedia dan pembaruan otomatis diaktifkan, pembaruan diinstal pada Mesin Virtual hanya setelah ada perubahan pada ekstensi atau setelah perubahan model Mesin Virtual lainnya, seperti:

  • Disk data
  • Ekstensi
  • Tag Ekstensi
  • Kontainer diagnostik boot
  • Rahasia OS Guest
  • Ukuran komputer virtual
  • Profil jaringan

Penerbit membuat pembaruan tersedia untuk wilayah pada waktu yang berbeda, sehingga Anda mungkin dapat memiliki Mesin Virtual di wilayah yang berbeda pada versi yang berbeda.

Catatan

Beberapa pembaruan mungkin memerlukan aturan firewall tambahan. Lihat Akses jaringan.

Pembaruan agen

Agen Mesin Virtual Linux berisi kode Agen Provisi dan kode penanganan ekstensi dalam satu paket. Kode tidak dapat dipisahkan.

Anda dapat menonaktifkan Agen Provisi jika Anda ingin memprovisikan di Azure menggunakan cloud-init.

Versi agen yang didukung dapat menggunakan pembaruan otomatis. Satu-satunya kode yang dapat diperbarui adalah kode penanganan ekstensi, bukan kode Agen Provisi. Kode Agen Provisi adalah kode yang dijalankan sekali saja.

Kode penanganan ekstensi bertanggung jawab untuk:

  • Berkomunikasi dengan Azure fabric.
  • Menangani operasi ekstensi Mesin Virtual, seperti penginstalan, status pelaporan, memperbarui masing-masing ekstensi, dan menghapus ekstensi. Pembaruan berisi perbaikan keamanan, perbaikan bug, dan peningkatan pada kode penanganan ekstensi.

Saat agen diinstal, daemon induk dibuat. Induk ini kemudian memunculkan proses turunan yang digunakan untuk menangani ekstensi. Jika pembaruan tersedia untuk agen, pembaruan diunduh. Induk menghentikan proses turunan, meningkatkan turunan, lalu menghidupkan ulang turunan. Jika ada masalah dengan pembaruan, proses induk akan menggulung balik ke versi turunan sebelumnya.

Proses induk tidak dapat diperbarui secara otomatis. Induk dapat diperbarui hanya dengan pembaruan paket distribusi.

Untuk memeriksa versi apa yang Anda jalankan, periksa waagent sebagai berikut:

waagent --version

Outputnya mirip dengan contoh berikut:

WALinuxAgent-2.2.45 running on <Linux Distro>
Python: 3.6.9
Goal state agent: 2.7.1.0

Dalam contoh output sebelumnya, induk (atau versi paket yang disebarkan) adalah WALinuxAgent-2.2.45. Nilai Goal state agent adalah versi pembaruan otomatis.

Sebaiknya Anda selalu mengaktifkan pembaruan otomatis untuk agen: AutoUpdate.Enabled=y. Jika Anda tidak mengaktifkan pembaruan otomatis, Anda harus terus memperbarui agen secara manual, dan Anda tidak akan mendapatkan perbaikan bug dan keamanan.

Pembaruan ekstensi

Saat pembaruan ekstensi tersedia dan pembaruan otomatis diaktifkan, setelah perubahan model Mesin Virtual terjadi, Agen Linux Azure mengunduh dan meningkatkan ekstensi.

Pembaruan ekstensi otomatis berupa minor atau perbaikan. Anda dapat memilih ikut atau menolak pembaruan kecil saat Anda memprovisikan ekstensi. Contoh berikut menunjukkan cara meningkatkan versi minor secara otomatis di template ARM dengan menggunakan "autoUpgradeMinorVersion": true,:

    "publisher": "Microsoft.Azure.Extensions",
    "type": "CustomScript",
    "typeHandlerVersion": "2.1",
    "autoUpgradeMinorVersion": true,
    "settings": {
        "fileUris": [
        "https://raw.githubusercontent.com/Microsoft/dotnet-core-sample-templates/master/dotnet-core-music-linux/scripts/config-music.sh"
        ]
    },

Untuk mendapatkan perbaikan bug rilis minor terbaru, sebaiknya Anda selalu memilih pembaruan otomatis dalam penyebaran ekstensi Anda. Anda tidak dapat menolak pembaruan perbaikan yang membawa perbaikan bug keamanan atau kunci.

Jika Anda menonaktifkan pembaruan otomatis atau Anda perlu meningkatkan versi utama, gunakan az vm extension set atau Set-AzVMExtension dan tentukan versi target.

Cara mengidentifikasi pembaruan ekstensi

Mengidentifikasi apakah ekstensi diatur dengan autoUpgradeMinorVersion pada Mesin Virtual

Anda dapat melihat dari model Mesin Virtual jika ekstensi telah disediakan dengan autoUpgradeMinorVersion. Untuk memeriksa, gunakan az vm show dan berikan nama VM dan grup sumber daya sebagai berikut:

az vm show --resource-group myResourceGroup --name myVM

Contoh output berikut menunjukkan bahwa autoUpgradeMinorVersion diatur ke true:

  "resources": [
    {
      "autoUpgradeMinorVersion": true,
      "forceUpdateTag": null,
      "id": "/subscriptions/guid/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/myVM/extensions/customScript",

Mengidentifikasi kapan peristiwa autoUpgradeMinorVersion terjadi

Untuk melihat kapan pembaruan ekstensi terjadi, ulas log agen pada VM di /var/log/waagent.log.

Dalam contoh berikut, VM telah Microsoft.OSTCExtensions.LinuxDiagnostic-2.3.9025 diinstal. Perbaikan tersedia untuk Microsoft.OSTCExtensions.LinuxDiagnostic-2.3.9027.

INFO [Microsoft.OSTCExtensions.LinuxDiagnostic-2.3.9027] Expected handler state: enabled
INFO [Microsoft.OSTCExtensions.LinuxDiagnostic-2.3.9027] Decide which version to use
INFO [Microsoft.OSTCExtensions.LinuxDiagnostic-2.3.9027] Use version: 2.3.9027
INFO [Microsoft.OSTCExtensions.LinuxDiagnostic-2.3.9027] Current handler state is: NotInstalled
INFO [Microsoft.OSTCExtensions.LinuxDiagnostic-2.3.9027] Download extension package
INFO [Microsoft.OSTCExtensions.LinuxDiagnostic-2.3.9027] Unpack extension package
INFO Event: name=Microsoft.OSTCExtensions.LinuxDiagnostic, op=Download, message=Download succeeded
INFO [Microsoft.OSTCExtensions.LinuxDiagnostic-2.3.9027] Initialize extension directory
INFO [Microsoft.OSTCExtensions.LinuxDiagnostic-2.3.9027] Update settings file: 0.settings
INFO [Microsoft.OSTCExtensions.LinuxDiagnostic-2.3.9025] Disable extension.
INFO [Microsoft.OSTCExtensions.LinuxDiagnostic-2.3.9025] Launch command:diagnostic.py -disable
...
INFO Event: name=Microsoft.OSTCExtensions.LinuxDiagnostic, op=Disable, message=Launch command succeeded: diagnostic.py -disable
INFO [Microsoft.OSTCExtensions.LinuxDiagnostic-2.3.9027] Update extension.
INFO [Microsoft.OSTCExtensions.LinuxDiagnostic-2.3.9027] Launch command:diagnostic.py -update
2017/08/14 20:21:57 LinuxAzureDiagnostic started to handle.

Izin agen

Untuk melakukan tugasnya, agen harus dijalankan sebagai root.

Memecahkan masalah ekstensi VM

Setiap ekstensi Mesin Virtual mungkin memiliki langkah pemecahan masalah khusus. Misalnya, saat Anda menggunakan ekstensi Skrip Kustom, Anda dapat menemukan detail eksekusi skrip secara lokal di Mesin Virtual tempat ekstensi dijalankan.

Tindakan pemecahan masalah berikut berlaku untuk semua ekstensi mesin virtual:

  • Untuk memeriksa log Agen Linux Azure, lihat aktivitas saat ekstensi Anda disediakan di /var/log/waagent.log.

  • Periksa log ekstensi untuk detail selengkapnya di /var/log/azure/<extensionName>.

  • Periksa bagian pemecahan masalah dalam dokumentasi khusus ekstensi untuk kode kesalahan, masalah yang diketahui, dan informasi khusus ekstensi lainnya.

  • Lihat pada log sistemnya. Periksa operasi lain yang mungkin mengganggu ekstensi, seperti penginstalan aplikasi lain yang berjalan lama dan memerlukan akses eksklusif ke manajer paket.

Alasan umum untuk kegagalan ekstensi

  • Ekstensi memiliki waktu 20 menit untuk dijalankan. (Pengecualian adalah Skrip Kustom, dan Koki, yang memiliki waktu 90 menit.) Jika penyebaran Anda melebihi waktu ini, penyebaran ditandai sebagai batas waktu. Penyebabnya dapat berupa Mesin Virtual sumber daya rendah, atau konfigurasi Mesin Virtual lain atau tugas pengaktifan menghabiskan banyak sumber daya saat ekstensi mencoba memprovisikan.

  • Prasyarat minimum tidak terpenuhi. Beberapa ekstensi memiliki ketergantungan pada SKU VM, seperti gambar HPC. Ekstensi mungkin memiliki persyaratan akses jaringan tertentu, seperti berkomunikasi dengan Azure Storage atau layanan publik. Contoh lain mungkin akses ke repositori paket, kehabisan ruang disk, atau pembatasan keamanan.

  • Akses manajer paket bersifat eksklusif. Dalam beberapa kasus, konfigurasi Mesin Virtual yang berjalan lama dan penginstalan ekstensi mungkin bertentangan karena keduanya memerlukan akses eksklusif ke manajer paket.

Menampilkan status ekstensi

Setelah ekstensi VM dijalankan terhadap VM, gunakan az vm get-instance-view untuk mengembalikan status ekstensi sebagai berikut:

az vm get-instance-view \
    --resource-group myResourceGroup \
    --name myVM \
    --query "instanceView.extensions"

Outputnya mirip dengan contoh berikut:

  {
    "name": "customScript",
    "statuses": [
      {
        "code": "ProvisioningState/failed/0",
        "displayStatus": "Provisioning failed",
        "level": "Error",
        "message": "Enable failed: failed to execute command: command terminated with exit status=127\n[stdout]\n\n[stderr]\n/bin/sh: 1: ech: not found\n",
        "time": null
      }
    ],
    "substatuses": null,
    "type": "Microsoft.Azure.Extensions.CustomScript",
    "typeHandlerVersion": "2.1.6"
  }

Anda juga dapat menemukan status eksekusi ekstensi di portal Microsoft Azure. Pilih Mesin Virtual, pilih Ekstensi, lalu pilih ekstensi yang diinginkan.

Menjalankan ulang ekstensi VM

Mungkin ada kasus saat ekstensi Mesin Virtual perlu dijalankan kembali. Anda dapat menjalankan ulang ekstensi dengan menghapusnya, lalu menjalankan ulang ekstensi dengan metode eksekusi pilihan Anda.

Untuk menghapus ekstensi, gunakan az vm extension delete sebagai berikut:

az vm extension delete \
    --resource-group myResourceGroup \
    --vm-name myVM \
    --name customScript

Anda juga dapat menghapus ekstensi di portal Azure:

  1. Pilih VM.
  2. Pilih Ekstensi.
  3. Pilih ekstensi.
  4. Pilih Copot pemasangan.

Referensi ekstensi VM umum

Nama ekstensi Deskripsi
Ekstensi Custom Script untuk Linux Jalankan skrip terhadap mesin virtual Azure.
Ekstensi VMAccess Dapatkan kembali akses ke mesin virtual Azure. Anda juga dapat menggunakannya untuk mengelola pengguna dan kredensial.
Ekstensi Diagnostik Azure Mengelola Diagnostik Azure.

Langkah berikutnya

Untuk informasi selengkapnya tentang ekstensi Mesin Virtual, lihat Ekstensi dan fitur mesin virtual Azure.