Hakkımızda Hizmetlerimiz Referanslarımız İş Ortaklarımız Kaynaklar İletişim
2 Eylül 2021

Kubernetes Mimarisi Nedir?

Serhad Yıldız

Kubernetes Mimarisi Nedir?

Eskiden Yazılımlar için Düzen Nasıldı?
Yazılım geliştiren birçok kurum performans, güvenlik ve fonksiyonel iyileştirmeler için düzenli olarak çalışma yapmaktadır. Geliştiriciler uygulamalarını hazırladıktan sonra bunları bir süre için test eder ve oluşan sorunları çözer, sonra kullanıma sunar. Kulanım sırasında beklenmedik problemler, yeni istekler çıkar. Programcı yeni sürümü geliştirirken bir önceki sürümde karşılaştığı problemleri, yeni gelen istekleri hep göz önüne alır ve yeni sürümü hazırlar. Bu döngü tüm yazılım geliştiriciler için aynıdır. Buna programcılıkta yaşam döngüsü denir. Yaşam döngüsü donanım ve işletim sistemlerini de etkiler. Donanım tarafındaki yenilikler ve iyileştirmeler uygulamanın performansını ve kapasitesini arttırdığı gibi, işletim sistemindeki tarafındaki gelişmeler ve sürümler de uygulama geliştiricisinin kodlarını ve derlemelerini etkiler. Bu nedenden dolayı geçmişte bir fiziksel sunucu üzerinde, bir işletim sistemi ve bir uygulama bulunurdu. Bu 3 birim birbirine sıkı sıkı bağlı olduğu için uygulama geliştirici için yaşam döngüsü çok uzun sürerdi. Bu durum son kullanıcının uzun süre mevcut sürümle çalışmasına dolayısı ile yazılım tarafında iyileştirmelere erişememesine sebep olurdu.

Sanallaştırmayla Kazanılan Esneklik
Sanallaştırmanın günümüz bilişim dünyasında kullanılması ile bir sunucuda birçok işletim sistemi aynı anda çalışınca donanım tarafındaki iyileştirmeler, yeni donanım ilaveleri sanal sunucuların üzerindeki işletim sistemini çok fazla etkilemeden yenilik yapılmasını sağladı. Birden çok işletim sisteminin birbirinden bağımsız olması sunucu kaynaklarının daha iyi kullanılması sağlar hale geldi. Her uygulama kendi işletim sistemi ile sanal sunucu içinde olduğu için uygulama taşıma sanal sunucu seviyesinde başlamış oldu. Bu seviyede donanım kaynağı ve uygulama arasına giren sanallaştırma katmanı birçok esneklik sağladı.

Gelişen teknoloji, mobil hayatın yaygınlaşması geliştiricilerin daha çok uygulama tasarlamasını gerektirdi. Sanal sunucuların çok hızlı olarak kurulabilmesi burada bir kolaylık sağlasa da bir süre sonra kurumların donanım altyapısı bu hıza yetişemedi. Burada bulut hizmetleri, bulut üzerinden sanal sunucular özellikle ölçekleme, yedekli mimari konusunda kurumlara büyüme anlamında birçok olaylık sağladı. Böylelikle uygulamacılar yeni uygulamalarını daha rahat ölçekledi.

Günümüzde kurumların ihtiyacına göre uygulamacılar fiziksel sunucu, sanal sunucu ya da bulut hizmetlerinden yararlanmakta ve uygulamalarını geliştirmektedir. Donanım tarafındaki bu esneklik bugün birçok uygulamanın gelişmesinde, çeşitliliğin artmasında ve yaygın olarak kullanılmasına destek oldu. Uygulamacı için her ne kadar uygulama yayınlamak, uygulama sayısını arttırmak kolay olsa da uygulamanın yaşam döngüsü hala uzundu. Özellikle işletim sisteminde bir güncelleme uygulamayı ciddi şekilde etkiliyordu. Bunun için bir çözüm arayışına başlandı.

Konteyner Teknolojisinin Getirdiği Kolaylık
Dünya ticaretinde ürünlerin bir yerden bir yere nakledilmesi en önemli aktivitedir. Üretici ile ürünü buluşturmak için taşımak gerekir. Taşıma sırasında gerek ürünlerin boyutları gerekse nakliye sırasında hasar görmeleri nedeni ile bugün tüm yük gemilerinde gördüğümüz konteyner çözümü kullanılmaya başlandı. Bu şekilde ürünler dış ortamlardan zarar görmeden kolaylıkla transfer edilmekte, standart ölçülerinden dolayı rahatlıkla depolanmakta ve taşınmaktadır. Ticareti değiştiren konteyner çözümü yazılım dünyasına da ilham kaynağı olmuştur.

Yazılım dünyasında konteyner teknolojisi yazılımcıların geliştirme yaparken kullandığı tüm birimleri bir arada tutmasına, işletim sistemi, donanım ve farklı uygulamalardan etkilenmeyen izole yapılar oluşturmasına yardımcı oldu. Böylelikle ilk günden beri uygulamacının en büyük sıkıntısı olan yaşam döngüsü kısalmaya, yeni özelliklerin son kullanıcı ile bulaşması kolaylaştı.

Konteyner Mimarisinin Faydaları
Konteyner mimarisi uygulama için gerekli tüm kaynak kütüphanelerini, kod bileşenlerini, çalışması gereken işletim sistemi parçacıklarını bir arada bulundurur. İzole yapısı sayesinde kolaylıklar güncellenir ya da farklı sürümlerin hazırlanması kolaylaşır. Bütün bu özellikler yazılım dünyası tarafından çok hızlı kabul görmesini sağlamıştır.

Konteyner mimarisi uygulama başına çok daha az kaynak kullandığı için bir sunucu üzerine yüzlerce farklı uygulamanın çalışmasını, sunucu donanım kaynağının daha efektif kullanılmasını sağlamıştır. Bu sayede uygulama için gerekli sanal sunucu, fiziksel sunucu sayısı da azaldığı için kurumlar hem efor hem maliyet anlamında kazanımları olmuştur.

Konteyner Mimarisiyle Ortaya Çıkan İhtiyaçlar
Konteyner mimarisinin yaygın olarak kullanılması ile yönetim tarafında otomasyon ihtiyacı ortaya çıkmaya başladı. Yüzlerde konteyner yönetimde birçok zorluk çıkartıyordu. Bu konuda bir Google projesi olan Borg otomasyon tarafında ilk ihtiyaçları karşılamaya başladı. Sonrasına gelişip Omega ismini aldı. En sonunda bugün yaygın olarak kullanılan Kubernetes ismini aldı.

Kubernetes otomasyon katmanıdır. Temel görevi uygulamaları sunucu (fiziksel veya sanal) üzerine dağıtma, iş yüküne göre yerleştirme ve yaşam döngüsünü yönetme. Böylelikle konteynerlerin yönetimi kolaylaşmış oldu. Kubernetes mimarisi tamamen uygulama Yönetimi için olduğundan uygulamaların çalışması, kopyalanması, adet olarak ölçeklenmesi, yük dengelenmesi, sanal ağ yapısı gibi birçok konu ve bileşeni de aynı anda yönetmektedir.

Kubernetes mimarisinde sunucu kaynakları sanal veya fiziksel olabilir bu kaynaklar “Node” olarak bilinmektedir. Node mimarisi 2 tiptedir. Yöneten Node (Master Node) tüm Kubernetes mimarisini, iş akışlarını yönetir. Test/Dev mimarileri için en az 1 adet, üretim sistemleri için yedekli mimari için 3 adet olması gerekmektedir. Çalışan Node (Worker Node) ise tüm iş yükünün üzerinde çalıştığı, konteyner mimarisinin her türlü operasyonunun yapıldığı yapıdır. Kubernetes dünyasında en ufak yapı taşı “Pod” bir ya da birden çok konteyner içerir. Genelde bir Pod bir konteyner içerir. Pod ihtiyaca bağlı olarak aynı zamanda depolama alanı, database, konfigürasyon bilgisi, güvenlik ayarları gibi birçok bileşeni içerebilir. Uygulamacı ihtiyacına göre bir Pod ile bu arabirimlerden herhangi birini dahil edebilir ve sistem yöneticisi kullanıma sunar.

Pod mimarisi ilk kullanımlar veri saklamadan kullanılırdı. İhtiyaca göre kopyalanması, sayısının arttırılması ölçeklemede kolaylıklar sağladı. Kubernetes mimarisi kendi üzerine bulunan yük dağıtıcı ile iş yükünü dağıttığı, yedekli yapı planladığı için Pod hızlıca güncellenebilmesi uygulama tarafında son güncellemelerin son kullanıcıya erişmesini çok hızlandırdı. Pod mimarisi zamanla esnekliklerinden dolayı database ve kalıcı veri de tutmaya başladı. Böylelikle daha değerli ve kullanışlı oldu.

Konteyner Mimarisinde Dikkat Edilmesi Gereken Noktalar
Kubernetes mimarisi yazılım için birçok kolaylık getirse de planlamasına dikkat edilmesi gerekir. Podların haberleşmesi için network ve yük dengeleme ayarları, ihtiyaca göre kopyalanmaları, ölçeklenmeleri, yaşam döngülerini kontrolü, servislerin kontrolü, yedekli mimari gibi birçok konuya dikkat edilmesi gerekir.

Podların kendi içinde veri tutması ile bu veriler kurumlar için önemli hale gelmeye başladı. Fiziksel, sanal sunucular gibi bu podların da yedeklenmesi ve saklanması birçok kurum için önemlidir. Kubernetes mimarisi kendi içerisine ayrı bir katman olduğu için klasik yedekleme yöntemleri yetersiz kalmaktadır. Yedekleme mimarisi Kubernetes ile uyumlu olarak Pod, volume, konfigürasyon bilgisi, database gibi tüm bileşenleri yedekleyebilecek yapıda, Kubernetes mimarisi ile uçtan uca uyumlu olmalıdır.