OpenStack_Serisi #2 — Temel ve İsteğe Bağlı Servisler

Ozan Eren
Devops Türkiye☁️ 🐧 🐳 ☸️
8 min readJul 21, 2019

Merhaba,uzun bir aradan sonra OpenStack serisinin 2.yazısıyla devam ediyoruz.Bir önceki yazıda OpenStack hakkında genel bilgiler ve kullanım alanlarıyla ilgili genel bilgileri sizinle paylaşmıştım:

Bu yazıda ise OpenStack bileşenleri ve mimarisi üzerine bazı bilgileri sizinle paylaşmak istiyorum.

Diğer bulut sağlayıcılarında olduğu gibi OpenStack de bazı servis bileşenlerinden oluşan bir yapı.Bunlar bazıları “temel servisler” diğerleri ise “additional(ek,ilave) servisler” olarak adlandırabileceğimiz ekstra bileşenlerdir.Ayrıca tüm bu servisler Python dilinde yazılmıştır.

Temel servisler adından da anlaşılabileceği gibi diğer tüm servislerin onlarla konuşarak çalışabilmesi için gerekli olan bileşenlerdir.Yazının devamında bahsedeceğim bu servislerin kurulumları tek tek yapılabilir.Aslında ileriki kurulum yazılarında bahsedeceğim gibi temel servisleri işletim sistemine Packstack veya Devstack ile (yükleme için yönetim araçları olarak düşünebiliriz.Devstack Ubuntu,Packstack CentOS-RHEL gibi OS lar içindir.) toplu olarak kurabiliyoruz.

İsteğe bağlı bileşenler ise yine OpenStack toplulukları tarafından ihtiyaçlara göre yazılan bileşenlerdir.Bu bileşenleri ihtiyaçlarınıza ve projenize göre OpenStack üzerine kurabiliyoruz.

Aşağıdaki görselde bu servisler bir çoğu yer almaktadır:

OpenStack Core ve Optional Servisleri

Şimdi ise temel servisleri tanıyalım…

- Temel Servisler

OpenStack temel servisleri kendi aralarında aşağıdaki basit mimari resminde görünen gibi bir ilişkiye sahiptirler:

OpenStack Temel Servisleri-Basit Mimari Gösterimi

Bu servisler kendi aralarında API’ler sayesinde konuşabilmekte ve çalışabilmektedir.Aşağıda daha detaylı olarak mimaride bunlar görülebilir:

OpenStack Temel Servisler-Detaylı Mimari Gösterimi

Şimdi de temel servislere tek tek bakalım:

Identity Service(Keystone)

Kimlik yönetim servisi olan Keystone,projelerinizin kullanıcılarından OpenStack üzerindeki yetkiye sahip diğer kullanıcılara kadar birçok kimlik bilgisini yöneten servistir.OpenStack sistemi üzerinde tüm yetkilendirme ve doğrulama işlemlerini yapan servistir.Bu servis ayrıca var olan kullanıcıları ve projeleri merkezi bir alandan yönetmeyi de sağlar.LDAP vb. servisler ile entegre edilebilir yapısı vardır.

Daha fazla bilgi için bakabilirsiniz…

Object Storage(Swift)

MPEG4,jpg gibi basit temel objeleri saklayabilen Swift,HTTP tabanlı API sayesinde HTTP metodları ile taşınmasını sağlar ve saklar.Esnek,ölçeklenebilir ve basit bir yapısı vardır.Veri merkezi içinde yatay olarak ölçeklendirebilirsiniz.(horizantally scale)

Wikipedia vb. siteler bu nesne çözümünü kullanmaktadır.Araştırmalarıma göre de Turkcell bu depolama çözümünü kendi sistemlerinde kullanmaktadır.

Daha fazla bilgi için bakabilirsiniz…

Image Service(Glance)

Bu servis OpenStack üzerinde kurulacak sanal makinelerin imagelarının yönetiminin yapıldığı yerdir.Depolanan imageları şablon olarak bu servis sayesinde kullanarak yeni sanal makineleri kaynaklar doğrultusunda istediğiniz kadar kurabilirsiniz.Ayrıca REST API sayesinde sahip olunan image lar hakkında bilgileri ve bu imageları yeni serverlara aktarabilirsiniz.

Daha fazla bilgi için bakabilirsiniz…

Networking Service(Neutron)

OpenStack için tüm network ve IP adreslerini yöneten servistir.Bu servis sayesinde kullanıcılar static IP,DHCP veya Floating IP(Kayan IP-aynı data center üzerinde bir IP adresini anında başka bir servise geçirmek.),VLAN oluşturma gibi işlemlerini kolayca yapabilirler.Ayrıca kullanıcı kendi projesi için gerekli ağ topolojisini de bu servis sayesinde sağlayabilir.

Neutron sayesinde saldırı önleme sistemleri,firewall,SDN,load balancer ve VPN hizmetler de sağlanabilir.

Daha fazla bilgi için bakabilirsiniz…

Block Storage(Cinder)

OpenStack üzerindeki instanceların(var olan makinelerin) bilgilerinin ve ihtiyaçlarının saklanması için kullanılan depolama servisidir.Buna ek olarak sanal makinelerin alınan snapshotları bu servis üzerinde tutulur.Gerektiğinde tekrar bu servis üzerinden sanal makineler restore edilebilir.Bu servis OpenStack Cloud hizmeti için birincil veya ek olarak bir depolama çözümü olarak kullanılması yapılan işin maksimize edilmesi için yararlı bir çözümdür.

Daha fazla bilgi için bakabilirsiniz…

Compute Service(Nova)

IaaS(Infrastructure as a Service) olarak kurulan bir mimaride sanallaştırma ve kaynak yönetiminin yapıldığı servistir. Yönetim, sunucu kaynak havuzunun otomatikleştirilmesi hem de bare metal ve HPC(high performance computing)genişletilmiş sanallaştırma teknolojilerine uygun olarak çalışması için tasarlanmıştır. KVM,VMware,Xen,Hyper-V,XenServer,LXC gibi destekleri bulunmaktadır.

Nova’nın mimarisi standart olarak yatay olarak ölçeklenecek şekilde(horizantally scale)tasarlanmıştır.

Daha fazla bilgi için bakabilirsiniz…

Dashboard(Horizon)

OpenStack üzerindeki işlemleri web arayüzünde grafikler,sürükle-bırak,tıklama ile kolayca yönetebildiğimiz ve kontrolünü sağlayabildiğimiz bir araçtır.Bu araç OpenStack üzerindeki servislerin de arayüzünü sağlar ve bir anlamda komut satırlarından biraz soyutlanmamızı sağlar.

Horizon,değiştirilebilir yapısı sayesinde birçok sağlayıcı arayüzü yeniden tasarlayarak bunu bir ürün olarak kullandırmasını sağlar.Monitoring,network topoloji,sanal makine yönetimi gibi işlemlerde arayüz ile kolayca halledilebilmektedir.

Daha fazla bilgi için bakabilirsiniz…

- İsteğe Bağlı Servisler

Bu kısımda OpenStack servisleri içinde temel olarak değil fakat kuracağınız mimari ve iş türüne göre kullanabileceğiniz bazı servislerden bahsetmek istiyorum.Hepsinden bahsetmesem de kullanım oranları en fazla olan ve popüler bileşenleri inceledim:

Bare Metal Service (Ironic)

İronic, bare metal yani fiziksel makinelerin sağlanmasını,yönetilmesini ve destek verilmesini sağlayan bir bileşendir.Bunu yapmak için Nova bare metal driver yararlanarak fiziksel makineleri sağlar.Bağımsız olarak veya OpenStack Cloud içerisindeki diğer bileşenler ile(Nova,Neutron,Keystone,Glance,Swift) entegre olarak çalışabilir.Peki tam olarak bare metal yani fiziksel sunucuları sanallaştırma gibi bir teknoloji varken neden direkt olarak kullanırız?Buna örnek birkaç sebebi aşağıdaki gibi sıralayabiliriz:

  • Yüksek performanslı işlem kümeleri oluşturabilmek için.
  • Sanallaştırma teknolojisinin uygulanamadığı cihazlar üzerindeki bazı işlem görevlerini yapabilmek için.
  • Database hosting işlemleri için. (bazı databaseler sanallaştırmaya destek açısından zayıf kalmaktadır.)
  • Bazı özel performans donanımları, güvenilebilirlik,diğer düzenleyici gereksinimlere bağlı kalabilmek için.
  • Hızlı bir cloud altyapısı hazırlamak amacıyla kullanılan kaynaklar için.

Doğru yapıldığı takdirde,API ların da yardımı ile,planlanan OpenStack Cloud yapısı içerisinde hem sanal makineler hem de fiziksel makineler verimli bir şekilde kullanılabilir.Yine de bahsedilen fiziksel makinelerin vendorlarına göre değişen sahip olduğu farklı karakteristik özellikler dolayısıyla bazı aksiyonlar limitli kalabilmektedir.Örneğin, live migration bare metal bir instance üzerinde yapılamıyor.

OpenStack Cloud topluluğu yine de geniş bir donanım yelpazesini kapsayacak şekilde açık kaynaklı teknolojilerden(PXE,IPMI vb.) teknolojilerden yararlanıyor.Ayrıca Ironic,sahip olduğu “pluggable driver” mimarisi sayesinde donanım vendorlarına performansı arttırabilecek,uyum sağlayabilecek,topluluk sürücüleri tarafından sağlanmayan işlevleri kendilerine ekleyebilecek olanaklar sağlar.

Daha fazla bilgi için bakabilirsiniz…

Container Orchestration Engines Provision Service(Magnum)

Magnum,OpenStack Containers Team tarafından geliştirilen ve üzerlerinde Docker,Mesos gibi container teknolojileri barındıran gibi COE leri(Container Orchestration Engines: Docker Swarm,Kubernetes,Apache Mesos) OpenStack içerisinde kaynak olarak kullanmayı sağlayan bir servistir.

Magnum temelde bunu yaparken OpenStack içerisindeki başka bir servis olan Heat’in özelliklerinden yararlanır.Kısaca Heat’den bahsetmek istersek…Heat, orchestration ve infrastructure sağlayan ve bunu sağlarken farklı yapılardaki cloud uygulamalarını “template” yapısını kullanarak hazırlayan bir servistir diyebiliriz.Buradaki ve buradaki linkteki videoları kısaca izlersek bu servisin ne işe yaradığını daha iyi anlayabiliriz ve aslında bahsettiğimiz “template” yapısını Docker vb. birçok teknolojide kullandığımız YML uzantılı dosyalara benzetebiliriz.

Heat’in özelliklerinden olan template yapısını kullanarak hazırlanan imajları kullanan Magnum COE üzerlerinde gerekli mimariyi oluşturabilir ve sanal makine veya bare metal makine ayrımı yapmaksızın bunları çalıştırabilir.Magnum’un sağladığı diğer faydaları ise şöyle sıralayabiliriz:

  • API bazlı olarak container clusterları için life-cycle management
  • Container clusterları için multi-tenancy yapı.
  • Bare metal veya sanal sunucular farketmeksizin istenilen multi-tenancy yapıyı OpenStack üzerinde kurgulanabiliri.
  • Keystone bazlı multi-tenant güvenlik ve yetkilendirme yönetimi
  • Neutron bazlı network yönetimi ve izolasyonu
  • Cinder bazlı containerlar için volume imkanları
  • Cloud kullanıcıları için SSO(Single-Sign-On) sağlar ve güvenli container yapıları için TLS ile erişime imkan sağlar.

Daha fazla bilgi için bakabilirsiniz…

Shared File System Service (Manila)

Manila,OpenStack ortamı içerisinde vendor bağımısız olarak ve farklı şekillerde dosya paylaşımını destekleyen ve yöneten bir servistir.Yazımızın başında bahsettiğimiz Cinder servisinden farklı olarak bu servis,API’ları sayesinde farklı vendorlara bağlı ve farklı türdeki depolama birimleri için standart bir düzlemde yönetim ve kontrol sağlar.Bunlara örnek olarak NAS hostlarını bir araya toplayan GlusterFS,Ceph ürünleri ve NFS,CIFS,HDFS gibi depolama çözümleri protokollerini kullanan örnek gösterebiliriz.OpenStack içerisinde çalışan bu dosya sistemleri hangi kaynağa ilişkin verileri tutatsa tutsun Manila sayesinde bunlar tek bir düzlemden görülebilir ve yönetilebilir.

Dosya tabanlı depolama sistemleri(file-based-storage systems) gelişen bir pazardır.Buna bağlı olarak geliştirilen uygulamalar için kullanılan dağıtık veya ilişkisel veritabanları da sıklıkla değişmektedir.Manila sayesinde OpenStack gibi bir cloud ortamında bu tür uygulamaların sorunsuz olarak ve çok kiracılı bir yapıda paylaşımlı çalışması sağlanabilir.

Daha fazla bilgi için bakabilirsiniz…

Messaging Service — Message Broker Provisioning Service(Zaqar)

Zaqar,web ve mobil geliştiriciler için çok kullanıcılı-kiracılı bir cloud messaging service tir.Amazon SQS servisinin temeldeki bazı özelliklerini alarak geliştirilen bu servis geliştiriciler için Amazon SQS ve SNS’e bir alternatif olabilir.Bu servis REST API,sayesinde geliştiricilerin kendi uygulamaları için tasarladıkları SaaS iletişim ortamlarında(communication patterns) bileşenler arası mesaj gönderimlerini sağlar.Bu REST API içerisinde güvenilir,ölçeklenebilir ve verimli bir mesajlaşma motoru bulunur(messaging engine).Ayrıca isteğe göre Websocket API’de kullanılabilir.

Zaqar için API ve data-oriented yani veri odaklı olduğunu söyleyebiliriz.Bu da şu anlama gelmektedir;direkt olarak bir message broker olarak çalışmaz ve backend den gelen mesajları direkt olarak client a iletmez.Bunun yerine bir veya daha fazla backend ile client arasında iletişim için cloud seviyesinde bir köprü oluşturur.

Teknik olarak sağladığı faydalardan biraz bahsetmek istersek şunları söyleyebiliriz:

  • Keystone tarafından da desteklenen iki farklı haberleşme iletim türünden biri seçilebilir:
    - HTTP tabanlı RESTful APIGünümüzde birçok geliştirici tarafından tercih edilen bu yöntem hem web hem de firewall dostu olması yönüyle biliniyor.Buna sebep olanda bu protokolün sadeliği ve yapılan işlemlerin sadeliği.Bununla beraber bu protokol için büyük cloud ortamlarında kullanıldığını ve load balancer,firewall,proxy ler yönetimi için kolaylık sağladığını söyleyebiliri.Ayrıca REST API mimarisinin kullanılması büyük cloud provider lar tarafından pratikte tavsiye ve takdir ediliyor.
    -Websocket tabanı API… Sürekli bağlantılar üzerinden(persistent connections) haberleşmeyi sağlayan bir yöntemdir.HTTP’nin kullandığı her bir istek/cevap çifti için yeni bağlantı açma yöntemi yerine,Websocket tek bir TCP bağlantısı üzerinden birden fazla istek/cevap çifti transfer edebilir.Bu sonuncu olarak da network trafiği kullanımından tasarruf edilmiş ve gecikmeler azaltılmış olur.

Önemli olarak gördüğüm REST ve Websocket servisleri arasındaki farkları daha detaylı olarak buradan görebilirsiniz.

  • Birçok farklı iletişim pattern türüne destek verir.(broadcasting,task distribution,point-to-point messaging vs.)
  • Özel bileşen tabanlı mimariler için birçok farklı backend seçenekleri ve mesaj filtreleri sunar.
  • High-avaliable ve horizantally scalable edilebilirdir.
  • Birçok message queue için destek verebilir ve notification type kullanılabilir.(Email notifications,Webhook notifications,Websocket notifications)

Daha fazla bilgi için bakabilirsiniz…

- SON

Bu yazı için incelemeyi uygun gördüğüm servisler şimdilik bu kadar.Belirtmek isterim ki OpenStack Community leri ve bazı şirketler tarafından destek verilen,geliştirilen daha birçok servis var.Bu servisleri için buradaki linkteki “Reviews by Module” kısmından geliştirme oranlarına,kimlerin katkı verdiğine ve buradaki linkten isimlerine,kullanım yerlerine,ayrıntılı teknik bilgilere bakabilirsiniz.Bu yazı içerisindeki tüm bilgiler için OpenStack offical sitesindeki ilgili servislerin dökümanlarından ve servisleri araştırırken daha açıklayıcı olması için araştırma yaptığım sitelerden yararlandım.

Son olarak eklemek isterim ki, bu servisler kendi içlerinde her biri detaylı özellikler ve alt bileşenler içermektedir. Birçoğunun içerisinde alt bileşen olarak adlandırdığım “low-level-services” lar sayesinde API iletişimi ve diğer servisler ile uyum içerisinde çalışması sağlanmıştır.Ayrıca birçoğunun da Python ile yazıldığını da söyleyebilirim.Bunların detaylarına,mimarilerine,kurulum aşamalarına ve diğer servisler ile entegrasyonuna her bir servisin altındaki linke tıklarak çok daha detaylı bilgiye sahip olabilirsiniz.

Bir sonraki yazıda görüşmek üzere…
Hoşçakalın…

--

--