Informasi untuk distribusi yang didukung dan tidak didukung komunitas

Berlaku untuk: ✔️ VM Linux ✔️ Set skala fleksibel

Platform Azure SLA berlaku untuk mesin virtual yang menjalankan OS Linux hanya ketika salah satu distribusi yang didukung digunakan. Untuk distribusi yang didukung ini, gambar Linux sebelum konfigurasi disediakan di Azure Marketplace.

Distribusi yang lainnya, yakni yang bukan Marketplace Azure, berjalan di Azure dengan sejumlah prasyarat. Artikel ini tidak bisa komprehensif, karena setiap distribusi berbeda. Bahkan jika Anda memenuhi semua kriteria di bawah ini, Anda mungkin perlu secara signifikan mengubah sistem Linux Anda agar dapat berjalan dengan baik.

Artikel ini berfokus pada panduan umum untuk menjalankan distribusi Linux Anda di Azure.

Catatan Instalasi Linux Umum

  1. Format hard disk virtual Hyper-V (VHDX) tidak didukung di Azure, hanya mendukung VHD tetap. Anda dapat mengonversi disk ke format VHD menggunakan Hyper-V Manager atau cmdlet Convert-VHD. Jika Anda menggunakan VirtualBox, pilih Ukuran tetap daripada default (dialokasikan secara dinamis) saat membuat disk.

  2. Azure mendukung Mesin virtual Gen1 (boot BIOS) & Gen2 (boot UEFI).

  3. Ukuran maksimum yang diperbolehkan untuk VHD adalah 1.023 GB.

  4. Saat menginstal sistem Linux, kami sarankan Anda menggunakan partisi standar, bukan Logical Volume Manager (LVM) yang merupakan default untuk banyak instalasi. Menggunakan partisi standar akan menghindari konflik nama LVM dengan VM kloning, terutama jika disk OS pernah dilampirkan ke VM identik lainnya untuk pemecahan masalah. LVM atau RAID dapat digunakan pada disk data jika diinginkan.

  5. Dukungan kernel untuk memasang sistem file UDF diperlukan. Pada boot pertama di Azure konfigurasi penyediaan diteruskan ke Linux VM dengan menggunakan media berformat UDF yang melekat pada tamu. Agen Linux Azure harus memasang sistem file UDF untuk membaca konfigurasinya dan menyediakan VM.

  6. Versi kernel Linux yang lebih lama dari 2.6.37 tidak mendukung NUMA pada Hyper-V dengan ukuran VM yang lebih besar. Masalah ini terutama berdampak pada distribusi yang lebih lama menggunakan kernel Red Hat 2.6.32 hulu, dan diperbaiki di Red Hat Enterprise Linux (RHEL) 6.6 (kernel-2.6.32-504). Sistem yang menjalankan kernel kustom yang lebih lama dari 2.6.37, atau kernel berbasis RHEL yang lebih tua dari 2.6.32-504 harus mengatur parameter boot numa=off pada baris perintah kernel di grub.conf. Untuk informasi selengkapnya, lihat Red Hat KB 436883.

  7. Jangan mengonfigurasi partisi swap pada disk OS. Agen Linux dapat dikonfigurasi untuk membuat file swap pada disk sumber daya sementara, seperti yang dijelaskan dalam langkah-langkah berikut.

  8. Semua VHD di Azure harus memiliki ukuran virtual yang selaras dengan 1 MB (1024 × 1024 byte). Saat mengonversi dari disk mentah ke VHD, Anda harus memastikan bahwa ukuran disk mentah adalah kelipatan 1MB sebelum konversi, sebagaimana dijelaskan dalam langkah berikut.

  9. Gunakan versi distribusi, paket, dan perangkat lunak terbaru.

  10. Hapus pengguna dan akun sistem, kunci publik, data sensitif, perangkat lunak dan aplikasi yang tidak perlu.

Menginstal modul kernel tanpa Hyper-V

Azure berjalan pada hypervisor Hyper-V, sehingga Linux memerlukan modul kernel tertentu untuk dijalankan di Azure. Jika Anda memiliki VM yang dibuat di luar Hyper-V, penginstal Linux mungkin tidak menyertakan driver untuk Hyper-V dalam ramdisk awal (initrd atau initramfs), kecuali VM mendeteksi bahwa itu berjalan pada lingkungan Hyper-V. Saat menggunakan sistem virtualisasi yang berbeda (seperti VirtualBox, KVM, dan sebagainya) untuk menyiapkan gambar Linux Anda, Anda mungkin perlu membangun kembali initrd sehingga setidaknya modul kernel hv_vmbus dan hv_storvsc tersedia pada ramdisk awal. Masalah yang diketahui ini untuk sistem yang berdasarkan pada distribusi Red Hat hulu, dan mungkin yang lain.

Mekanisme untuk membangun kembali gambar initrd atau initramfs dapat bervariasi tergantung pada distribusi. Konsultasikan dokumentasi atau dukungan distribusi Anda untuk prosedur yang tepat. Berikut adalah salah satu contoh untuk membangun kembali initrd dengan menggunakan utilitas mkinitrd:

  1. Cadangkan gambar initrd yang ada:

    cd /boot
    sudo cp initrd-`uname -r`.img  initrd-`uname -r`.img.bak
    
  2. Bangun kembali initrd dengan modul kernel hv_vmbus dan hv_storvsc:

    sudo mkinitrd --preload=hv_storvsc --preload=hv_vmbus -v -f initrd-`uname -r`.img `uname -r`
    

Mengubah ukuran VHD

Semua VHD di Azure harus memiliki ukuran virtual yang selaras dengan 1MB. Biasanya, VHD yang dibuat menggunakan Hyper-V diselaraskan dengan benar. Jika VHD tidak diselaraskan dengan benar, Anda mungkin akan menerima pesan kesalahan yang mirip dengan yang berikut ini ketika Anda mencoba membuat gambar dari VHD Anda.

The VHD http:\//\<mystorageaccount>.blob.core.windows.net/vhds/MyLinuxVM.vhd has an unsupported virtual size of 21475270656 bytes. The size must be a whole number (in MBs).

Dalam hal ini, mengubah ukuran VM menggunakan konsol Hyper-V Manager atau cmdlet Resize-VHD PowerShell. Jika Anda tidak berjalan di lingkungan Windows, sebaiknya gunakan qemu-img untuk mengonversi (jika diperlukan) dan mengubah ukuran VHD.

Catatan

Ada bug yang diketahui di qemu-img versi >=2.2.1 yang menghasilkan format VHD yang tidak benar. Masalah telah diperbaiki di QEMU 2.6. Sebaiknya gunakan qemu-img 2.2.0 atau lebih rendah, atau 2.6 atau yang lebih tinggi.

  1. Mengubah ukuran VHD secara langsung menggunakan alat seperti qemu-img atau vbox-manage dapat mengakibatkan VHD yang tidak dapat diubah. Sebaiknya konversi VHD terlebih dahulu ke image disk RAW. Jika gambar VM dibuat sebagai image disk RAW (default untuk beberapa hypervisor seperti KVM), maka Anda dapat melewati langkah ini.

    qemu-img convert -f vpc -O raw MyLinuxVM.vhd MyLinuxVM.raw
    
  2. Hitung ukuran gambar disk yang diperlukan sehingga ukuran virtual diratakan ke 1 MB. Skrip bash shell berikut qemu-img info ini digunakan untuk menentukan ukuran virtual image disk, lalu menghitung ukuran ke 1 MB berikutnya.

    rawdisk="MyLinuxVM.raw"
    vhddisk="MyLinuxVM.vhd"
    
    MB=$((1024*1024))
    size=$(qemu-img info -f raw --output json "$rawdisk" | \
    gawk 'match($0, /"virtual-size": ([0-9]+),/, val) {print val[1]}')
    
    rounded_size=$(((($size+$MB-1)/$MB)*$MB))
    
    echo "Rounded Size = $rounded_size"
    
  3. Mengubah ukuran disk mentah menggunakan set $rounded_size di atas.

    qemu-img resize MyLinuxVM.raw $rounded_size
    
  4. Sekarang, konversikan kembali disk RAW ke VHD ukuran tetap.

    qemu-img convert -f raw -o subformat=fixed,force_size -O vpc MyLinuxVM.raw MyLinuxVM.vhd
    

    Atau, dengan versi qemu sebelum 2.6, hapus force_size opsi .

    qemu-img convert -f raw -o subformat=fixed -O vpc MyLinuxVM.raw MyLinuxVM.vhd
    

Persyaratan Kernel Linux

Driver Linux Integration Services (LIS) untuk Hyper-V dan Azure dikontribusikan langsung ke kernel Linux hulu. Banyak distribusi yang mencakup versi kernel Linux baru-baru ini (seperti 3.x) telah tersedia driver ini, atau menyediakan versi backported driver ini dengan kernel mereka. Driver ini terus diperbarui di kernel hulu dengan perbaikan dan fitur baru, jadi jika memungkinkan kami sarankan untuk menjalankan distribusi yang didukung yang mencakup perbaikan dan pembaruan ini.

Jika Anda menjalankan varian Red Hat Enterprise Linux versi 6.0 hingga 6.3, maka Anda harus menginstal driver LIS terbaru untuk Hyper-V. Dimulai dengan RHEL 6.4+ (dan turunan) driver LIS sudah disertakan dengan kernel dan jadi tidak ada paket instalasi tambahan yang diperlukan.

Jika diperlukan kernel kustom, kami merekomendasikan versi kernel terbaru (seperti 3.8+). Untuk distribusi atau vendor yang mempertahankan kernel mereka sendiri, Anda harus secara teratur mendukung driver LIS dari kernel hulu ke kernel kustom Anda. Bahkan jika Anda sudah menjalankan versi kernel yang relatif baru, kami sangat menyarankan untuk melacak perbaikan hulu pada driver LIS dan mendukungnya sesuai kebutuhan. Lokasi file sumber driver LIS ditentukan dalam file MAINTAINERS di pohon sumber kernel Linux:

    F:    arch/x86/include/asm/mshyperv.h
    F:    arch/x86/include/uapi/asm/hyperv.h
    F:    arch/x86/kernel/cpu/mshyperv.c
    F:    drivers/hid/hid-hyperv.c
    F:    drivers/hv/
    F:    drivers/input/serio/hyperv-keyboard.c
    F:    drivers/net/hyperv/
    F:    drivers/scsi/storvsc_drv.c
    F:    drivers/video/fbdev/hyperv_fb.c
    F:    include/linux/hyperv.h
    F:    tools/hv/

Tambalan berikut harus disertakan dalam kernel. Daftar ini tidak bisa lengkap untuk semua distribusi.

Azure Linux Agent

Agen Linux Azurewaagent memprovisikan mesin virtual Linux di Azure. Anda bisa mendapatkan versi terbaru, masalah file, atau mengirimkan permintaan tarik di repo Linux Agent GitHub.

  • Agen Linux dirilis di bawah lisensi Apache 2.0. Banyak distribusi sudah menyediakan RPM atau .deb paket untuk agen, dan paket-paket ini dapat dengan mudah diinstal dan diperbarui.
  • Azure Linux Agent memerlukan Python v2.6+.
  • Agen juga memerlukan modul python-pyasn1. Sebagian besar distribusi menyediakan modul ini sebagai paket terpisah yang akan diinstal.
  • Dalam beberapa kasus, Azure Linux Agent mungkin tidak kompatibel dengan NetworkManager. Banyak paket RPM/deb yang disediakan oleh distribusi mengkonfigurasi NetworkManager sebagai konflik terhadap paket waagen. Dalam kasus ini, itu akan menghapus NetworkManager ketika Anda menginstal paket agen Linux.
  • Agen Linux Azure harus berada di atau di atas versi minimum yang didukung.

Catatan

Pastikan modul 'udf' (cloud-init >= 21.2) dan 'vfat' diaktifkan. Membuat daftar blokir modul udf akan menyebabkan kegagalan provisi dan membuat daftar belakang modul vfat akan menyebabkan kegagalan provisi dan boot. Cloud-init < 21.2 tidak terpengaruh dan tidak memerlukan perubahan ini.

Persyaratan Sistem Linux Umum

  1. Ubah garis boot kernel di GRUB atau GRUB2 untuk menyertakan parameter berikut, sehingga semua pesan konsol dikirim ke port serial pertama. Pesan ini dapat membantu dukungan Azure dengan men-debug masalah apa pun.

    GRUB_CMDLINE_LINUX="rootdelay=300 console=ttyS0 earlyprintk=ttyS0 net.ifnames=0"
    

    Sebaiknya hapus parameter berikut jika ada.

    rhgb quiet crashkernel=auto
    

    Boot grafis dan tenang tidak berguna di lingkungan cloud, di mana kami ingin semua log dikirim ke port serial. Opsi crashkernel ini mungkin dibiarkan dikonfigurasi jika diperlukan, tetapi perhatikan bahwa parameter ini mengurangi jumlah memori yang tersedia di VM setidaknya 128 MB, yang mungkin bermasalah untuk ukuran VM yang lebih kecil.

  2. Setelah Anda selesai mengedit /etc/default/grub, jalankan perintah berikut untuk membangun kembali konfigurasi grub:

    sudo grub2-mkconfig -o /boot/grub2/grub.cfg
    
  3. Tambahkan modul Hyper-V, baik initrd maupun instruksi initramfs (Dracut).

  4. Membangun kembali initrd atauInitramfs

    cp /boot/initramfs-$(uname -r).img /boot/initramfs-[latest kernel version ].img.bak 
    dracut -f -v /boot/initramfs-[latest kernel version ].img  [depending on the version of grub] 
    grub-mkconfig -o /boot/grub/grub.cfg 
    grub2-mkconfig -o /boot/grub2/grub.cfg 
    

    Initrd

    mv /boot/[initrd kernel] /boot/[initrd kernel]-old 
    mkinitrd /boot/initrd.img-[initrd kernel]-generic /boot/[initrd kernel]-generic-old 
    update-initramfs -c -k [initrd kernel] 
    update-grub 
    
  5. Pastikan bahwa server SSH diinstal, dan dikonfigurasi untuk memulai pada waktu boot. Konfigurasi ini biasanya merupakan default.

  6. Instal Agen Linux Azure. Azure Linux Agent diperlukan untuk menyediakan gambar Linux di Azure. Banyak distribusi menyediakan agen sebagai RPM atau paket .deb (paket ini biasanya disebut WALinuxAgent atau walinuxagent). Agen juga dapat diinstal secara manual dengan mengikuti langkah-langkah dalam Panduan Agen Linux.

    Instal Agen Azure Linux, cloud-init, dan utilitas lain yang diperlukan dengan menjalankan perintah berikut:

    Redhat/Centos

    sudo yum install -y [waagent] cloud-init cloud-utils-growpart gdisk hyperv-daemons
    

    Ubuntu/Debian

    sudo apt install walinuxagent cloud-init cloud-utils-growpart gdisk hyperv-daemons
    

    Suse

    sudo zypper install python-azure-agent cloud-init cloud-utils-growpart gdisk hyperv-daemons
    

    Kemudian, aktifkan agen dan cloud-init pada semua distribusi menggunakan:

    sudo systemctl enable waagent.service
    sudo systemctl enable cloud-init.service
    
  7. Jangan membuat ruang swap pada disk OS. Azure Linux Agent dapat secara otomatis mengonfigurasi ruang swap menggunakan disk sumber daya lokal yang dilampirkan ke VM setelah penyediaan di Azure. Disk sumber daya lokal adalah disk sementara, dan mungkin dikosongkan ketika VM dibatalkan. Setelah memasang Azure Linux Agent, ubah parameter berikut di /etc/waagent.conf sesuai kebutuhan.

    ResourceDisk.Format=y
    ResourceDisk.Filesystem=ext4
    ResourceDisk.MountPoint=/mnt/resource
    ResourceDisk.EnableSwap=y
    ResourceDisk.SwapSizeMB=2048    ## NOTE: Set this to your desired size.
    
  8. Konfigurasikan cloud-init untuk menangani penyediaan:

    1. Konfigurasikan waagent untuk cloud-init:
      sed -i 's/Provisioning.Agent=auto/Provisioning.Agent=cloud-init/g' /etc/waagent.conf
      sed -i 's/ResourceDisk.Format=y/ResourceDisk.Format=n/g' /etc/waagent.conf
      sed -i 's/ResourceDisk.EnableSwap=y/ResourceDisk.EnableSwap=n/g' /etc/waagent.conf
      
      Jika Anda memigrasikan mesin virtual tertentu dan tidak ingin membuat gambar umum, tetapkan Provisioning.Agent=disabled pada konfigurasi /etc/waagent.conf.
    2. Konfigurasikan pemasangan:
      echo "Adding mounts and disk_setup to init stage"
      sed -i '/ - mounts/d' /etc/cloud/cloud.cfg
      sed -i '/ - disk_setup/d' /etc/cloud/cloud.cfg
      sed -i '/cloud_init_modules/a\\ - mounts' /etc/cloud/cloud.cfg
      sed -i '/cloud_init_modules/a\\ - disk_setup' /etc/cloud/cloud.cfg
      
    3. Konfigurasikan datasource Azure:
      echo "Allow only Azure datasource, disable fetching network setting via IMDS"
      cat > /etc/cloud/cloud.cfg.d/91-azure_datasource.cfg <<EOF
      datasource_list: [ Azure ]
      datasource:
         Azure:
           apply_network_config: False
      EOF
      
    4. Jika dikonfigurasikan, hapus swapfile yang ada:
      if [[ -f /mnt/resource/swapfile ]]; then
      echo "Removing swapfile" #RHEL uses a swapfile by defaul
      swapoff /mnt/resource/swapfile
      rm /mnt/resource/swapfile -f
      fi
      
  9. Konfigurasikan pengelogan cloud-init:

    echo "Add console log file"
    cat >> /etc/cloud/cloud.cfg.d/05_logging.cfg <<EOF
    
    # This tells cloud-init to redirect its stdout and stderr to
    # 'tee -a /var/log/cloud-init-output.log' so the user can see output
    # there without needing to look on the console.
    output: {all: '| tee -a /var/log/cloud-init-output.log'}
    EOF
    
  10. Alihkan konfigurasi. Jangan membuat ruang pertukaran pada disk sistem operasi. Sebelumnya, Azure Linux Agent secara otomatis mengonfigurasi ruang pertukaran dengan menggunakan disk sumber daya lokal yang dilampirkan pada mesin virtual setelah mesin virtual tersebut disediakan di Azure. Namun, hal ini sekarang ditangani oleh cloud-init, Anda tidak boleh menggunakan Agen Linux untuk memformat disk sumber daya, membuat file pertukaran, mengubah parameter berikut di /etc/waagent.conf dengan tepat:

    ResourceDisk.Format=n
    ResourceDisk.EnableSwap=n
    

    Jika Anda ingin memasang, memformat, dan membuat pertukaran, Anda dapat: 1. Meneruskan ini sebagai konfigurasi cloud-init setiap kali Anda membuat VM melalui customdata. Ini adalah metode yang direkomendasikan. 2. Gunakan direktif cloud-init yang dimasukkan ke dalam gambar yang akan melakukan hal ini setiap kali VM dibuat.

           echo 'DefaultEnvironment="CLOUD_CFG=/etc/cloud/cloud.cfg.d/00-azure-swap.cfg"' >> /etc/systemd/system.conf
           cat > /etc/cloud/cloud.cfg.d/00-azure-swap.cfg << EOF
           #cloud-config
           # Generated by Azure cloud image build
           disk_setup:
             ephemeral0:
               table_type: mbr
               layout: [66, [33, 82]]
               overwrite: True
           fs_setup:
             - device: ephemeral0.1
               filesystem: ext4
             - device: ephemeral0.2
               filesystem: swap
           mounts:
             - ["ephemeral0.1", "/mnt"]
             - ["ephemeral0.2", "none", "swap", "sw,nofail,x-systemd.requires=cloud-init.service,x-systemd.device-timeout=2", "0", "0"]
           EOF
    
         ```
    
    
  11. Pencabutan Akses.

    Perhatian

    Jika Anda memigrasikan komputer virtual yang spesifik dan tidak ingin membuat gambar umum, lewati langkah pembatalan penyediaan ini. Menjalankan perintah waagent -force -deprovision+user akan merender mesin sumber yang tidak dapat digunakan, langkah ini hanya dimaksudkan untuk membuat gambar umum.

    Jalankan perintah berikut untuk membatalkan komputer virtual.

    # sudo rm -f /var/log/waagent.log
    # sudo cloud-init clean
    # waagent -force -deprovision+user
    # rm -f ~/.bash_history
    # export HISTSIZE=0
    # logout
    

    Catatan

    Di Virtualbox Anda mungkin melihat kesalahan berikut setelah menjalankan waagent -force -deprovision yang menyatakan [Errno 5] Input/output error. Pesan kesalahan ini tidak kritis dan bisa diabaikan.

  12. Matikan komputer virtual dan unggah VHD ke Azure.

Langkah berikutnya

Membuat VM Linux dari disk kustom dengan CLI Azure.