Azure'da görüntüleme için Linux hazırlama
Dikkat
Bu makale, Kullanım Süresi Sonu (EOL) durumu olan bir Linux dağıtımı olan CentOS'a başvurur. 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
:
Mevcut initrd görüntüsünü yedekleyin:
cd /boot sudo cp initrd-`uname -r`.img initrd-`uname -r`.img.bak
ve
hv_storvsc
çekirdek modüllerini kullanarak initrd'yihv_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.
veya gibi
qemu-img
vbox-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
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"
kullanarak
$rounded_size
ham diski yeniden boyutlandırın:sudo qemu-img resize MyLinuxVM.raw $rounded_size
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.
- ata_piix: Diskleri varsayılan olarak Hyper-V sürücülerine erteleme
- storvsc: RESET yolundaki aktarım içi paketlerin hesabı
- storvsc: WRITE_SAME kullanımından kaçının
- storvsc: RAID ve sanal konak bağdaştırıcısı sürücüleri için WRITE SAME özelliğini devre dışı bırakma
- storvsc: NULL işaretçi başvurusu kaldırma düzeltmesi
- storvsc: halka arabelleği hataları G/Ç donmasına neden olabilir
- scsi_sysfs: __scsi_remove_device çift yürütülmesine karşı koruma
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
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./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
kullanarak
dracut
initramfs 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
mkinitramfs
initrd 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
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.
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
walinuxagent
olarak adlandırılırWALinuxAgent
. Azure Linux Aracısı kılavuzundaki adımları izleyerek aracıyı el ile de yükleyebilirsiniz.Not
ve
vfat
modüllerininudf
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
İş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-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
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:
echo 'DefaultEnvironment="CLOUD_CFG=/etc/cloud/cloud.cfg.d/00-azure-swap.cfg"' | sudo tee -a /etc/systemd/system.conf cat << EOF | sudo tee /etc/cloud/cloud.cfg.d/00-azure-swap.cfg #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
- aracılığıyla her VM oluşturduğunuzda cloud-init yapılandırmasını geçirin
Sağlamayı işlemek için cloud-init'i yapılandırın:
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ın
Provisioning.Agent=disabled
.Bağlamaları yapılandırma:
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
Azure veri kaynağını yapılandırın:
echo "Allow only Azure datasource, disable fetching network setting via IMDS" cat << EOF | sudo tee /etc/cloud/cloud.cfg.d/91-azure_datasource.cfg datasource_list: [ Azure ] datasource: Azure: apply_network_config: False EOF
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
Cloud-init günlüğünü yapılandırma:
echo "Add console log file" cat << EOF | sudo tee -a /etc/cloud/cloud.cfg.d/05_logging.cfg # 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
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 error
bir hata iletisi görebilirsiniz: . Bu hata iletisi kritik değildir ve bunu yoksayabilirsiniz.Sanal makineyi kapatın ve VHD'yi Azure'a yükleyin.