Sanallaştırma (Virtualization), Containerization Dünyası
Sanallaştırma Dünyası
Öncelikle, bilişim dünyasında sanallaştırma, sanal makina kavramlarından bahsedelim. Şu an, bu makaleye ulaştığınız ortamı size sağlayan cihazın bu sayfayı yorumlayabilmesi için bazı bileşenlere ihtiyacı vardır. Bu bileşenler birçok modülden, yazılımdan meydana gelebilir. Şu an bu makaleyi okuyabiliyorsanız kompleks bir sistemin gereksinimlerinin bir araya geldiği bir sisteme sahipsiniz demektir. Bu bileşenler hem client (makaleyi okuyan), server (makaleyi sunan) için farklı bileşenler olabilir.
Gerekli yazılımsal donatılara sahip bir sistemi meydana getirmek için bileşenleri doğru şekilde bir araya getirmelisiniz. İşin arka planında bir işletim sistemini ihtiyacınıza uygun şekilde ortaya çıkarmak için birçok kurulum işlemini gerçekleştirmek gerekiyor. Bu konfigürasyonların hepsini doğru şekilde sağlayıp sistemi hazır hale getirirken her bir modül için özel bir işlem yapmanız gerekebilir. Örneğin web sunucusu için Nginx (Web protokollerine uygun hizmet sunan bir servis.) kullanmaya karar verdiniz ve gerekli kurulum dosyalarını edinip doğru parametreleri de manuel işlemler ile sağlamanız gerekiyor. Bu sistemin gerekli modüllerinden sadece bir tanesidir. Diğer gerekli tüm uygulama ve modülü bu şekilde konfigüre etme ihtiyacınızın sizlere oldukça yüklü bir işlem maliyeti getirmektedir.
Son olarak sanal makina ifadesine ulaşacak olursak; bu yaptığınız kurulumların tamamını bir paket haline getirip sakladığımızı düşünelim. (Bu paketleme işlemini sağlayan uygulamalar bulunmaktadır.) Oluşturduğumuz paket herhangi bir bilgisayarda yeniden kullanılabilir ve kişiye göre özelleştirilebilir sistemlerden bağımsız ve standartlara uygun bir pakettir. Bu noktada paket haline getirdiğimiz sistemi kullanabilecek bir işletim sistemine ihtiyaç duyacağız. İşte tam bu noktada Sanal Makina kavramı devreye girecektir. Temel anlamda mevcut işletim sisteminizden izole bir ortam oluşturarak sanal bir ortam üzerinde sakladığınız bu paketin bir işletim sistemine üzerinde çalıştırılmasını sağlayan bir yazılım çözümüdür diyebiliriz.
Sanallaştırmaya Alternatif Çözümler (Container)
Her geçen gün mevcut kullandığımız çözümler için daha iyi bir çözüm değişikliği ile karşılaşmaktayız. Ürettiğimiz çözümleri kullandıkça eksiklerini, iyileştirilebilecek noktalarını deneyimleyip daha iyi çözümlerin geldiğini görüyoruz ve belki de bu çözümlere katkı sağlayan tarafta oluyoruz.
Sanallaştırma işleminde bahsettiğimiz üzere programların kurulumu için bir işletim sistemi ihtiyacımız bulunmakta fakat bu işletim sistemi boyut anlamında kolay taşınabilir boyutlarda olmuyor. Dolayısı ile bir önceki yaptığımız işletim sistemi ve onun üzerine kurulan yazılımları daha küçük parçalara bölebileceğimiz daha modüler bir yapı daha iyi olmaz mıydı?
Aslında bu soruyu gündelik hayatımızda sürekli sorgulamaktayız. Örneğin şu anki süreçte ev taşıma aşamasındayım ve yatak odasındaki dolabımız bölünebilecek bir yapıda gibi görünse de aslında bölünemiyor ve tek bir gövdeye montajlı durumda dolayısıyla birden fazla parçadan oluşsa, modüler yapıya sahip olsaydı yeni evim için de kullanılabilir bir eşya olacaktı. :)
İhtiyaçlarımızın yeniden sorgulanması sonucunda bir çözüm daha karşımıza çıkıyor: “Containerization” “Konteynerleştirme” çözümü. Sanallaştırma işlemlerinde bütün bir işletim sistemini barındıran bir paket oluşturmuştuk. Container çözümündeyse İşletim sisteminin tamamı yerine işletim sisteminin temel (Çekirdek işletim sistemi) fonksiyonlarını yerine getiren bir paket olarak düşünebiliriz. Aynı şekilde ihtiyaç duyduğumuz uygulamalarında (node.js, .net runtime) paket hallerine bir portal üzerinden standart baz paketlerine ulaşabilmekteyiz. Bu yöntem sanallaştırmaya göre çok daha ufak, taşınması, üzerinde işlem yapılması daha kolay, hızlı bir çözüm olarak karşımıza çıkıyor.
Basit bir karşılaştırma;
Sanal makina Host OS üzerindeki Guest OS ler ile hizmet verir. Örneğin Host OS Windows Server — Guest OS ler ise Windows, Linux vb. herhangi bir işletim sistemi olabilir. Her Guest OS için tam bir işletim sisteminin çalışması için gerekli her türlü dosyanın burada yer aldığını düşünebilirsiniz.
BASİTÇE; BİR CONTAINER KOMUT ÇALIŞTIRMANIN SÜSLÜ BİR YOLUDUR.
Yazımızda sanallaştırma, container tanımlarından bahsettik. Bu çerçevede kullanılabilecek uygulamaların Docker, Podman (İmaj yönetim araçları), Kubernetes, Openshift (Container yönetim araçları) detaylarına bir sonraki yazımda değinmeye ve karşılaştırmaya çalışacağım.