Ana içeriğe geç

İşletim sistemi imaj kütüphanesi

Sorun ve amaç​

Bir sanal makine (VM), hazır bir işletim sistemi imajından saniyeler içinde başlatılabilir; kurulum medyasıyla ise bu işlem onlarca dakika sürer. Ancak yeni makinenin diski bir ZFS klonu olarak oluşturulur ve klon, üst öğesiyle aynı havuzda bulunur. Bu nedenle imajın, makinenin oluşturulacağı havuzda önceden bulunması gerekir. Her VM oluşturulduğunda harici bir sunucudan gigabaytlarca veri indirmek anlamsızdır.

İmaj kütüphanesi bu iki olayı zaman içinde birbirinden ayırır. Önce yönetici imajı kümeye bir kez içe aktarır ve havuzlara dağıtır. Ardından makineler, harici ağa erişmeden yerel kopyalardan oluşturulur.

Bu, modeli iki parçaya böler. Kümenin dışında kütüphane kaynağı bulunur: mevcut imajları listeleyen bir manifest.json dosyasına sahip standart bir web sunucusu. Kümenin içinde ise imaj kataloğu bulunur: önceden içe aktarılmış imajlar, bunların havuzlara dağıtım haritası ve her kopyanın durumu. Eşitleme birinci parçayı okur; içe aktarma ise ikinci parçayı doldurur.

Modelin üçüncü özelliği daha az belirgindir. Kaynak kaydında "hangi VDC" (sanal veri merkezi) parametresi yoktur: Cluster master rolü kümede paylaşılan bir kaynak oluşturur, VDC yöneticisi ise kendi VDC'sine ait bir kaynak oluşturur. İçe aktarmada böyle bir parametre vardır, ancak belirleyici olan haklardır. Cluster master rolü yalnızca paylaşılan imajları içe aktarır ve belirtilen VDC yok sayılır. VDC yöneticisinin ise kendi VDC'sini belirtmesi gerekir: belirtilmezse içe aktarma -49005 koduyla, başka bir VDC belirtilirse -49006 koduyla reddedilir.

vStack Center web arayüzünde kütüphane, «Image library» bölümünden «Images» ve «Sources» sekmeleriyle açılır: küme imaj kataloğu, bir kaynaktan imaj ekleme, imaj kaldırma ve kaynakları kaydetme, eşitleme ve kaldırma. Kütüphanenin her işlemi küme API'si üzerinden de, yani API çağrılarıyla veya bu çağrıları yapan bir otomasyon sistemiyle kullanılabilir. İşlemler bu sayfanın sonunda listelenmiştir; istek ve yanıt yapıları API başvurusunda yer alır.

Bu sayfa modeli açıklar. İmaj içe aktarmak için İşletim sistemi imajını kümeye içe aktarma sayfasına, bir imajı kümeden kaldırmak için İşletim sistemi imajını kaldırma sayfasına bakın.

Model ve varlıklar​

Kütüphane kaynağı. İmajları barındıran harici bir sunucu. Kaynağın bir adı, bir kütüphane kök URL'si ve son eşitleme zamanı vardır; kaynak henüz eşitlenmemişse bu zaman boştur. URL'de http veya https kullanılmalıdır; varsayılan olarak https zorunludur. Şifrelenmemiş http yalnızca açık izinle kullanılabilir. URL küme içinde benzersizdir: aynı kök URL iki kez kaydedilemez.

Manifest. Kaynak kökündeki manifest.json dosyası, kaynağın sunduklarının bir kataloğudur. Manifesti kütüphanenin sahibi yazar ve her girdi imajın tam meta verilerini içerir: zorunlu name, version, format, url_path, size ve sha256 alanları ile isteğe bağlı description, os_type, net_link_pattern, zero_based_link, default_shell, sector_size_logical, sector_size_physical, guest_customization, uefi, min_size ve uuid alanları. İçe aktarmaya uygunluğu küme kendisi belirler: yalnızca zfs biçimindeki imajlar uygundur.

uuid alanı biçimsel olarak isteğe bağlıdır, ancak içe aktarma imajı manifestte bulmak için bu alanı kullanır: uuid içermeyen bir girdi içe aktarılamaz. Tanımlayıcı genel olarak benzersizdir: manifestte aynı uuid değerine sahip iki girdi bulunmamalıdır.

Küme kataloğundaki imaj. İçe aktarılmış bir imaja vekil bir tanımlayıcı (UUID) ile başvurulur. İmaj adları benzersiz değildir, bu nedenle işlemler ad yerine tanımlayıcıyı kullanır. Bir imajın yaşam döngüsü aşaması ve havuzlara fiili dağıtım haritası vardır.

Düğüm → havuz çiftindeki kopya. Dağıtım havuz bazında yapılır ve her düğüm → havuz çiftinin kendi sonucu vardır. "Her yere dağıtılmamış" durumunu ve ters bağımlılığı bu açıklar: bir havuzdaki VM diskleri, imajın tam olarak o havuzdaki kopyasının ZFS klonlarıdır.

VarlıkBaşvuru biçimiAit olduğu yer
Kütüphane kaynağıTam sayı tanımlayıcıKüme (paylaşılan) veya tek bir VDC
Katalogdaki imajUUID tanımlayıcıSahip VDC veya küme
İmaj kopyasıBir düğüm → havuz çiftiHavuz

Nasıl çalışır​

Kütüphaneyle çalışma, her biri kendi yetkisine sahip sekiz işlemden oluşur.

GörevModYetki
Kaynak kaydetme veya yeniden yapılandırmaEşzamanlıManage Image Library
Kaynak kaldırmaEşzamanlıManage Image Library
Mevcut kaynakları görüntülemeEşzamanlıView Image Library
Kaynak kataloğunu okumaEşzamanlıSync Image Library
İmajı kümeye içe aktarmaEşzamansızImport Golden Image
Küme imaj kataloğunu görüntülemeEşzamanlıView Image Catalog
İmaj bağımlılık haritasını almaEşzamanlıView Image Dependencies
İmajı kümeden kaldırmaEşzamanlıRemove OS Image

Tüm yetkiler ilgili VDC ile sınırlıdır; Cluster master rolünün kapsamı geneldir. Bağımlılıkları görüntüleme hakkı, imaj kaldırma hakkından ayrıdır: görüntüleme geniş çapta verilebilir, kaldırma ise verilemez.

Eşitleme imajları değil, manifesti okur​

Eşitleme yalnızca manifest.json dosyasını indirir ve kaynağın imaj kataloğunu döndürür. İmaj baytları aktarılmaz; bu nedenle işlem ucuz ve güvenlidir. İşlem ayrıca kaynağın son eşitleme zamanını günceller. Desteklenmeyen biçimdeki bir imaj katalogdan kaybolmaz: içe aktarmanın onu neden kabul etmeyeceğini gösteren "içe aktarmaya uygun değil" işaretiyle döndürülür.

Harici URL'lere yapılan istekler hedef değiştirmeye karşı korunur. Şema (yalnızca http veya https) ve ad çözümleme sonucu denetlenir. Küme; loopback, meta veri servisi adresi dahil link-local, özel RFC 1918 aralıkları, taşıyıcı sınıfı NAT paylaşılan adres alanı (CGNAT), "sıfır ağı" ve yayın adresini reddeder. Gizlenmiş IPv4-mapped IPv6 biçimleri IPv4'e indirgenir ve aynı listeye göre denetlenir; yerel IPv6 loopback, link-local ve benzersiz yerel adresler (ULA) engellenir. Manifest gövdesi 100 MB ile sınırlıdır.

İçe aktarma imajı havuzlara dağıtır​

İçe aktarma hemen yanıt verir; bu yanıt imajın hazır olduğunu değil, işin kabul edildiğini onaylar: çalışma arka planda sürer. Baytları özel dağıtım servisi vstack-center-image-distributor iki aşamalı bir protokolle aktarır; küme dağıtıcısı (dispatcher) yalnızca süreci yönetir. İmaj kataloğuna tek bir bileşen yazar, bu nedenle imaj durumuna yönelik rekabet eden yazmalar olmaz.

İlerleme ve sonuç, küme imaj kataloğunda görünür: imajın bir aşaması ve her havuz için bir girdi içeren bir dağıtım haritası vardır.

AşamaAnlamıEylem
importingİmaj indiriliyor ve dağıtılıyorBekleyin
activeİmaj seçilen tüm havuzlara dağıtıldıVM oluşturulabilir
partial_activeBazı havuzlar kopya almadıAynı sürümü yeniden içe aktararak dağıtımı tamamlayın
failedDeneme tamamen başarısız olduNedenini araştırın ve içe aktarmayı yeniden başlatın
deletingİmaj kaldırılıyorSonucu bekleyin; içe aktarma ve yeni bir kaldırma -48004 koduyla reddedilir

Otomatik yeniden deneme bilinçli olarak yoktur. Herhangi bir hata (indirme, sağlama toplamı, dağıtım veya servisin işi kaybetmesi) imajı failed durumuna getirir ve bir günlük kaydı oluşturur. Yeniden denemeyi yönetici, içe aktarmayı tekrarlayarak başlatır. Aynı mantık dağıtıcı yeniden başlatıldıktan sonra da geçerlidir: tamamlanmamış içe aktarmalar sessizce yeniden denenmez, başarısız olarak işaretlenir.

Kısmi başarı geri alınmaz. Kopya alan havuzlar onu korur; aynı sürümü yeniden içe aktarmak kalan kopyaları teslim eder.

VM oluşturma hazır bir havuzu bekler​

İmajın bir dağıtım haritası olduğu sürece, makine oluşturmak için seçilen havuzdaki kopyasının etkin olması gerekir. Aksi takdirde VM oluşturma, hiçbir şey oluşturulmadan önce -259 koduyla reddedilir. Bu nedenle işlem sırası alışılmış yaklaşımı tersine çevirir: önce havuzdaki imaj, sonra o havuzdaki makine. Oluşturma ayrıntıları için Sanal makine oluşturma, kaldırma ve taşıma sayfasına bakın.

Görünürlük ve sahiplik​

İmajlar ve kaynaklar aynı görünürlük kapsamına sahiptir. Cluster master her şeyi görür. VDC yöneticisi, kümede paylaşılan nesnelere ek olarak kendi VDC'lerine atanmış nesneleri görür. VDC'si olmayan bir sorumlu (principal) yalnızca paylaşılan nesneleri görür. Kaynak URL'si yalnızca sahibine gösterilir; diğerleri onu göremez.

Görünürlük ve sahiplik farklı haklardır. VDC yöneticisi, bir görünürlük izniyle kendi VDC'sine görünür kılınmış bir imajı kaldıramaz: kaldırma sahiplik gerektirir. Mevcut bir imajın yeni sürümünü içe aktarmak da yalnızca sahibe veya Cluster master rolüne açıktır. Var olmayan ve görünmeyen imajlar aynı "bulunamadı" yanıtını döndürür; böylece yanıt, başkasına ait kısıtlı bir imajın varlığını açığa çıkaramaz.

Her değişiklik önce günlüğe kaydedilir​

Kaynak kaydı ve kaldırma, eşitleme, içe aktarma ve imaj kaldırma, eylemin kendisinden önce güvenlik günlüğüne bir niyet kaydı yazar. Kaydın yazılması için varsayılan olarak iki saniyelik bir süre sınırı vardır. Günlük olayı kabul etmezse işlem başlamaz ve -503 kodunu döndürür. Ne katalogda ne de düğümlerde herhangi bir şey değişir.

Kaynak listesinin ve imaj kataloğunun başarılı okumaları günlüğe kaydedilmez, ancak herhangi bir imaj işlemi için erişim reddi bir auth.image_library_access_denied kaydı bırakır. Bağımlılıkların görüntülenmesi bir config.image_dependencies_viewed olayı olarak kaydedilir. Kaldırma aşamalarının kendi kayıtları vardır: config.image_remove_initiated, config.image_removed, config.image_remove_partial, config.image_remove_failed ve config.image_remove_blocked_dependencies. Her kayıt bir VDC ilişkisini veya nesnenin küme genelinde paylaşıldığına dair bir göstergeyi, çağıranın erişim kapsamını ve tanımlayıcısını içerir. Günlükte depolama yolları veya havuz topolojisi bulunmaz; yalnızca düğüm tanımlayıcıları ve toplam sayılar bulunur.

Sınırlamalar​

Yalnızca zfs biçimi içe aktarılabilir. Bir havuzdaki imaj kopyası, makine disklerinin klonlandığı bir ZFS veri kümesidir (dataset); bu nedenle başka bir biçimi dağıtacak yer yoktur. Başka biçimdeki bir imaj, kaynak kataloğunda içe aktarmaya uygun değil olarak görünür ve içe aktarmanın kendisi -48005 kodunu döndürür. Geçici çözüm: imajın zfs varyantını manifeste ekleyin.

Şifrelenmemiş http varsayılan olarak engellenir. Kütüphane, kümedeki tüm makinelerin oluşturulduğu verileri sağlar; bu nedenle kanalın doğrulanabilir olması gerekir. Açık izin olmadan bir http URL'si -46011 koduyla reddedilir. Geçici çözüm: kaynağı https üzerinden yayınlayın; izni yalıtılmış bir test ortamına saklayın.

Dahili adresler yasaktır. Loopback, link-local, meta veri servisi adresi, özel bir RFC 1918 aralığı, CGNAT, "sıfır ağı" veya yayın adresine çözümlenen bir kaynak ana bilgisayarı -46012 koduyla reddedilir. Bu kısıtlama kaldırılamaz: kümenin başkasının yönlendirmesiyle kendisine erişmesini önler. Dahili bir ağdaki kütüphane tamamen bu kısıtlamanın kapsamına girer. Geçici çözüm: kütüphaneyi listelenen aralıkların dışındaki bir adrese taşıyın.

Kaynağı kaldırmak imajlarını bırakır. Bir kaynağı kaldırmak yalnızca kaydı ve VDC bağlantılarını siler; ondan içe aktarılan imajlar katalogda kalır, ancak kaynakla bağlantılarını kaybeder. VDC yöneticisi yalnızca kendi VDC'sinin kaynağını kaldırır; kümede paylaşılan bir kaynağı Cluster master rolü kaldırır. URL'yi değiştirmek için kaynağı kaldırmaya gerek yoktur: mevcut bir kaynak tanımlayıcısıyla yapılan kayıt, kaynağın adının ve URL'sinin üzerine yazma işlevi görür.

İçe aktarma dağıtım servisini gerektirir. Dağıtılmış bir vstack-center-image-distributor (ve gerekli vhost'u imgdistr_vhost) olmadan baytları aktaracak bir şey yoktur. Tek geçici çözüm servisi dağıtmaktır; eşitleme dağıtım servisini kullanmaz ve yalnızca manifesti okur.

Bağımlılık denetimleri eksik olabilir. Klon haritası tüm düğümler sorgulanarak oluşturulur ve erişilemeyen bir düğüm yanıta dahil edilmez; atlanmış olarak işaretlenir. Geçici çözüm: düğümün geri dönmesini bekleyin ve haritayı yeniden alın; bu durumda kaldırma yine kısmi bir sonuçla biter.

Daha fazla bilgi​

API yöntemleri​

Bu sayfada ele alınan API işlemleri os-library-set, os-library-delete, os-library-list, os-library-sync, os-image-import, os-image-from-vm, golden-images-list, golden-image-clones ve golden-image-remove işlemleridir; API başvurusuna bakın.