Konteynerler

menu icon

Konteynerler

Bu kılavuzda, bulut bilişimde konteynerlerin önemi ele alınıyor, temel avantajlar vurgulanıyor ve Docker, Kubernetes, Istio ve Knative genelinde yeni ortaya çıkan ilgili teknolojilerin ekosistemi inceleniyor.

Konteyner nedir?

Konteynerler; ister masaüstünde ister geleneksel BT'de veya bulutta olsun, uygulama kodunun istenen herhangi bir yerde çalıştırılabilmesi için, kitaplıkları ve bağımlılıkları ile birlikte ortak yöntemlerle paketlendiği, yürütülebilir yazılım birimleridir.

Bunun için konteynerler bir çeşit işletim sistemi sanallaştırmasından yararlanır. Burada hem süreçlerin yalıtılması hem de bu süreçlerin erişimi olan disk, bellek ve CPU miktarının kontrolü için işletim sisteminin özelliklerinden (Linux kernel senaryosunda ad alanları ve cgroups primitifleri gibi) yararlanılır.

Konteynerler küçük, hızlı ve taşınabilirdir. Bunun nedeni, sanal bir makinenin aksine, konteynerlerin her eşgörünümde bir konuk işletim sistemi içermesinin gerekli olmaması, bunun yerine, anasistem işletim sisteminin özelliklerinden ve kaynaklarından yararlanmasının yeterli olmasıdır.

Konteynerler, ilk olarak, on yıllar önce FreeBSD Jails ve AIX Workload Partitions gibi sürümlerle ortaya çıktı. Ancak çoğu modern geliştirici, 2013 yılını, Docker'in tanıtılmasıyla birlikte modern konteyner çağının başlangıcı olarak hatırlıyor.

Konteynerler ve sanal makineler

Bir konteyneri daha iyi anlamanın bir yolu, onun klasik bir sanal makineden nasıl farklı olduğunu anlamaktır. İster şirket içinde ister bulutta olsun, klasik sanallaştırmada, fiziksel donanımı sanallaştırmak için bir hipervizörden yararlanılır. Daha sonra her sanal makine, bir uygulama ve onun ilişkili kitaplıkları ve bağımlılıklarının yanı sıra, işletim sisteminin çalıştırmasının gerektiği donanımın sanal bir kopyası olan bir konuk işletim sistemi içerir.

Konteynerler, temel donanımı sanallaştırmak yerine, işletim sistemini (genellikle Linux) sanallaştırır, böylece her bir konteyner, yalnızca uygulamayı ve kitaplıklarını ve bağımlılıklarını içerir. Konteynerlerin bu kadar basit ve dolayısıyla hızlı ve taşınabilir olmasının nedeni konuk işletim sistemi bulunmamasıdır.

Bu karşılaştırmaya daha ayrıntılı bir bakış için "Konteynerler ve sanal makineler: Aralarındaki fark nedir?" başlıklı konuya bakın.

Konteynerlerin avantajları

Konteynerlerin, özellikle bir sanal makineyle karşılaştırıldığında birincil avantajı, onları hafif ve taşınabilir kılan bir soyutlama düzeyi sağlamasıdır.

  • Hafif: Konteynerler, makine işletim sistemi çekirdeğini paylaşarak, uygulama başına tam işletim sistemi örneğine eşgörünümüne olan gereksinimi ortadan kaldırır ve konteyner dosyalarının küçük olmasını ve kaynaklara yüklenmemesini sağlar. Özellikle sanal makinelere kıyasla daha küçük boyutları, hızlı bir şekilde oluşturma işlemi gerçekleştirebilecekleri ve yatay olarak ölçeklenen bulut tabanlı uygulamaları daha iyi destekleyebilecekleri anlamına gelir.
  • Taşınabilir ve platformdan bağımsız: Konteynerler, tüm bağımlılıklarını yanlarında taşır; bu, yazılımın bir kez yazılabileceği ve ardından dizüstü bilgisayarlar, bulut ve şirket içi bilgi işlem ortamlarında yeniden yapılandırılmaya gerek kalmadan çalıştırılabileceği anlamına gelir.
  • Modern geliştirmeyi ve mimariyi destekler: Platformlar arasında devreye alım taşınabilirliği/tutarlılığı ve küçük boyutlarının bir bileşimi nedeniyle, konteynerler, modern geliştirme ve DevOps, sunucusuz ve mikro hizmetler gibi küçük artışlarla düzenli kod devreye alımlarına dayanan uygulama kalıpları için idealdir.
  • Kullanımı iyileştirir: Kendilerinden önceki sanal makineler gibi, konteynerler de geliştiricilerin ve operatörlerin, fiziksel makinelerin CPU ve bellek kullanımını iyileştirmelerini sağlar. Konteynerlerin daha da ileri gittiği nokta, mikro hizmet mimarilerini de etkinleştirdikleri için uygulama bileşenlerinin daha alt seviyede ayrıntılandırılarak devreye alınabilmesi ve ölçeklenebilmesidir; bu, tek bir bileşenin yükle mücadele etmesi nedeniyle, monolitik uygulamanın tamamının ölçeğini yükseltme zorunluluğuna cazip bir alternatiftir.

Yakın tarihli bir IBM araştırmasında (PDF, 1,4 MB) geliştiriciler ve BT yöneticileri, konteyner kullanmanın başka pek çok avantajını bildirdiler. Aşağıdaki interaktif aracı kullanarak bu avantajları keşfedin:

Raporun tamamını yükleyin: Containers in the enterprise (PDF, 1.4MB)

Konteynerler için kullanım senaryoları

Konteynerler, özellikle bulut ortamlarında giderek daha fazla öne çıkıyor. Pek çok kuruluş, konteynerleri; uygulamaları ve iş yükleri için genel amaçlı bilgi işlem platformu olarak sanal makinelerin ikamesi olarak bile düşünüyor. Ancak bu çok geniş kapsamda, konteynerlerin özellikle ilgili olduğu temel kullanım senaryoları bulunuyor.

  • Mikro hizmetler: Konteynerler küçük ve hafiftir; bu da onları, uygulamaların çok sayıda, gevşek bir şekilde birleştirilmiş ve bağımsız olarak devreye alınabilir daha küçük hizmetlerden oluşturulduğu mikro hizmet mimarileri için uygun hale getirir.
  • DevOps: Bir mimari olarak mikro hizmetlerin ve bir platform olarak konteynerlerin bileşimi, DevOps'u yazılım oluşturma, teslim etme ve çalıştırma yöntemi olarak benimseyen pek çok ekip için ortak bir temel oluşturur.
  • Hibrit, çoklu bulut: Konteynerler, her yerde (dizüstü bilgisayar, şirket içi ve bulut ortamlarında) tutarlı bir şekilde çalışabildiğinden, bunlar, kuruluşların, kendilerini kendi veri merkezleriyle birlikte birden fazla genel bulut bileşiminde çalışırken buldukları hibrit bulut ve çoklu bulut senaryoları için ideal bir temel mimaridir.
  • Uygulama modernleştirme ve geçiş: Uygulama modernleştirmeye yönelik en yaygın yaklaşımlardan biri, buluta taşınabilmeleri için uygulamaları konteynerleştirmeyle başlar.

Konteynerleştirme

Konteynerlerden yararlanmak için yazılımın farklı bir şekilde tasarlanması ve paketlenmesi gerekir; bu, yaygın olarak konteynerleştirme olarak adlandırılan bir süreçtir.

Bir uygulamayı konteynerleştirme sürecinde, uygulamanın, ilgili ortam değişkenleri, yapılandırma dosyaları, kitaplıklar ve yazılım bağımlılıkları ile paketlenmesini içerir. Sonuç, daha sonra bir konteyner platformunda çalıştırılabilen bir konteyner görüntüsüdür. Daha fazla bilgi için "Containerization Explained" (08:09) başlıklı bu videoya göz atın:

Kubernetes ile konteyner orkestrasyonu

Şirketler, konteynerleri, genellikle modern, bulut tabanlı mimarilerin bir parçası olarak benimsemeye başladıkça, tek tek konteynerlerin basitliği, dağıtılmış bir sistem genelinde yüzlerce (hatta binlerce) konteyneri yönetmenin karmaşıklığıyla çakışmaya başladı.

Bu zorluğun üstesinden gelmek için, aşağıda belirtilenler dahil olmak üzere, yüksek hacimli konteynerleri yaşam döngüleri boyunca yönetmenin bir yöntemi olarak konteyner orkestrasyonu kavramı ortaya çıktı:

  • Tahsis
  • Yedeklilik
  • Durum izlemesi
  • Kaynak ayırma
  • Ölçekleme ve yük dengeleme
  • Fiziksel anasistemler arasında taşıma

Bu zorlukların üstesinden gelmek için pek çok konteyner orkestrasyonu platformu (Apache Mesos, Nomad ve Docker Swarm gibi) oluşturulurken, Google tarafından 2014 yılında tanıtılan açık kaynak kodlu bir proje olan Kubernetes, hızla en popüler konteyner orkestrasyonu platformu haline geldi ve sektörün büyük bir bölümü, bu platform üzerine standartlaştı.

Kubernetes, geliştiricilerin ve operatörlerin, genel konteyner ortamlarının istenen durumunu, YAML dosyaları aracılığıyla bildirmelerini sağlar. Ardından, belirli bir uygulamanın veya iş yükünün belirli sayıda eşgörünümünün devreye alınmasını, başarısız olursa bu uygulamanın yeniden başlatılmasını, yük dengelemeyi, otomatik ölçeklemeyi, sıfır kapalı kalma süresi içeren devreye alımları ve daha fazlasını içeren etkinliklerle bu istenen durumu oluşturmak ve sürdürmek için tüm zor işleri gerçekleştirir.

Kubernetes hakkında daha fazla bilgi edinmek için Sai Vennam, aşağıdaki videoda (10:59) Kubernetes'e genel bir bakış sunuyor:

 

Kubernetes, artık Linux Vakfı'nın himayesinde, satıcı firmadan bağımsız bir sektör grubu olan Cloud Native Computing Foundation (CNCF) tarafından işletiliyor.

Istio, Knative ve genişleyen konteyner ekosistemi

Konteynerler, uygulamaları paketlemenin ve çalıştırmanın popüler bir yöntemi olarak ivme kazanmaya devam ederken, üretim kullanım senaryolarını güçlendirmek ve genişletmek için tasarlanmış araç ve proje ekosistemi büyümeye devam ediyor. Kubernetes dışında, konteyner ekosistemindeki en popüler projelerden ikisi Istio ve Knative'dir.

Istio

Geliştiriciler, mikro hizmet mimarileri oluşturmak ve çalıştırmak için konteynerlerden yararlanırken, yönetimle ilgili endişeler, tek tek konteynerlerin yaşam döngüsü değerlendirmelerinin ötesine geçiyor ve çok sayıda küçük hizmetin (genellikle bir "hizmet ağı" olarak anılan) birbiriyle bağlantı ve ilişki kurma biçimine kadar uzanıyor. Istio, geliştiricilerin keşif, trafik, izleme, güvenlik ve daha fazlasıyla ilgili zorlukları yönetmesini kolaylaştırmak için oluşturuldu. Istio hakkında daha fazla bilgi için "Istio Nedir?" başlıklı konuya bakın ve Istio'nun bu açıklayıcı videosunu izleyin (05:06):

 

Knative

Sunucusuz mimariler, özellikle bulut tabanlı topluluk içinde popülerlik kazanmaya devam ediyor. Knative'in yüksek düzeyde değerini, konteynerli hizmetleri sunucusuz işlevler olarak devreye alma yeteneği oluşturuyor.

Sunucusuz bir işlev, her zaman çalışmak ve gerektiğinde yanıt vermek yerine (bir sunucunun yaptığı gibi) "sıfıra ölçeklenebilir"; bu, işlevin istenmediği sürece hiç çalışmadığı anlamına gelir. Bu model, on binlerce konteynere uygulandığında yüksek miktarda bilgi işlem gücü tasarrufu sağlayabilir.

Knative hakkında daha fazla bilgi için "What is Knative?" (07:58) başlıklı videoyu izleyin:

Konteynerler ve IBM Cloud

IBM Cloud konteyner hizmetleri, bulut yolculuğunuzu kolaylaştırmak ve hızlandırmak için açık kaynak kodlu teknolojiler üzerinde oluşturulmuştur. Sürekli entegrasyon ve sürekli teslim (CI/CD) araçlarını kullanarak konteynerli uygulamalar oluşturun. Konteynerleri, yönetilen Red Hat Open Shift veya Kubernetes hizmetlerini kullanarak düzenleyin. Ayrıca mevcut uygulamaları, IBM Cloud Paks'te yer alan konteynerli IBM ara katman yazılımları ve açık kaynak kodlu bileşenler ile modernleştirin.

IBM Cloud üzerinde konteynerler hakkında daha fazla bilgi edinin.

IBMid için kaydolun ve IBM Cloud hesabınızı oluşturun.