Container: Yarının Değil, Bugünün Teknolojisi

Geçtiğimiz 2015 senesi içerisinde, sanallaştırma, performans ve kaynak yönetimi konularında çalışan IT profesyonelleri ve DevOps geliştiriciler için özellikle iki terim/teknoloji öne çıktı: Container ve Docker. Konteyner ve Liman olarak çevirdiğimizde neden bahsediyor bu adam dedirtecek iki terim olsa da, aslında anlamsal bağlamı ile işlevsellikleri yakından ilişkili iki terim.

Container teknolojisi yeni bir teknoloji değil ancak, Docker ile beraber kullanımı söz konusu olduğunda bizleri heyecanlandıracak özellikler, devrim niteliği taşıyan yeni ufuklar açıyor.

Bu yazıda, ilerleyen bölümlerde mevcut veri merkezlerinde kullanmakta olduğumuz Fiziksel Sunucu, Sanallaştırma ve Konteyner teknolojilerini karşılaştırmaya ve yorum yapmaya çalışacağız. Tabii ki avantaj ve dezavantajlarından bahsederken tartışmalı alanlara gireceğiz. Dolayısı ile her üç teknolojinin veya yöntemin de yeri geldiğinde kullanım alanı bulduğunu, tercih edilebildiğini unutmamamız gerektiğini söyleyerek başlayalım.


Öncelikle (Container) Konteyner Nedir?

Wikipedia container teknolojisini İşletim sistemi seviyesinde sanallaştırma olarak tanımlıyor. Çekirdek sanallaştırma olarak da tabir edilen ve aslında uzun süredir farklı yöntemler ile kullanılmakta olan bir teknoloji olan konteynerlar, aynı işletim sistemi içerisinde farklı kullanıcı seviyesinde, aynı çekirdeği kullanan izole sanal makinalardır. Her Unix/Linux sistem yöneticisinin bildiği, jail veya chroot olarak tabir ettiğimiz izole alanlara benzerler.

DockerLogo

Yazılımsal, sanallaştırma veya jail (FreeBSD jail veya chroot jail) yöntemi ile yapılsın, tüm konteynerlar sistemin sahibine ve kullanıcıya normal bir işletim sisteminin tüm özelliklerini sunmaya ve hissettirmeye çalışırlar.


Geleneksel Fiziksel Sunucu Sistemler

Geleneksel sunucu sistemler fiziksel bir donanım üzerinde koşan tek bir işletim sisteminden oluşurlar. Halen daha, özellikle veritabanı yöneticilerinin favorisidirler. Uzun yıllar bu şekilde her bir görevi, hizmeti veren sunucularımızı fiziksel sunucular üzerinde koştuktan sonra, bunun idame edilebilir, performansı kolaylıkla optimize edilebilen, esnek bir yapı olmadığını anladığımızda yerini hızla sanallaştırmaya bırakmıştır.

Geleneksel Fiziksel Sunucu Sistemi
Geleneksel Fiziksel Sunucu Sistemi

Geleneksel Fiziksel Sunucu Sistemlerin Avantajları

Hiç yok diyemeyeceğimiz kadar da olsa bazı temel avantajları mevcuttur.

KAYNAKLARIN DOĞRUDAN KULLANIMI

Mevcut fiziksel sunucu üzerindeki tüm kaynaklar hiçbir kesinti olmaksızın doğrudan işletim sistemi ve uygulamalar tarafından kullanılabilir. Bunun tabii ki ana sebeplerinden birisi, arada bir hipervizörün olmayışıdır.

İZOLASYON

Uygulama ve veriler fizksel olarak izoledir. Aynı fiziksel sunucuyu paylaşan başka bir misafir işletim sistemi yoktur. Diğer taraftan çoğu sanallaştırma ve konteynerlaştırma sistemi fiziksel sunucunun kaynaklarını başka sanal makinalar veya konteynerlar ile paylaşırlar.

Geleneksel Fiziksel Sunucu Sistemlerin Dezavantajları

Geleneksel sunucu sistemlerin dezavantajları ve sıkıntıları günümüzün modern sanallaştırma sistemlerini doğurmuştur. Dolayısı ile azımsanmayacak kadar ciddi problemlerinin olduğunu biliyoruz.

YAVAŞ YÜKLEME VE AYAĞA KALDIRMA SÜRESİ

Çoğunlukla, veri merkezinde fiziksel makinanın başında geçen saatlere mal olurlar. Yerinde ve başında olarak tüm işlemlerin sıfırdan tek tek yapılmasını gerektirirler.

PAHALI

Donanımın tamamını kullandırabilirsiniz ancak çoğunlukla ileriyi düşünerek mevcut yükün çok üzerinde kaynak ile beraber satın alırsınız. Büyüme genellikle dikeyde mevcut fiziksel donanımın artırılması ile sağlandığından, acı verici ve yorucu olmaktadır. Yıllar geçtikçe çöpe gitme olasılıkları yükselir zira artırmak istediğiniz kaynakların parçalarını bulmak ve fiyatlarına tahammil etmek zorlaşmaya başlar. Çoğu hayatına veritabanı, e-posta sunucusu vs olarak başlayan fiziksel sunucular henüz orta yaşa gelememiş iken, hayatlarının baharında, kendilerini masa başı görevde bulurlar; bilmem kaçıncı yedek DNS sunucusu veya hatta Azerbaycan şantiyesinin Proxy makinası…

İSRAF EDİLEN KAYNAKLAR

Bugünün şartlarında yapılan hesaplar ile birkaç sene içerisinde kapasitenin büyümesini göz önüne alan yöneticiler fiziksel sunucuları birkaç beden büyük alma alışkanlığındadırlar. Biraz uzun alalım seneye de giysin dediğimiz çocuk kıyafetlerinden farkı yoktur. Dolayısı ile mevcut kapasitenin sadece %30-40’ını kullanarak bir ömür tüketen birçok fiziksel sunucu tanırım. Bunun üzerine Türkiye özelinde yukarıdaki hesabı yapanların kimler olduğunu gözünüzün önüne getirin. Yine Türkiye şartlarında donanım satışçılarının açlığını da bu hesaba katın, içiniz elvermez bu tabloya bakmaya.

ÖLÇEKLENDİRME ZORLUĞU

Yeni bir fiziksel sunucuya tüm sistemi aktarmak demek genellikle sıfırdan kurulum anlamına gelir. Tabii yine sırf bu ihtiyaç dolayısı ile ortaya çıkan yazılımların lisanslarına para vermek istemiyorsanız… Dolayısı ile downtime tabie edilen kesinti süreleri uzun hatta uzuuun olabilir.

GÖÇ ZORLUĞU

Diyelim ki bir fiziksel sunucudan diğerine taşıma (göç) yapabileceğiniz ücretli araçlara sahipsiniz. Genellik işletim sisteminiz eskimiş, yeni aldığınız donanım ile uyumsuzdur, işletim sisteminiz de Linux değil de Windows ise unutun o işi, sıfırdan kurulum yapacaksınız, her ayarı her uygulama gereksinimini diğer sunucudan bakarak aynısını insan hatası olasılığını da ekleyerek yapacaksınız demektir. Hatt-ı zatında, tüm göç yazılımlarının EULA sında şu yazar:

Ben ilgili yazılımın bu işlemi %100 başarımla yapamama olasılığı olduğunu kabul ediyor, veri ve zaman kaybı dahil tüm mesuliyeti üzerime alıyorum.


Sanallaştırma Sistemleri

Sanallaştırma hipervizörünü çalıştıran bir fiziksel sunucunun üzerinde koşan bir işletim sistemi (konak) ve üzerinde ikamet eden konuk sanal makianalardan oluşur. Fiziksel sunucu üzerindeki tüm kaynaklar, CPU, Bellek, Ağ kartı vb konuklar ve konak tarafından paylaşımlı olarak kaullanılmaktadır.

Sanallaştırma Sistemleri
Sanallaştırma Sistemleri

Sanallaştırma sistemlerinin bugün neden bu kadar popüler olduğunu anlamak için avantaj ve dezavantajlarına bir göz atmamız yeterli olacaktır. Fiziksel sunucuların yerini büyük oranda sanal sunuculara bırakmasının birden fazla sebebi var.

Sanallaştırmanın Avantajları

Fiziksel sunucuların yerini büyük oranda sanal sunuculara bırakmasının birden fazla sebebi var.

KAYNAKLARIN VERİMLİ KULLANIMI

Sanallaştırmada temel olarak bir fiziksel sunucunun kaynakları birden fazla sanal sunucuya bölünerek kullanılır. Sanallaştırma hipervizörü bu kaynakların paylaşımını düzenleyen bir organizatördür. Hipervizör kaynakları kullanıcının tanımladığı şekilde sabit veya önceliğe göre esnek planlayabilir. Bir sanal konuk diğer konukların kullanmadığı esnada daha fazla kaynak kullanarak işlerini hızlandırabilir. Her sanal konuğun kendisine ayrılmış işlemci, bellek, disk alanı gibi donanımı mevcuttur. Aynı zamanda her sanal konuk kendi özel işletim sistemini kullanır. Bu işletim sisteminin seçimi hipervizörü işleten konak işletim sisteminden farklı veya aynı olabilir.

KOLAY ÖLÇEKLENDİRME

Daha fazla uygulamaya veya sanal konuğa ihtiyacınınz olduğunda yeni sanal konuklar kolaylıkla ve hızlıca açılabilir. Daha önce hazırlanmış şablonlardan yeni bir işletim sistemi ve uygulama kurma gereksinimi olmaksızın dakikalar hatta saniyeler içerisinde yeni bir sanal konuk açabilir hizmete sunabilirsiniz. Bu işlemler çeşitli sanallaştırma araçları ile otomasyona da bağlanabilmektedir. Sınırlarınız konak işletim sistemini barındıran fiziksel sunucunun donanımsal sınırları ile çizilmiştir.

Kümeleme teknolojilerinin kullanımı ile sanal konukların bir konaktan diğerine geçişi, çalışırken ve hizmet kesintisi olmaksızın yapılabilmekte, dolayısı ile donanımsal sorunlar veya performans ihtiyacı durumlarında sanal konukların kaydırılabilmesi mümkün kılınmıştır.

YEDEKLEME ve GERİ DÖNME

Yedekleme için (anlık görüntü) snapshot ve benzeri teknolojiler mevcuttur. Zaman içerisinde geri alma ileri sarma sistemleri gelişmiştir. Önemli bir güncelleme veya uygulama değişikliği öncesi alınan bir anlık görüntü, başarısızlık durumunda sistemin eski haline döndürülmesi ile felaketten kurtarabilir. Yedek mekanizmaları genellikle delta değişikliği alacak şekilde kurulmuş olduğundan, sadece değişen veri kadar yer tutar ve her seferinde tam sistem imajı almak gibi değerli depolama alanınızdan ve en önemlisi zamanınızdan harcamaz, hızlıdır, otomatikleştirilebilir. Üstelik bu esnada sistem çalışmaya ve hizmet vermeye devam edebilir.

BULUT İLE GELEN UCUZLUK

Günümüzde sık kullanılan, kurumsal veya açık bulut servisleri sayesinde sanallaştırma ile kullanılan kaynakların saatlik, günlük, aylık olarak faturalanması mümkün olmuştur. Dolayısı ile ayda bir çalıştırdığınız raporlama işlemi için çalışacak 10 kaplan gücünde bir sanal makinayı otomatik olarak açıp işi bitince kapatmak mümkün olmakta, dolayısı ile ayda bir çalışacak bir işlem için hali hazırda bekleyen bir fiziksel makinadan ve gereksiz bekleyen kaynakların israfından kurtarır.

Sanallaştırmanın Dezavantajları

Saydığımız bu avantajlara ve aklımıza bir çırpıda gelmeyen bir çok avantaja karşın, sanallaştırma sistemlerinin de bazı dezavantajları vardır. Bunlar sebebi ile zaten konteyner sistemleri öne çıkmaya başlamıştır.

KAYNAK YÖNETİMİ SORUNSALI

Tüm avantajına ve kolaylığına rağmen sanal konaklar içerisinde mevcut fiziksel sınırlamaların çizdiği sınırlar dahilinde kaynak planlaması yapmak yine de insan görevidir, ve biz IT profesyonelleri biliriz ki, birler ve sıfırlardan uzaklaştığımızda evrene karmaşa hakim olacaktır. Hele de Türkiye şartlarında uzun vadeli planlamaların 2 gün, kısa vadeli planlamaların 2 saat ile özümsendiğini bildiğimizde bu sorun daha da karmaşık hale gelecektir, ister istemez.

Sanal konakların tam ihtiyacı olduğu kaynakların hesaplanması ve paylaşılan bir ortamda bunun planlanması insan becerisine dayanır. O beceri de olmayınca… Uzun yıllardır bu sektörde farklı sanallaştırma mimarileri ve çözümleri ile çalışan bir IT profesyoneli olarak rahatlıkla şunu söyleyebilirim ki, biz Türklerin kullanabileceği sanallaştırma otomasyonu, orkestrasyon uygulaması henüz yazılmamıştır. Başka bir yazımızda belki bu konuya değiniriz.

MARKA BAĞIMLILIK

Seçtiğiniz sanallaştırma sistemi sizi bir sisteme bağımlı kılabilir (Vendor Lockin). Bir hipervizörden farklı bir hipervizöre sanal makina taşıma işlemini yapabilen orkestrasyon sistemleri mevcuttur, (bkz: PlateSpin Orchestrator) ancak bu işlem bir sanal konuğu aynı türde bir sanal konaktan diğerine kaydırmaya benzemez ve garantili olmayabilir. Türkiye koşullarında neredeyse tüm ESX’lerin ücretsiz kullanıldığını, Microsoft Hipervizörün pazarlama aracı olarak 4 taneye kadar bedava mantığı ile birleştirince, ortaya birbirinden kopuk, tamamı bir bütün içerisinde planlanamayan ortaçağın feodal beyliklerini hatırlatan garip sanallaştırma ortamlarının çıkması doğaldır(!).

YÖNETİM ve AYAR KARMAŞASI

Sanal makina parkurunun planlanması kendi şahsına has bir birim olması gerekirken, bir de bakıyoruz ki, her departmana ait farklı sanallaştırma ortamları oluşmuş ve herbirinin yönetimi kendisinde. Veya, yukarıda bahsettiğimiz hibrit sanallaştırma platformu yapısından kaynaklanan bir şekilde yönetim ve ayarların karmaşasına dönüşmüş bir ortamla karşı karşıyayız.

O KADAR DA HIZLI DEĞİL Mİ YOKSA?

Diğer taraftan her uygulamanın işletim sistemi seviyesinde gereksinimleri farklı olabilmekte, veya bir uygulama farklı başka uygulamalara ihtiyaç duyarken diğeri bunları kullanmamakta. Sanallaştırmada hızı ve kolaylığı sağlayan şeyin şablonlar olduğunu söylemiştik. Ancak her uygulamaya has özel bir şablon oluşturmak da başlı başına bir iş. Üstelik şablonlar durdukları yerde kendi kendilerine güncellenmiyorlar. Sürekli yayınlanan güvenlik güncellemeleri veya Microsoft güncellemelerini düşünün. 3 ay önce oluşturduğunuz şablonu açtığnız, 89 adet kritik güncelleme sizi bekliyor, hız nerede kaldı?

Java 8 SE bu yazı yazıldığı tarihte 92. güncellemesine erişmiş durumdaydı! Ayrıca, Microsoft’un Salı Pazarı diyebileceğimiz Patch Tuesday ile ilgili kısa bir bilgiyi Wikipedia’dan okuyabilirsiniz.

WindowsUpdateHistory
Salı Pazarı Tarihçesi

Sanallaştırma veya Fiziksel Sunucu, yukarıdaki tüm işlemlerin her bir sunucuya ayrı ayrı yapılması gerektiğini biliyoruz. Ayrıca şunu da biliyoruz ki bu işlem birçok sebepten dolayı otomatikleştirilmez. Neden olduğunu biliyorsunuz; uygulama çalışmaz, makina kendisine gelemez, plansız hizmet kesintisi oluşur vs.


Konteyner Sistemler

Konteyner sisteminin temel olarak sanallaştırmadan farkı konteyner sistemin konağa ait işletim sistemi ve çekirdeğini kullanıyor olmasıdır. Sanal konuklara konteyner denir ve konak tabir edilen sistem fiziksel makina veya sanal makina olabilir.

Konağın çekirdeğinin kullanılması, kaynak yönetiminde daha hafif bir katman sunarken, işletim sistemi yönetimini sanal makina kadar işletim sisteminden tek bir işletim sisteminin idame edilmesine kadar indirgeyerek kolaylık sunar. Her konteyner sistemin kendisine özel kök dosya sistemi, süreçleri, bellek alanı, aygıt ve ağ arayüzü mevcuttur.

Konteyner Sistemler
Konteyner Sistemler

Konteyner Sisteminin Avantajları

Tüm sanallaştırma sistemi avantajlarına sahip olmakla beraber, konteyner sistemler bunun da ötesinde sanallaştırma sisteminin zayıflıklarını örtecek şekilde tasarlanmıştırlar.

İZOLASYON

Her uygulama kendi konteyner’ı içerisinde izole olarak çalışır. Kodunuz, uygulamanız bir konteyner içerisinde olduğundan, uygulamanızı taşımanız gerektiğinde tüm bağımlılıkları ile beraber alıp istediğiniz başka bir sistemin içerisine götürmeniz de mümkündür.

Uygulamanızı işletim sistemi ile beraber dağıtıyorsanız, hedef kullanıcının hengi işletim sistemini kullandığını düşünmezsiniz, ayrı ayrı ayar yapmakla uğraştırmazsınız.

KAYNAK TASARRUFU

Konteyner teknolojisi sanallaştırmaya oranla çok daha az kaynak tüketecek şekilde planlanmıştır. Konteynerlar işletim sistemi olarak konak işletim sistemini kullandıkları için, daha hafiftirler. Günümüzde sadece konteyner teknolojisi için üretilmiş veya optimize edilmiş işletim sistemleri mevcuttur. Konteynerları başlatıp durdurmak saniyeler içinde olur. Uzun uzuun, bir işletim sistemi ve çevresel aygıtların açılmasını, uygulamanın başlamasını beklemezsiniz, başlat dediğinizde 1001, 1002, 1003 ve çalışmaya başlamıştır.

GÜVENLİK

Her uygulama veya servisi kendisine has izole bir ortamda çalıştırmak eski bir fikirdi. Linux geçmişi olanlar bilir, bazı uygulamalar jail ortamlarda çalışmaya hazır olarak paketlenir ve hatta bunu şiddetle tavsiye ederlerdi. Bakınız bind9 dns sunucusu, vsftpd ve benzeri. Bu da üst düzey güvenlik demektir. Mevcut uygulamada oluşabilen veya ortaya çıkan bir açığın sonucunda saldırganın ilgili izole alan içine hapsedilmesi, konak işletim sistemine veya diğer servislere geçememesi demektir.

YANSI KABİLİYETİ

Geliştirme yapıyorsanız veya bir uygulamayı güncelleyip test etmek istiyorsanız, uygulamayı test ortamında hazırlayıp, güncelleyip sonra üretim (production) sunucusuna yansılayabilirsiniz. Eskiden beri sıkça kullanılan benim makinamda çalışıyor bahanesini unutuabilirsiniz.

TREND TEKNOLOJİ

Günümüz DevOps kullanıcıları ve teknolojik olarak esnek olan kurumlar çoktan bu teknolojinin nimetlerinden faydalanmaya başladılar. Microsoft, VMWare, Oracle gibi devler de bu teknolojiye eğilmiş durumdalar. Hızla artan bir popülerlik biz Türklerin asla sırtını dönemeyeceği anlamına geliyor, yanılıyor muyum?

Konteyner Teknolojisininz Dezavantajları

Bazen bazı teknolojiler istediğimiz sonucu almamızı sağlamayabilir. Veya kurumsal politikalar ve bürokrasi yeni teknolojilerin adapte edilmesini geciktirebilir. Bunun dışında, işte size bu teknolojiyi hali hazırda kullanmamanız için geçerli olabilecek bazı sebepler.

MİMARİ

Konteynerlar konak işletim sisteminin çekirdeğini kullanırlar demiştik. Bu da bir sunucu içerisindeki konteynerların aynı mimaride olmalarını şart koşuyor. 64bit mimaride hazırlanmış bir konteyner, farklı bir platform üzerinde 32bit olarak çalışmayacaktır.

ÇOK KAYNAK İSTEYEN UYGULAMALAR

Sanallaştırmada olduğu gibi, eğer uygulamanız çok kaynak tüketen bir uygulama ise bunun fiziksel sunucu üzerinde koşması halen daha makbul kabul edilmektedir. Örneğin, veritabanı sunucuları genellikle fiziksel sunucular üzerinde hizmet verir.

YENİ TEKNOLOJİ

Henüz konteyner teknolojisine bir standart gelmemiştir denebilir. Günümüzde açık kaynaklı özgür işletim sistemleri ve yazılımlar ile ağırlıklı olarak yönetilen, otomatize edilen konteyner teknolojisi günümüz IT profesyonelleri için halen yeni bir teknolojidir.

Galileo Galilei
Galileo Galilei 1564-1642

Galileo‘nun bu dünyada çektiklerini hatırlarsak eğer, her yeni teknolojiye geçişte ikna etmemiz gereken bir Roma Engizisyonu olacağını baştan kabul ederek hareket etmekte fayda var. Sonra bana gelip de, “vay kafamıza soktun da, söyledik de, deli dediler, işimizden de olduk” diye yakınmayın!

Yine de size söylemek isterim ki: dünya dönüyor, eskisinden çok daha hızlı bir şekilde…