Bulut Bilişimde Konteyner, Bulut Hizmet Sağlayıcıları ve Kubernetes Servisleri

Konteyner (Container) nedir?

Wikipedia, Konteyner nedir sorusunun cevabını basit olarak işletim sistemi seviyesinde sanallaştırma olarak tanımlıyor. Konteyner teknolojisi ismini denizcilik alanından almaktadır. Denizcilikte ürünlerin birbirinden izole edilmesini sağlayan kaplara Konteyner denir. Bilişim alanındaki Konteynerleri daha detaylı anlatmak gerekirse, Konteyner teknolojisi 2008 yılında Linux’un namespaces özellikleri ile başlayan ve sonradan yeni güncellemelerle geliştirilerek birçok sorunun çözüm aracı olarak kullanılan bir araçtır. Bu teknolojiyle beraber kullanıcılar uygulama yazılımlarını bir “kafese” koyma imkanına eriştiler. Kafes benzetmesi bu olayı anlatmak için çok uygun çünkü kullanıcılar bu özellikle uygulamaların erişebileceği kaynakları kısıtlama ve bu uygulamalara erişim sağlayabilecek diğer uygulamaları da kısıtlama imkânı buldu. Ve bu teknoloji ile kullanıcılar bir sunucu içerisinde birden fazla program çalıştırma imkanına sahip oldular. Böylelikle aynı işletim sisteminde, aynı işletim sisteminin çekirdeğini kullanan guruplar oluşturuldu ve bu guruplara Konteyner adı verildi. Konteyner kullanan kullanıcılara farklı farklı imkanlar sağlar. Bu yüzden kullanıcıların işlerine göre Konteyner tanımı değişim gösterebilir. Mesela yazılımcılar için Konteyner yazılımı; taşındığı herhangi farklı ortama saniyeler içerisinde entegre edebilme imkânı sağlayan, bütün bağımlılıkları tek pakette toparlama imkânı sağlayan, her yerden kolay erişim sağyabilecekleri araçken; sistemciler için her ortama taşınabilen, sanal makinelere göre çok daha kolay yönetilebilen, uygulamalarını paylaşımlı bir kernel üzerinde çalıştırabildikleri bir araçtır.

Şekil 1 Yazılımcılar ve sistemciler için konteyner nedir?

Peki bu teknoloji neden bir anda kullanıcılar için bu kadar önemli oldu? Bunun cevabı için size Konteyner teknolojisinden önce yaşanılan sorulardan bahsetmem gerekir. Konteynerden önce kullandığımız sistem karmaşık ve zordu. Konteynerden önce kullanıcılar bir sunucu üzerinde iki ayrı program çalıştıramazdı. İki ayrı uygulamanın aynı sunucu üzerinde çalışması bir sürü problem oluştururdu. Örneğin aynı sunucuda e-posta sunucu uygulamasıysa muhasebe uygulamasının birlikte çalışması birbirleriyle sürekli haberleşmesi demek ve buna bağlı olarak ortaya çıkan güvenlik zafiyeti, uygulamalardan birinin çökmesi (ölmesi) durumunda diğerinin zarar görmesi gibi kullanıcıların hiç istemediği büyük problemler oluştururdu. Bu problemler nedeniyle eskiden her bir uygulama için ayrı sunucu kurmamız gerekiyordu. Yani 4 basit uygulama için 4 büyük sunucu sistemi gerekiyordu bu da bize hem pahada hem yükte ağır olan bir sorundu.

Sanallaştırma

Sanallaştırma (Virtualization) adı verilen bu teknoloji bir fiziksel donanım üzerinde birden fazla sanal sunucu makinası veya uygulama çalıştırılmasını sağlayan yazılımsal bir teknolojidir. Fiziksel donanımların daha verimli daha esnek kullanımına imkân sağlar ve bir fiziksel donanım üzerine birden fazla işletim sistemi kurmamıza izin verir. Bu sayede her bir uygulama için ayrı işletim sistemi kurarak uygulamaların birbirinden habersiz, birbirinden izole, çalışmasını sağlamış olur.

Şekil 2 sanallaştırma

Sanallaştırma teknolojisi sistem kullanıcıların sorunlarını çözmüştü ama yine de mükemmel değildi. Bir kullanıcı bir sunucuda 10 tane uygulama çalıştırmak istiyorsa yanında 10 tane de işletim sistemi çalıştırmak zorunda kalıyordu. Yani bu yöntem kullanıcıları fazla sunucu, makine sıkıntısından kurtarmış olsa da beraberinde atıl kapasite problemi ortaya çıkmaya başladı. Çünkü her bir işletim sistemi bu sunucunun CPU, RAM, bellek gibi kaynaklarını kullanıyordu ki bu da kullanıcı için büyük bir problem olmaya başladı.

İşte 2008 yılındaki namespaces güncellemesi kullanıcıların bu sorunlarını gidermiş oldu. Artık kullanıcılar her uygulamanın yanında bir de işletim sistemi için kaynak kullanmayacaktı. Yaklaşık 4 sene sonra konteynerlere yeni bir güncelleme ile kontrol gurupları (control grups) adında yeni bir özellik daha eklendi. Bu özellik de uygulamalara getirilebilen erişim kısıtlamasına ek olarak kullanabileceği donanım kısıtlamasının da eklenmesi oldu. Yani kullanıcılar kontrol gurupları ile çalıştırdıkları uygulamanın ne kadar CPU, RAM vb. donanım kaynağı kullanabileceğini de belirterek uygulamalar üzerinde tam egemenlik sağlamış oldular. Fakat kullanıcılar bu Konteyner sistemini 2013 senesine kadar aktif olarak kullanamadılar. Çünkü Konteyner sistemi karışıktı ve içerisinde ve alt yapısında çok fazla ayar yapılmasını gerektiriyordu. 2013 senesinde Docker isimli bir firma kuruldu. Docker firmasını bu sistemi sadeleştirerek herkesin kullanabileceği bir hale getirdi. Evet artık herkes Docker yazılımıyla kolayca bu sistemi kullanabildi ama bir problem daha vardı. Bazı büyük kullanıcılar gerektiğinde onlarca, yüzlerce ayrı sunucuya Konteyner kurmaları gerekebiliyor. Bütün bu sunuculara ayrı ayrı Docker sistemi kurup her bir uygulama için özel ayar yapmaları haliyle neredeyse imkânsız bir işti. Buna çözüm olarak ise bu işlemleri yönetebilecek yazılımlar ortaya çıkmaya başladı, bunlara Konteyner orkestrasyon (Container orchestration) yazılımları denildi. Bu yazılımlardan 2 tanesi çok popüler oldu. Bunlardan birisi Docker yazılımı ile gelen Docker Swarm diğeri ise Google tarafından 2014 yılında açık kaynak (open source) hale getirilen Docker yazılımı ile bütünleşik çalışabilen kubernetes (kübernetis) projesi.

Peki hangi bulut teknolojileri hangi konteyner servislerini kullanıyor? Dünyada en çok kullanılan bulut servislerine bakalım. Pazarda müşteri çekebilmek için bulut servis sunucuları kullanıcılarına kolay yönetim ve az uğraşla çok iş yapabilme imkânı sağlamaya çalışıyorar.

Elastic Container Service (ECS)

Amazon elastic compute cloud (EC2) Amazon web service’in bulut bilişim platformudur. EC2 kendi bünyesinde Elastic Container Service (ECS) servisini kullanıyor. ECS kullanıcılarına AWS üzerinde anlık olarak çalışan servislerini ve bu servislere bağlı olan konteynerlerini kontrol imkânı sunar.

Şekil 3 Elastic Container Service

Amazon fargate özelliği ile AWS de kullanıcılara servislerini sunucusuz olarak çalıştırma imkânı tanıyor. Yine bu özellikle kullanıcıların uygulamalarında olası ani yüklemeler durumunda fazladan kaynak sağlanmasını ve gerektiğinde otomatik olarak yeni konteynerler oluşturup uygulamanın çökmesini engellemeye imkân sağlar. Kullanıcı her uygulamanın konteyner limitini belirliyor (16 Gb ram, 4 CPU gibi) ve kaynak ihtiyacı doğduğunda fargate otomatik olarak kaynak ihtiyacına göre sınırsız konteyner açabiliyor. Daha sonra bu ihtiyaç bittiğinde açılan ve kullanılmayan konteynerleri kendisi kapatıyor ve kullanıcının fazla ücret ödemesini engelliyor.

Microsoft Azure Container Service

Microsoft da Amazon gibi kendi servisleriyle kullanıcılarına kullanımı kolay olan ve işlevselliği fazla olan servisleriyle hizmet vermektedir. Container Instances Microsoft’un sunucusuz çalışma imkânı sağlayan servisidir. Bu servis sayesinde kullanıcılar uygulamalarını sunucuları olmadan çalıştırma imkânı sağlar. Yine Amazonda olduğu gibi anlık kaynak ihtiyaçlarına otomatik cevap vererek anlık olarak konteyner artırma ve azaltma yapabilir. Microsoft, Azure Kubernetes servisi ile kullanıcılara uygulama yazılımlarını istedikleri yere taşıyıp basit adımlarla yüzlerce konteyner oluşturarak, uygun şekilde ölçeklendirip yaşam döngülerini yönetmelerini sağlar.

Google Kubernetes Engine

Yukarıda kubernetes’in Google tarafından geliştirilip açık kaynak hale getirildiğini belirtmiştim tabii ki Google Cloud servisi kendi bünyesinde kubernetes engine kullanıyor. Google tarafında kubernetes kullanıcılara kolay ölçeklendirme, kümeleme ve güvenlik konusunda kolay erişim imkânı ve kolay taşıma imkânı sunuyor. Kullanıcılara uygulamalarını kolayca güncelleme imkanını sunar. Yine Google da uygulamalarda oluşan aşırı yüklenme durumunda otomatik kapasite artırımı ile kullanıcıların uygulamalarının çökmesine engel olmak için “Otomatik ölçeklendirme” adını verdikleri sistemle ram, CPU ihtiyacına göre kapasite artırımı ve azaltımı yapar. Google kubernetes engine ile kullanıcılar dünyanın her bölgesinde küme oluşturabilir ve kolayca silme işlemi yapabilir.

Şekil 4 Google Kubernetes

Container Service for Kubernetes (ACK)

Alibaba Cloud ACK servisi Kubernetes sertifikalı servis sağlayıcısıdır. Alibaba kullanıcılarına sanallaştırılabilir, ölçeklendirilebilir ve kolay taşınabilir konteyner hizmeti vermektedir. Alibaba ile kullanıcılar birden fazla bölge ve ağ seçimi yapabilir. Kullanıcılar birkaç kod ile kolayca kapasite artırımı ve azaltımı yapabilir. Alibaba gelişmiş yeni nesil intel CPU larını kullanarak kullanıcılarına tek tuşla yüz binlerce CPU sağlayabileceklerini vadeder.

IBM Cloud Kubernetes

IBM kubernetes kullanıcılarına kolay taşıma, güvenlik, akıllı tahsis, log kaydı izleme, kendi kendini onaran konteynerler gibi hizmetler sunmaktadır. Tabi ki IBM de bunu kolay kullanım ve kolay erişilebilirlik ile sunuyor. Uygulamaların aşırı yük durumunda otomatik CPU, ram kaynaklarını ekleme imkânı ve bölünmüş depolama imkanını da sunmaktadır. Bölünmüş depolama imkânı, uygulamanın farklı farklı bölgelerde depolayarak depolama merkezinde yaşanacak herhangi bir sorunda kullanıcıların sıkıntı yaşamasını engellemeyi amaçlar.

VMware Tanzu on Dell EMC

Dell VMware kullanıcılarına kubernetes kullanıcılarına hızlı ve kolay erişim imanı sağlayarak kullanıcılara kolay taşıma, kolay ölçeklendirme ve kolay dağıtım imkânı sunar. Intel® Xeon® Scalable Processors mimarisi kullanarak otomatik hale getirilen akıllı kapasite artırımı ve farklı konumlarda depolama imkânı ile kullanıcılarına güzel avantajlar vaat ediyor.

Hewlett Packard Enterprise, Cisco Systems, Oracle… gibi bulut hizmet sağlayıcıları da kullanıcılarına güvenlik, kolay erişim, otomatik hale getirilmiş kapasite değişimleri vb. hizmetleri sunuyor. Bulut teknolojisinde konteyner ve kubernetes hizmetleri daha yeni olmasına rağmen her bir bulut sağlayıcısı teknolojilerini geliştirmiş şekilde müşterileri çekebilmek için bütün özellikleri kullanıcılarına vermeye çalışıyor. Genelde çoğu bulut sağlayıcısı altyapısında Google’ın kubernetes yazılımı üzerine kendi geliştirmelerini yapmış durumda. Bu yüzden her biri benzer özellikleri sunuyor. Bu yazımda konteyner nedir, neden kullanılır, kolay kullanımı için üretilen kubernetes tabanlı servislerin özelliklerinin ne olduğunu ve hangi bulut hizmet sağlayıcısı hangi isimle ne gibi kubernetes özelliklerini kullanıyor gibi soruların cevaplarını vermeye çalıştım.

Kaynakça

· https://cloud.google.com/containers/?hl=tr

· https://azure.microsoft.com/tr-tr/overview/what-is-virtualization/

· https://www.ibm.com/tr-tr/cloud/container-service

· https://aws.amazon.com/tr/ecs/?whats-new-cards.sort-by=item.additionalFields.postDateTime&whats-new-cards.sort-order=desc&ecs-blogs.sort-by=item.additionalFields.createdDate&ecs-blogs.sort-order=desc

· https://www.alibabacloud.com

· https://www.delltechnologies.com/en-us/cloud/hybrid-cloud-computing/tanzu-on-vxrail.htm

· https://en.wikipedia.org/wiki/Docker_(software)#History

· https://www.cisecurity.org/benchmark/docker/

· https://medium.com/@fatihgul/1-2-introducing-container-technologies-c311054a3ca0

· https://rhelblog.redhat.com/2016/10/17/secure-your-containers-with-this-one-weird-trick/

· https://rhelblog.redhat.com/2017/01/13/selinux-mitigates-container-vulnerability/

· https://www.profelis.com.tr/container-bugunun-teknolojisi/

· https://medium.com/devopsturkiye/openshift-nedir-188aa22934a3

· https://cloudhedge.io/container-technology-a-quick-introduction/

· https://www.zdnet.com/article/the-top-cloud-providers-of-2020-aws-microsoft-azure-google-cloud-hybrid-saas/