Azure'da görüntüleme için Linux hazırlama

Dikkat

Bu makalede, Kullanım Süresi Sonu (EOL) durumuna yakın bir Linux dağıtımı olan CentOS'a başvuruda bulunur. Lütfen kullanımınızı göz önünde bulundurun ve uygun şekilde planlayın. Daha fazla bilgi için bkz . CentOS Kullanım Süresi Sonu kılavuzu.

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

Azure platform hizmet düzeyi sözleşmesi (SLA), Linux işletim sistemini çalıştıran sanal makineler (VM) için yalnızca onaylanan dağıtımlardan birini kullandığınızda geçerlidir. Onaylanan dağıtımlar için Azure Market önceden yapılandırılmış Linux görüntüleri sağlar. Daha fazla bilgi için bkz.

Topluluk tarafından desteklenen ve onaylanmamış dağıtımlar da dahil olmak üzere Azure'da çalışan diğer tüm dağıtımların bazı önkoşulları vardır.

Bu makale, Linux dağıtımınızı Azure'da çalıştırmaya yönelik genel yönergelere odaklanır. Her dağıtım farklı olduğundan bu makale kapsamlı olamaz. Bu makalede açıklanan tüm ölçütleri karşılasanız bile, linux sisteminizin düzgün çalışması için önemli ölçüde değişiklik yapmanız gerekebilir.

Genel Linux yükleme notları

  • Azure, Hyper-V sanal sabit disk (VHDX) biçimini desteklemez. Azure desteği yalnızca sabit VHD. 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'a tıklayın.

  • Azure desteği 1. Nesil (BIOS önyüklemesi) ve 2. Nesil (UEFI önyükleme) sanal makineleri.

  • Sanal dosya ayırma tablosu (VFAT) çekirdek modülü çekirdekte etkinleştirilmelidir.

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

  • Linux sistemini yüklerken Mantıksal Birim Yöneticisi (LVM) yerine standart bölümler kullanmanızı öneririz. LVM, birçok yükleme için varsayılandır.

    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. Veri disklerinde LVM veya RAID kullanabilirsiniz.

  • Kullanıcı tanımlı işlev (UDF) dosya sistemlerini bağlamak için çekirdek desteği gereklidir. Azure'da ilk önyüklemede, sağlama yapılandırması konukta bulunan UDF biçimli medya aracılığıyla Linux VM'ye geçirilir. Azure Linux aracısı, yapılandırmasını okumak ve VM'yi sağlamak için UDF dosya sistemini bağlamalıdır.

  • 2.6.37'den önceki Linux çekirdek sürümleri, daha büyük VM boyutlarına sahip Hyper-V üzerinde Tekdüzen Olmayan Bellek Erişimini (NUMA) desteklemez. Bu sorun öncelikli olarak yukarı akış Red Hat 2.6.32 çekirdeğini kullanan eski dağıtımları etkiler. Red Hat Enterprise Linux (RHEL) 6.6 (kernel-2.6.32-504) ile 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 içindeki çekirdek komut satırında önyükleme parametresini ayarlaması numa=off gerekir. Daha fazla bilgi için bkz . Red Hat KB 436883.

  • İşletim sistemi diskinde değiştirme bölümü yapılandırmayın. Linux aracısını, bu makalenin ilerleyen bölümlerinde açıklandığı gibi geçici kaynak diskinde bir takas dosyası oluşturacak şekilde yapılandırabilirsiniz.

  • Azure'da tüm VHD'lerin 1 MB (1024 x 1024 bayt) ile hizalanmış bir sanal boyutu olmalıdır. Ham diskten VHD'ye dönüştürürken, bu makalenin devamında açıklandığı gibi ham disk boyutunun dönüştürmeden önce 1 MB'ın katı olduğundan emin olun.

  • En güncel dağıtım sürümünü, paketleri ve yazılımları kullanın.

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

Not

Cloud-init sürüm 21.2 veya üzeri UDF gereksinimini kaldırır. Ancak modül etkinleştirilmeden udf , cd-ROM sağlama sırasında bağlanmaz ve bu da özel verilerin uygulanmasını engeller. Geçici çözüm, kullanıcı verilerini uygulamaktır. Ancak, özel verilerden farklı olarak kullanıcı verileri şifrelenmez. Daha fazla bilgi için cloud-init belgelerindeki Kullanıcı veri biçimleri bölümüne bakın.

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

Azure, Hyper-V hiper yöneticisi üzerinde ç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 RAM diskinde (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 veya KVM gibi) kullanırken, ilk RAM diskinde en azından ve hv_storvsc çekirdek modüllerinin hv_vmbus kullanılabilir olması için initrd'yi yeniden oluşturmanız gerekebilir. Bu bilinen sorun yukarı akış Red Hat dağıtımına dayalı sistemlere ve büyük olasılıkla diğer sistemlere 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'ı 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. ve hv_storvsc çekirdek modüllerini kullanarak initrd'yi hv_vmbus yeniden oluşturun:

    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. Normalde, Hyper-V aracılığıyla oluşturulan VHD'ler doğru hizalanır. VHD doğru hizalanmamışsa, VHD'nizden bir görüntü oluşturmaya çalıştığınızda aşağıdaki örneğe 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 sürüm 2.2.1 için qemu-img ve bazı sonraki sürümlerde hatalı biçimlendirilmiş bir VHD ile sonuçlanabilecek bilinen bir hata vardır. Sorun QEMU 2.6'da düzeltildi. 2.2.0 veya önceki bir sürümü veya 2.6 veya sonraki bir sürümü kullanmanızı öneririz.

  1. veya gibi qemu-imgvbox-manage araçları kullanarak VHD'yi doğrudan yeniden boyutlandırmak, önyüklemesi kaldırılamaz bir VHD'ye neden olabilir. Önce aşağıdaki kodu kullanarak VHD'yi ham disk görüntüsüne dönüştürmenizi öneririz.

    VM görüntüsü ham disk görüntüsü olarak oluşturulduysa bu adımı atlayabilirsiniz. VM görüntüsünü ham disk görüntüsü olarak oluşturmak, KVM gibi bazı hiper yöneticilerde varsayılan değerdir.

    sudo 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 kabuğu 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. kullanarak $rounded_sizeham diski yeniden boyutlandırın:

    sudo qemu-img resize MyLinuxVM.raw $rounded_size
    
  4. Ham diski sabit boyutlu bir VHD'ye geri dönüştürün:

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

    Veya 2.6'nın önceki QEMU sürümleriyle force_size şu seçeneği kaldırın:

    sudo 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 bu sürücülerin geri aktarılan sürümlerini kendi çekirdekleriyle birlikte sağlar.

LIS sürücüleri yeni düzeltmeler ve özelliklerle yukarı akış çekirdeğinde sürekli güncelleştiriliyor. Mümkün olduğunda, bu düzeltmeleri ve güncelleştirmeleri içeren onaylı bir dağıtım çalıştırmanızı öneririz.

RHEL 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 çekirdekte zaten bulunur, bu nedenle ek yükleme paketlerine ihtiyacınız yoktur.

Özel çekirdek gerekiyorsa, yeni bir çekirdek sürümü (ö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üsü 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/

VM'nin etkin çekirdeği aşağıdaki düzeltme eklerini içermelidir. 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ü alabilir, sorunları bildirebilir veya çekme istekleri gönderebilirsiniz.

Azure Linux Aracısı'nı kullanma konusunda dikkat edilmesi gereken bazı noktalar şunlardır:

  • 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. Bu paketleri kolayca yükleyebilir ve güncelleştirebilirsiniz.
  • Azure Linux Aracısı için Python v2.6+ gerekir.
  • Aracı ayrıca modülü gerektirir python-pyasn1 . Ç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 paketlerin birçoğu (.rpm veya .deb), NetworkManager'ı paketle waagent çakışma olarak yapılandırıyor. Böyle durumlarda, Linux aracı paketini yüklediğinizde aracı NetworkManager'ı kaldırır.
  • Azure Linux Aracısı desteklenen en düşük sürümde veya daha yüksek bir sürümde olmalıdır.

Not

ve vfat modüllerinin udf etkinleştirildiğinden emin olun. Modülün udf devre dışı bırakılması sağlama hatasına neden olur. Modülün vfat devre dışı bırakılması hem sağlama hem de önyükleme hatalarına neden olur. Cloud-init sürüm 21.2 veya üzeri, bu koşulların her ikisi de varsa UDF gerektirmeden VM'ler sağlayabilir:

  • VM'yi parolaları değil SSH ortak anahtarlarını kullanarak oluşturdunuz.
  • Özel veri sağlamadınız.

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 herhangi bir sorunda hata ayıklamaya 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ğiniz bulut ortamında kullanışlı değildir. Gerekirse seçeneği yapılandırılmış olarak bırakabilirsiniz crashkernel , ancak bu parametre VM'deki kullanılabilir bellek miktarını en az 128 MB azaltır. Kullanılabilir belleği azaltmak, daha küçük VM boyutları için sorunlu olabilir.

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

    sudo grub2-mkconfig -o /boot/grub2/grub.cfg
    
  3. kullanarak dracutinitramfs için Hyper-V modülünü ekleyin:

    cd /boot
    sudo cp initramfs-<kernel-version>.img <kernel-version>.img.bak
    sudo dracut -f -v initramfs-<kernel-version>.img <kernel-version> --add-drivers "hv_vmbus hv_netvsc hv_storvsc"
    sudo grub-mkconfig -o /boot/grub/grub.cfg
    sudo grub2-mkconfig -o /boot/grub2/grub.cfg
    

    kullanarak mkinitramfsinitrd için Hyper-V modülünü ekleyin:

    cd /boot
    sudo cp initrd.img-<kernel-version>  initrd.img-<kernel-version>.bak
    sudo mkinitramfs -o initrd.img-<kernel-version> <kernel-version>  --with=hv_vmbus,hv_netvsc,hv_storvsc
    sudo update-grub
    
  4. SSH sunucusunun yüklendiğinden ve önyükleme zamanında başlatacak şekilde yapılandırıldığından emin olun. Bu yapılandırma genellikle varsayılandır.

  5. Azure Linux Aracısı'nı yükleyin.

    Azure'da 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 veya walinuxagentolarak adlandırılırWALinuxAgent. Azure Linux Aracısı kılavuzundaki adımları izleyerek aracıyı el ile de yükleyebilirsiniz.

    Not

    ve vfat modüllerinin udf etkinleştirildiğinden emin olun. Bunları kaldırmak veya devre dışı bırakmak, sağlama veya önyükleme hatasına neden olur. Cloud-init sürüm 21.2 veya üzeri UDF gereksinimini kaldırır.

    Aşağıdaki komutlardan birini çalıştırarak Azure Linux Aracısı'nı, cloud-init'i ve diğer gerekli yardımcı programları yükleyin.

    Red Hat veya CentOS için şu komutu kullanın:

    sudo yum install -y WALinuxAgent cloud-init cloud-utils-growpart gdisk hyperv-daemons
    

    Ubuntu/Debian için şu komutu kullanın:

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

    SUSE için şu komutu kullanın:

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

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

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

    Yerel kaynak diski aracılığıyla takas alanını yapılandırmak için Azure Linux Aracısı'nı veya cloud-init'i kullanabilirsiniz. Bu kaynak diski, Azure'da sağlandıktan sonra VM'ye eklenir. Yerel kaynak diski geçici bir disktir ve VM'nin yetkisi 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ı'nı seçerseniz /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'i seçerseniz, sağlamayı işlemek için cloud-init'i yapılandırın:

    sudo sed -i 's/Provisioning.Agent=auto/Provisioning.Agent=cloud-auto/g' /etc/waagent.conf
    sudo sed -i 's/ResourceDisk.Format=y/ResourceDisk.Format=n/g' /etc/waagent.conf
    sudo sed -i 's/ResourceDisk.EnableSwap=y/ResourceDisk.EnableSwap=n/g' /etc/waagent.conf
    

    Cloud-init'i takas alanını biçimlendirecek ve oluşturacak şekilde yapılandırmak için iki seçeneğiniz vardır:

    • aracılığıyla her VM oluşturduğunuzda cloud-init yapılandırmasını geçirin customdata. Bu yöntemi öneririz.
    • Vm her oluşturulduğunda değiştirme alanını yapılandırmak için görüntüde bir cloud-init yönergesi kullanın.

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

    sudo echo 'DefaultEnvironment="CLOUD_CFG=/etc/cloud/cloud.cfg.d/00-azure-swap.cfg"' >> /etc/systemd/system.conf
    sudo 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/resource"]
      - ["ephemeral0.2", "none", "swap", "sw,nofail,x-systemd.requires=cloud-init.service,x-systemd.device-timeout=2", "0", "0"]
    EOF
    
  7. Sağlamayı işlemek için cloud-init'i yapılandırın:

    1. cloud-init için yapılandırma waagent :

      sudo sed -i 's/Provisioning.Agent=auto/Provisioning.Agent=cloud-init/g' /etc/waagent.conf
      sudo sed -i 's/ResourceDisk.Format=y/ResourceDisk.Format=n/g' /etc/waagent.conf
      sudo 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 /etc/waagent.conf yapılandırmasında ayarlayınProvisioning.Agent=disabled.

    2. Bağlamaları yapılandırma:

      sudo echo "Adding mounts and disk_setup to init stage"
      sudo sed -i '/ - mounts/d' /etc/cloud/cloud.cfg
      sudo sed -i '/ - disk_setup/d' /etc/cloud/cloud.cfg
      sudo sed -i '/cloud_init_modules/a\\ - mounts' /etc/cloud/cloud.cfg
      sudo sed -i '/cloud_init_modules/a\\ - disk_setup' /etc/cloud/cloud.cfg
      
      
    3. Azure veri kaynağını yapılandırın:

      sudo echo "Allow only Azure datasource, disable fetching network setting via IMDS"
      sudo cat > /etc/cloud/cloud.cfg.d/91-azure_datasource.cfg <<EOF
      datasource_list: [ Azure ]
      datasource:
         Azure:
           apply_network_config: False
      EOF
      
    4. Birini yapılandırdıysanız mevcut takas dosyasını kaldırın:

      if [[ -f /mnt/resource/swapfile ]]; then
      echo "Removing swapfile" #RHEL uses a swap file by default
      swapoff /mnt/resource/swapfile
      rm /mnt/resource/swapfile -f
      fi
      
    5. Cloud-init günlüğünü yapılandırma:

      sudo echo "Add console log file"
      sudo 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
      
  8. Sanal makinenin sağlamasını silmek için aşağıdaki komutları çalıştırın.

    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. komutu waagent -force -deprovision+user çalıştırılırsa kaynak makine kullanılamaz duruma gelir. Bu adım yalnızca genelleştirilmiş bir görüntü oluşturmaya yöneliktir.

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

    VirtualBox'ta, çalıştırdıktan waagent -force -deprovision sonra şunu belirten [Errno 5] Input/output errorbir hata iletisi görebilirsiniz: . Bu hata iletisi kritik değildir ve bunu yoksayabilirsiniz.

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

Sonraki adımlar

Azure CLI kullanarak özel diskten Linux VM oluşturma