İş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ık | Başvuru biçimi | Ait olduğu yer |
|---|---|---|
| Kütüphane kaynağı | Tam sayı tanımlayıcı | Küme (paylaşılan) veya tek bir VDC |
| Katalogdaki imaj | UUID tanımlayıcı | Sahip VDC veya küme |
| İmaj kopyası | Bir düğüm → havuz çifti | Havuz |
Nasıl çalışır
Kütüphaneyle çalışma, her biri kendi yetkisine sahip sekiz işlemden oluşur.
| Görev | Mod | Yetki |
|---|---|---|
| Kaynak kaydetme veya yeniden yapılandırma | Eşzamanlı | Manage Image Library |
| Kaynak kaldırma | Eşzamanlı | Manage Image Library |
| Mevcut kaynakları görüntüleme | Eşzamanlı | View Image Library |
| Kaynak kataloğunu okuma | Eşzamanlı | Sync Image Library |
| İmajı kümeye içe aktarma | Eşzamansız | Import Golden Image |
| Küme imaj kataloğunu görüntüleme | Eşzamanlı | View Image Catalog |
| İmaj bağımlılık haritasını alma | Eşzamanlı | View Image Dependencies |
| İmajı kümeden kaldırma | Eş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şama | Anlamı | Eylem |
|---|---|---|
importing | İmaj indiriliyor ve dağıtılıyor | Bekleyin |
active | İmaj seçilen tüm havuzlara dağıtıldı | VM oluşturulabilir |
partial_active | Bazı havuzlar kopya almadı | Aynı sürümü yeniden içe aktararak dağıtımı tamamlayın |
failed | Deneme tamamen başarısız oldu | Nedenini araştırın ve içe aktarmayı yeniden başlatın |
deleting | İmaj kaldırılıyor | Sonucu 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
- İşletim sistemi imajını kümeye içe aktarma — kaynak kataloğunu okuma, içe aktarmayı başlatma ve havuzlara dağıtımı izleme.
- İşletim sistemi imajını kaldırma — bağımlılıkları denetleme, geri döndürülemez kaldırma ve kısmi sonucu araştırma.
- Sanal makine oluşturma, kaldırma ve taşıma — makine oluştururken imaj ve havuz seçme.
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.