Topluluk tarafından desteklenen ve desteklenmeyen dağıtımlar için bilgiler

Şunlar için geçerlidir: ✔️ Linux VM'leri ✔️ Esnek ölçek kümeleri

Azure platformu SLA'sı, Linux işletim sistemini çalıştıran sanal makineler için yalnızca desteklenen dağıtımlardan biri kullanıldığında geçerlidir. Bu onaylı dağıtımlar için Azure Market önceden yapılandırılmış Linux görüntüleri sağlanır.

Azure'da çalıştırılan diğer, Azure Market olmayan tüm dağıtımların bir dizi önkoşulu vardır. Her dağıtım farklı olduğundan bu makale kapsamlı olamaz. Aşağıdaki tüm ölçütleri karşılasanız bile, Linux sisteminizin düzgün çalışması için önemli ölçüde ayarlamalar yapmanız gerekebilir.

Bu makalede, Linux dağıtımınızı Azure'da çalıştırmaya yönelik genel yönergelere odaklanılmaktadır.

Genel Linux Yükleme Notları

  1. Hyper-V sanal sabit disk (VHDX) biçimi Azure'da desteklenmez, yalnızca sabit VHD'de desteklenir. Hyper-V Yöneticisi'ni veya Convert-VHD cmdlet'ini kullanarak diski VHD biçimine dönüştürebilirsiniz. VirtualBox kullanıyorsanız, diski oluştururken varsayılan (dinamik olarak ayrılmış) yerine Sabit boyut'u seçin.

  2. Azure, 1. Nesil (BIOS önyüklemesi) & 2. Nesil (UEFI önyüklemesi) Sanal makinelerini destekler.

  3. Vfat çekirdek modülü çekirdekte etkinleştirilmelidir

  4. VHD için izin verilen boyut üst sınırı 1.023 GB'tır.

  5. Linux sistemini yüklerken, birçok yükleme için varsayılan olan Mantıksal Birim Yöneticisi (LVM) yerine standart bölümler kullanmanızı öneririz. Standart bölümlerin kullanılması, özellikle bir işletim sistemi diski sorun giderme için başka bir özdeş VM'ye bağlıysa, kopyalanan VM'lerle LVM adı çakışmalarını önler. LVM veya RAID veri disklerinde kullanılabilir.

  6. UDF dosya sistemlerini bağlamak için çekirdek desteği gereklidir. Azure'da ilk önyüklemede sağlama yapılandırması, konukla birlikte gelen UDF biçimli medya kullanılarak Linux VM'ye geçirilir. Azure Linux aracısının yapılandırmasını okumak ve VM'yi sağlamak için UDF dosya sistemini bağlaması gerekir.

  7. 2.6.37'den önceki Linux çekirdek sürümleri, daha büyük VM boyutlarına sahip Hyper-V üzerinde NUMA'nın desteklemiyor. Bu sorun öncelikli olarak yukarı akış Red Hat 2.6.32 çekirdeğini kullanan eski dağıtımları etkiler ve Red Hat Enterprise Linux (RHEL) 6.6'da (çekirdek-2.6.32-504) düzeltildi. 2.6.37'den eski özel çekirdekler veya 2.6.32-504'ten eski RHEL tabanlı çekirdekler çalıştıran sistemlerin grub.conf'daki çekirdek komut satırında önyükleme parametresini ayarlaması numa=off gerekir. Daha fazla bilgi için bkz. Red Hat KB 436883.

  8. İşletim sistemi diskinde değiştirme bölümü yapılandırmayın. Linux aracısı, aşağıdaki adımlarda açıklandığı gibi geçici kaynak diskinde bir takas dosyası oluşturacak şekilde yapılandırılabilir.

  9. Azure'da tüm VHD'ler 1 MB'a (1024 × 1024 bayt) hizalanmış bir sanal boyuta sahip olmalıdır. Ham diskten VHD'ye dönüştürürken, aşağıdaki adımlarda açıklandığı gibi, ham disk boyutunun dönüştürmeden önce 1 MB'ın katı olduğundan emin olmanız gerekir.

  10. En güncel dağıtım sürümünü, paketlerini ve yazılımını kullanın.

  11. Kullanıcıları ve sistem hesaplarını, ortak anahtarları, hassas verileri, gereksiz yazılımları ve uygulamaları kaldırın.

Not

(Cloud-init >= 21.2, udf gereksinimini kaldırır.) Ancak udf modülü etkinleştirilmeden cdrom sağlama sırasında bağlanmaz ve özel verilerin uygulanmasını engeller. Bunun geçici bir çözümü, özel veri kullanıcı verilerinin şifrelenmediğinden farklı olarak kullanıcı verilerini kullanarak özel veriler uygulamaktır. https://cloudinit.readthedocs.io/en/latest/topics/format.html

Hyper-V olmadan çekirdek modülleri yükleme

Azure, Hyper-V hiper yöneticisinde çalıştığından Linux için Azure'da belirli çekirdek modüllerinin çalıştırılması gerekir. Hyper-V dışında oluşturulmuş bir VM'niz varsa, VM bir Hyper-V ortamında çalıştığını algılamadığı sürece Linux yükleyicileri ilk ramdiskte (initrd veya initramfs) Hyper-V sürücülerini içermeyebilir. Linux görüntünüzü hazırlamak için farklı bir sanallaştırma sistemi (VirtualBox, KVM vb.) kullanırken, en azından hv_vmbus ve hv_storvsc çekirdek modüllerinin ilk ramdiskte kullanılabilir olması için initrd'yi yeniden oluşturmanız gerekebilir. Bu bilinen sorun yukarı akış Red Hat dağıtımını temel alan sistemlere ve muhtemelen diğerlerine yöneliktir.

initrd veya initramfs görüntüsünü yeniden oluşturma mekanizması, dağıtıma bağlı olarak değişebilir. Doğru yordam için dağıtımınızın belgelerine veya desteğine başvurun. Yardımcı programını kullanarak initrd'yi yeniden derlemek için bir örnek aşağıda verilmiştir mkinitrd :

  1. Mevcut initrd görüntüsünü yedekleyin:

    cd /boot
    sudo cp initrd-`uname -r`.img  initrd-`uname -r`.img.bak
    
  2. initrd ve hv_storvsc çekirdek modülleriyle yeniden hv_vmbus derleyin:

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

VHD'leri yeniden boyutlandırma

Azure'da VHD görüntülerinin 1 MB'a hizalanmış bir sanal boyutu olmalıdır. Genellikle, Hyper-V kullanılarak oluşturulan VHD'ler doğru şekilde hizalanır. VHD doğru hizalanmamışsa, VHD'nizden görüntü oluşturmaya çalıştığınızda aşağıdakine benzer bir hata iletisi alabilirsiniz.

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).

Bu durumda Hyper-V Yöneticisi konsolunu veya Resize-VHD PowerShell cmdlet'ini kullanarak VM'yi yeniden boyutlandırın. Windows ortamında çalışmıyorsanız, VHD'yi dönüştürmek (gerekirse) ve yeniden boyutlandırmak için kullanmanızı qemu-img öneririz.

Not

qemu-img =2.2.1 sürümlerinde >hatalı biçimlendirilmiş bir VHD ile sonuçlanan bilinen bir hata vardır. Bu sorun QEMU 2.6'da düzeltilmiştir. 2.2.0 veya daha düşük ya da qemu-img 2.6 veya üzerini kullanmanızı öneririz.

  1. veya vbox-manage gibi qemu-img araçları kullanarak VHD'nin doğrudan yeniden boyutlandırılması, önyüklemesi kaldırılamayan bir VHD'ye neden olabilir. Önce VHD'yi RAW disk görüntüsüne dönüştürmenizi öneririz. VM görüntüsü RAW disk görüntüsü olarak oluşturulduysa (KVM gibi bazı hiper yöneticiler için varsayılan değerdir), bu adımı atlayabilirsiniz.

    qemu-img convert -f vpc -O raw MyLinuxVM.vhd MyLinuxVM.raw
    
  2. Sanal boyutun 1 MB'a hizalanması için disk görüntüsünün gerekli boyutunu hesaplayın. Aşağıdaki bash kabuk betiği, disk görüntüsünün sanal boyutunu belirlemek için kullanır qemu-img info ve ardından boyutu sonraki 1 MB'a hesaplar.

    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. Yukarıda ayarlandığı gibi kullanarak $rounded_size ham diski yeniden boyutlandırın.

    qemu-img resize MyLinuxVM.raw $rounded_size
    
  4. Şimdi RAW diskini sabit boyutlu bir VHD'ye geri dönüştürün.

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

    Alternatif olarak, 2.6'nın önceki qemu sürümleriyle force_size seçeneği kaldırın.

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

Linux Çekirdek Gereksinimleri

Hyper-V ve Azure için Linux Integration Services (LIS) sürücüleri doğrudan yukarı akış Linux çekirdeğine katkıda bulunur. En son Linux çekirdek sürümünü (örneğin 3.x) içeren birçok dağıtımda bu sürücüler zaten kullanılabilir veya başka bir şekilde bu sürücülerin geri aktarılan sürümlerini çekirdekleriyle birlikte sağlar. Bu sürücüler yeni düzeltmeler ve özelliklerle yukarı akış çekirdeğinde sürekli olarak güncelleştirilir, bu nedenle mümkün olduğunda bu düzeltmeleri ve güncelleştirmeleri içeren onaylı bir dağıtımı çalıştırmanızı öneririz.

Red Hat Enterprise Linux sürüm 6.0 ile 6.3 arasında bir değişken çalıştırıyorsanız Hyper-V için en son LIS sürücülerini yüklemeniz gerekir. RHEL 6.4+ (ve türevleri) ile başlayarak LIS sürücüleri zaten çekirdekle birliktedir ve bu nedenle ek yükleme paketi gerekmez.

Özel çekirdek gerekiyorsa, en son çekirdek sürümünü (örneğin 3.8+) öneririz. Kendi çekirdeğini koruyan dağıtımlar veya satıcılar için LIS sürücülerini düzenli olarak yukarı akış çekirdeğinden özel çekirdeğinize geri aktarmanız gerekir. Zaten nispeten yeni bir çekirdek sürümü çalıştırıyor olsanız bile, LIS sürücülerindeki tüm yukarı akış düzeltmelerini izlemenizi ve gerektiğinde bunları geri aktarmanızı kesinlikle öneririz. LIS sürücü kaynak dosyalarının konumları Linux çekirdek kaynak ağacındaki MAINTAINERS dosyasında belirtilir:

    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/

Aşağıdaki düzeltme ekleri çekirdeğe eklenmelidir. Bu liste tüm dağıtımlar için tamamlanamaz.

Azure Linux Aracısı

Azure Linux Aracısıwaagent, Azure'da bir Linux sanal makinesi sağlar. Linux Aracısı GitHub deposunda en son sürümü, dosya sorunlarını alabilir veya çekme istekleri gönderebilirsiniz.

  • Linux aracısı Apache 2.0 lisansı altında yayınlanır. Birçok dağıtım zaten aracı için RPM veya .deb paketleri sağlar ve bu paketler kolayca yüklenebilir ve güncelleştirilebilir.
  • Azure Linux Aracısı için Python v2.6+ gerekir.
  • Aracı ayrıca python-pyasn1 modülünü gerektirir. Çoğu dağıtım, bu modülü yüklenecek ayrı bir paket olarak sağlar.
  • Bazı durumlarda Azure Linux Aracısı NetworkManager ile uyumlu olmayabilir. Dağıtımlar tarafından sağlanan RPM/deb paketlerinin çoğu, NetworkManager'ı waagent paketiyle çakışma olarak yapılandırır. Bu gibi durumlarda, Linux aracı paketini yüklediğinizde NetworkManager kaldırılır.
  • Azure Linux Aracısı desteklenen en düşük sürümde veya daha yüksek bir sürümde olmalıdır.

Not

'udf' ve 'vfat' modüllerinin etkinleştirildiğinden emin olun. UDF modülünün devre dışı bırakılması sağlama hatasına neden olur. VFAT modülünün devre dışı bırakılması hem sağlama hem de önyükleme hatalarına neden olur. Cloud-init >= 21.2, VM'leri UDF gerektirmeden sağlayabilir, eğer: 1) VM parola değil SSH ortak anahtarları kullanılarak oluşturuldu ve 2) özel veri sağlanmadı.

Genel Linux Sistem Gereksinimleri

  1. GRUB veya GRUB2'deki çekirdek önyükleme satırını, tüm konsol iletilerinin ilk seri bağlantı noktasına gönderilmesi için aşağıdaki parametreleri içerecek şekilde değiştirin. Bu iletiler Azure desteği hata ayıklama konusunda yardımcı olabilir.

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

    Varsa aşağıdaki parametreleri kaldırmanızı da öneririz.

    rhgb quiet crashkernel=auto
    

    Grafik ve sessiz önyükleme, tüm günlüklerin seri bağlantı noktasına gönderilmesini istediğimiz bulut ortamında kullanışlı değildir. crashkernel Seçenek gerekirse yapılandırılmış olarak bırakılabilir, ancak bu parametrenin VM'deki kullanılabilir bellek miktarını en az 128 MB azalttığını ve bunun daha küçük VM boyutları için sorunlu olabileceğini unutmayın.

  2. /etc/default/grub dosyasını düzenlemeyi tamamladıktan sonra grub yapılandırmasını yeniden derlemek için aşağıdaki komutu çalıştırın:

    sudo grub2-mkconfig -o /boot/grub2/grub.cfg
    
  3. Hem initrd hem de initramfs yönergeleri (Dracut) Hyper-V modülleri ekleyin.

  4. veya initramfsyeniden derleyininitrd.

    Initramfs

    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. SSH sunucusunun yüklü olduğundan ve önyükleme zamanında başlatacak şekilde yapılandırıldığından emin olun. Bu yapılandırma genellikle varsayılandır.

  6. Azure Linux Aracısı'nı yükleyin. Azure'da bir Linux görüntüsü sağlamak için Azure Linux Aracısı gereklidir. Birçok dağıtım aracıyı RPM veya .deb paketi olarak sağlar (paket genellikle WALinuxAgent veya walinuxagent olarak adlandırılır). Aracı, Linux Aracısı Kılavuzu'ndaki adımlar izlenerek el ile de yüklenebilir.

    Not

    'udf' ve 'vfat' modüllerinin etkinleştirildiğinden emin olun. udf modülünün engellenmesi veya kaldırılması sağlama hatasına neden olur. vfat modülünün engellenmesi veya kaldırılması hem sağlama hem de önyükleme hatalarına neden olur. (_Cloud-init >= 21.2, udf gereksinimini kaldırır. Daha fazla ayrıntı için lütfen belgenin üst kısmını okuyun)

    Aşağıdaki komutu çalıştırarak Azure Linux Aracısı, cloud-init ve diğer gerekli yardımcı programları yükleyin:

    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
    

    Ardından aşağıdakini kullanarak aracıyı ve cloud-init'i tüm dağıtımlarda etkinleştirin:

    sudo systemctl enable waagent.service
    sudo systemctl enable cloud-init.service
    
  7. Değiştirme: İşletim sistemi diskinde değiştirme alanı oluşturmayın.

    Yerel kaynak diski kullanılarak takas alanını yapılandırmak için Azure Linux Aracısı veya Cloud-init kullanılabilir. Bu kaynak diski, Azure'da sağlandıktan sonra VM'ye eklenir. Yerel kaynak diski geçici bir disktir ve VM'nin sağlaması kaldırıldığında boşaltılabilir. Aşağıdaki bloklarda bu değişimin nasıl yapılandırılır gösterilmektedir.

    Azure Linux Aracısı /etc/waagent.conf dosyasında aşağıdaki parametreleri değiştirin

    ResourceDisk.Format=y
    ResourceDisk.Filesystem=ext4
    ResourceDisk.MountPoint=/mnt/resource
    ResourceDisk.EnableSwap=y
    ResourceDisk.SwapSizeMB=2048    ## NOTE: Set this to your desired size.
    

    Cloud-init Sağlamayı işlemek için cloud-init'i yapılandırın:

    sed -i 's/Provisioning.Agent=auto/Provisioning.Agent=cloud-auto/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
    

    Cloud-init'i takas oluşturmak için yapılandırın.

    Takası biçimlendirmek ve oluşturmak için 2 seçeneğiniz vardır:

    1. aracılığıyla bir VM oluşturduğunuzda bunu cloud-init yapılandırması olarak geçirin customdata. Önerilen yöntem budur.

    2. Vm her oluşturulduğunda bunu yapacak görüntüde pişirilmiş bir cloud-init yönergesi kullanın.

    Cloud-init kullanarak takası yapılandırmak için cfg dosyası oluşturun:

    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
    
  8. Sağlamayı işlemek için cloud-init'i yapılandırın:

    1. cloud-init için waagent yapılandırma:
      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
      
      Belirli bir sanal makineyi geçiriyorsanız ve genelleştirilmiş bir görüntü oluşturmak istemiyorsanız, yapılandırmada /etc/waagent.conf ayarlayınProvisioning.Agent=disabled.
    2. Bağlamaları yapılandırma:
      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. Azure veri kaynağını yapılandırma:
      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. Yapılandırıldıysa, var olan takas dosyasını kaldırın:
      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. Cloud-init günlüğünü yapılandırma:

    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. Sağlamayı kaldırma.

    Dikkat

    Belirli bir sanal makineyi geçiriyorsanız ve genelleştirilmiş bir görüntü oluşturmak istemiyorsanız sağlamayı kaldırma adımını atlayın. waagent -force -deprovision+user komutunun çalıştırılması kaynak makineyi kullanılamaz hale getirir, bu adım yalnızca genelleştirilmiş bir görüntü oluşturmak için tasarlanmıştır.

    Sanal makinenin sağlamasını silmek için aşağıdaki komutları çalıştırın.

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

    Not

    Sanal Kutu'da komutunu çalıştırdıktan waagent -force -deprovision sonra şu hatayı görebilirsiniz: .[Errno 5] Input/output error Bu hata iletisi kritik değildir ve yoksayılabilir.

  11. Sanal makineyi kapatın ve VHD'yi Azure'a yükleyin.

Sonraki Adımlar

Azure CLI ile özel bir diskten Linux VM oluşturun.