Önceki gönderilerimden birinde, nasıl başlayacağımı gösterdim. Libvirt ve KVM. Bu sanallaştırma yığını, masaüstü sanallaştırma yazılımı olarak kullanılmamalıdır; Bunun yerine daha fazla esneklik, verimlilik ve kararlılık sağlayan sunucularda çalışması amaçlanmıştır. kullanımı kolay. n için otomatik olması gerekiyorduNS manuel yapılandırmaya güvenmek yerine derece. Şimdi Python kullanarak libvirt arka plan programını nasıl bağlayabileceğinizi ve temel sanal makinelerin yönetimini ve izlenmesini nasıl otomatikleştirebileceğinizi görelim.
Bir Debian sunucusunda Libvirt KVM kurulumu kullanıyorum. Kullanacağım Python betikleri Python 3.7.3 ortamı. Bu makalenin, uygulamanızı tasarlarken Libvirt’ten Python bağlamaları ile ayaklarınızı ıslatması bekleniyor. Her zaman çeşitli kullanım durumlarını kapsayan resmi, makul ölçüde güncel belgelere başvurmalısınız. çoğunlukla.
Önce libvirt için gerekli tüm bağımlılıkları yükleyelim:
sudo apt kurulumu pkg-config libvirt-dev
pip3 $ libvirt-python’u kurun
Tüm ihtiyacın olan bu.
Aşağıdaki komut dosyaları ve parçacıklar çalışır yerel olarak uzak bir istemcide çalışmak yerine Libvirt ana bilgisayarında kök olarak. Hizmetlere uzaktan erişebilirsiniz, ancak bu, istemci ile sunucu arasındaki bağlantının güvenliğini sağlamak için uzun bir duraklama gerektirir. Bu nedenle, basitlik adına yerel olarak bağlantı kuracağız.
libvirtd hizmetine bağlanın
Başlamak için bir Python komut istemi açalım, libvirt kitaplığını içe aktaralım ve libvirt.open yöntemini kullanarak bir bağlantı açalım.
mutfak@din:~#piton3
Python 3.7.3 (varsayımsalVe Nisan 15.2019Ve01:55:37)
[KİK 6.3.0 20170516] Linux’ta
Daha fazla bilgi için yardım, telif hakkı, kredi veya lisans yazın.
>>>ithalat libvirt
>>> Bağ = libvirt.aç(“qemu:/// sistem”)
conn değişkeni artık libvirt arka plan programınızı sorgulamak için kullanılabilir, bunu birazdan yapacağız. Ama önce küçük bir konu.
Libvirt, bir dizi farklı sanallaştırma yığınını ve kapsayıcısını yönetmek için kullanılabilir. KVM-QEMU, Xen ve LXC en popüler olanlardır. Yani libvirt.open(‘qemu:/// system’) adresine gittiğinizde libvirt, QEMU misafirleri hakkında bilgi toplamanıza ve yönetmenize olanak tanır. Sırasıyla lxc:/// veya xen system:/// kullanarak LXD arka plan programı veya Xen hipervizörüyle de konuşabilirsiniz.
Benzer şekilde libvirt.open() yöntemi, kullanabileceğiniz tek yöntem değildir. open(name), openAuth(uri, auth, flags) ve openReadOnly(name), her biri bir virConnect nesnesini açığa çıkaran ve ana bilgisayar üzerinde farklı düzeylerde denetim sunan üç farklı çağrıdır. Bu konuda daha fazlasını okuyabilirsiniz Burada. Şu anda virConnect sınıfının bir nesnesi olarak conn’a sahibiz. Bu nesne, hipervizörün kendisini yapılandırmaktan konukları ve kaynak tahsislerini değiştirmeye kadar hemen hemen her şeyi yapmak için bir ağ geçididir.
Nesneyle çalışmayı bitirdikten sonra, üzerindeki close yöntemini çağırarak bağlantıyı kapattığınızdan emin olun.
Ancak, yukarıdaki komutu henüz çalıştırmayın. Çünkü biraz daha libvirt ile oynayacağız. Ana bilgisayar adı ve konuk VM’lere sunabileceği toplam vCPU sayısı gibi, hipervizörümüze kendisi hakkında bazı ayrıntılar soralım.
>>> Bağana makine adını al()
“borç”
>>> BağgetMaxVcpus(“qemu”)
16
Şimdi, Libvirt ile hipervizör istatistikleri, VM’ler, ağ iletişimi ve depolama bilgileri gibi nesneler hakkındaki meta verilerin XML biçiminde temsil edildiğini anlamamız gerekiyor. XML, biraz beceriksiz (ve biraz daha eski) olması dışında JSON’a benzer. Veriler bir dizge hazır bilgisi olarak saklanır ve işlenir ve bu, libvirt’i sorgularsanız ve bu sorgunun çıktısı XML ise, yeni bir ‘\n’ dizesi yerine bir dize değişmezi olarak sunulan bir satır uzunluğunda çıktı alacağınız anlamına gelir. astar Python’un yerleşik yazdırma işlevi, insan tarafından okunabilirliği temizleyebilir
>>>matbaa(BağgetSysinfo())
<sistem bilgisi İpucu=“smbiyo”>
<bios>
<Kullanıcı adı=‘tüccar’>Dell Şirketi</Giriş>
<Kullanıcı adı=‘İhraç’>bir 14</Giriş>
…
</ bellek_aygıtı>
</ sistem bilgisi>
Sanal makineleri listeleyin ve izleyin
Çok sayıda sanal makineye sahipseniz, yüzlerce birleştirilmiş sanal makine oluşturmanın bir yoluna ihtiyacınız vardır. Basit tek iş parçacıklı iş yüklerinden çok çekirdekli ve çok iş parçacıklı iş yüklerine kadar ölçeklenen yapılandırma yönetimi. Libvirt, sanal makineleri (veya LXC kullanıyorsanız kapsayıcıları) çağırır. etki alanları Ve virConnect nesneniz yeterli ayrıcalığa sahipse, ayrı ayrı etki alanları hakkındaki bilgileri listeleyebilir ve yapılandırabilirsiniz.
Sanal makineler ve bunların kaynak kullanımı hakkında bilgi almak için aşağıdaki çağrıları kullanabilirsiniz:
>>> BağlistDomainsID()
[4,5]
Bu, basit bir libvirt kurulumu için yalnızca küçük tamsayılar olan bir etki alanı tanımlayıcıları dizisi döndürür. Aynı VM, kimlik veya ada sahip iki sanal makineye (diyelim ki farklı düğümlerde) sahip olmadan VM’lerinizi ayırt etmenin daha güvenilir bir yolu UUID’leri kullanmaktır. Libvirt’te herhangi bir şey rastgele oluşturulmuş 128 bit UUID içerebilir. sayı. İki özdeş UUID oluşturma şansınız gerçekten çok düşük.
VM’leriniz, VM’lerin kendileri ve hatta depolama havuzları ve birimleri için ayrı ağ UUID’leri. Belirli kişilere güvenmek yerine, onları Python kodunuzda özgürce kullanın. İsimler. Ne yazık ki, bu kitaplığın mevcut uygulamasında, etki alanlarının UUID’lerini almanın yolu bence biraz karışık. Bir sanal makine tanımlayıcısı (etki alanı tanımlayıcısı) sağlamanızı gerektirir ve işte böyle görünür.
etki alanı tanımlayıcıları = BağlistDomainsID()
için etki alanı tanımlayıcısı içeri Etki alanı kimlikleri:
alan adı = Bağarama()
uuid = alan adı.UUIDString()
matbaa(uuid)
Artık etki alanı UUID’lerinin bir listesini görebilirsiniz. Ayrıca kendi yöntemleriyle yeni bir Python nesnesi libvirt.virDomain ile karşılaştık. Bir libvirt.virConnect nesnesi olan ve listDomainsID() ve lookupByID() gibi yöntemlere sahip olan conn değişkenine çok benzer. Bununla.
Python’un yerleşik dir() yöntemlerini her ikisi için de kullanabilirsiniz, böylece nesneler kendi dahili değişkenlerini ve yöntemlerini listeleyebilir.
Örneğin:
>>>gece(Bağ)
[‘_…gs’,‘zamanlayıcıTürü’,‘ekran görüntüsü’,‘güvenlik etiketi’,‘güvenlik Etiket Listesi’,
‘gönder anahtarı’,‘SendProcessSignal’,‘otomatik başlatmayı ayarla’,‘setBlkioParameters’,‘setBlockIoTune’,
‘setGuestVcpus’,‘setInterfaceParameters’,‘setMaxBellek’,‘hafızayı ayarla’,‘setMemoryFlags’,
‘setMemoryParameters’,‘setMemoryStatsPeriod’,‘setMeta veri’,‘setNumaParameters’,
‘setPerfEvents’,‘setSchedulerParameters’,‘setSchedulerParametersFlags’,‘ayarlanan zaman’,
‘ayarla’ …]
Bu, yöntemin tam adını ve onunla birlikte kullanılacak nesneyi hızlı bir şekilde hatırlamanıza gerçekten yardımcı olabilir. Artık libvirt.virDomain nesnesine sahip olduğumuza göre, bu çalışan sanal makine hakkında çeşitli ayrıntıları listelemek için onu kullanalım.
Bu size gösterildiği gibi sanal makinenin durumu, maksimum bellek ve işlemci çekirdekleri hakkında bilgi verir. Burada.
OSType() gibi çeşitli yöntemleri kullanarak sanal makine hakkında başka bilgiler de bulabilirsiniz.
>>> alan adı.İşletim sistemi türü()
Hmm
Libvirt oluşturan API söz konusu olduğunda çok fazla esneklik vardır ve libvirt tutamaçlarının son derece karmaşık olması konusunda endişelenmeden kullanım durumunuz hakkında endişelenmeniz yeterlidir.
çözüm
Libvirt teknolojisine yaptığım gezilerde, birinci sınıf bir vatandaş olarak UUID’lerin olmaması, muhtemelen kötü bir tasarım seçimi gibi görünen karşılaştığım tek acı noktaydı. Bunun dışında libvirt, başardıkları için oldukça temiz. Evet, daha iyi yapılabilecek başka birçok şey var, ancak yazılımda durum her zaman böyledir. Geçmişe bakıldığında, kötü kararlar her zaman açıktır, ancak libvirt gibi popüler bir programı yeniden yazmanın maliyeti genellikle engelleyicidir.
Proje yavaş ve istikrarlı bir şekilde geliştiği için üzerine çok şey inşa edildi.
Tüm kütüphaneyi bir kerede öğrenmeye çalışmak yerine, küçük bir proje veya fikir bulmanızı ve Python ve Libvirt kullanarak uygulamanızı öneririm. Dokümantasyon, birçok örnekle oldukça kapsamlıdır ve sizi aynı anda uygun yazılım tasarımı ve sanallaştırma yığını hakkında düşünmeye zorlar.
Diğer gönderilerimize göz at
[wpcin-random-posts]
İlk Yorumu Siz Yapın