Kubernetes

menu icon

Kubernetes

Kubernetes uygulamaların devreye alınmasını, yönetilmesini ve ölçeklenmesini otomatikleştiren açık kaynaklı bir konteyner orkestrasyonu platformudur. Kubernetes'in düşük maliyetli bulut tabanlı geliştirmeye nasıl olanak sağladığını öğrenin.

Kubernetes nedir?

Aynı zamanda "k8s" veya "kube" olarak da anılan Kubernetes, konteynerli uygulamaların devreye alınmasının, yönetilmesinin ve ölçeklendirilmesinin zamanlanmasına ve otomatikleştirilmesine yönelik bir konteyner orkestrasyon platformudur.

Kubernetes 2014 yılında açık kaynaklı hale gelmeden önce ilk olarak Google'daki mühendisler tarafından geliştirildi. Google tarafından dahili olarak kullanılan konteyner orkestrasyon platformu Borg'dan türetildi. Kubernetes, Yunanca'da dümenci ya da kaptan anlamına gelir ve bununla bağlantılı olarak Kubernetes logosunda dümen yer alır (bağlantı  IBM dışındadır).

Günümüzde Kubernetes ve tüm konteyner ekosistemi, giderek olgunlaşarak modern bulut altyapısının ve uygulamalarının temel yapı taşları olarak sanal makinelerle (VM) rekabet eden ve hatta geride bırakan bir genel amaçlı bilgi işlem platformuna dönüşüyor. Bu ekosistem, geliştirme ekiplerinin yalnızca kodlamaya ve inovasyona odaklanabilmesi için kuruluşların altyapıyla bağlantılı ve operasyonlarla bağlantılı birden çok görevi yerine getiren ve bulut tabanlı geliştirme ile bağlantılı sorunların aşılmasını sağlayan yüksek üretkenliğe sahip bir Hizmet Olarak Sunulan Platform (PaaS) sağlamasına imkan tanıyor.     

Aşağıdaki videoda, Sai Vennam Kubernetes'e ilişkin temel hususları açıklıyor (10:59):

Konteyner nedir?

Önce tanımını yapalım: Bir konteyner, masaüstü, geleneksel BT veya bulut dahil olmak üzere herhangi bir yerde çalıştırılabilmesi için uygulama kodunun kitaplıklar ve bağımlılıklarla birlikte yaygın yöntemler kullanılarak paketlendiği bir yürütülebilir yazılım birimidir.

Konteynerler, süreçleri izole ederek ve bu süreçlerin erişebileceği disk, bellek ve CPU miktarını kontrol altına alarak birden çok uygulamanın işletim sistemini paylaşmasını sağlayan bir tür işletim sistemi (OS) sanallaştırmasından yararlanır.

Konteyner, sanal makine ve geleneksel altyapı karşılaştırması

BT altyapısının otomasyonu ve soyutlama sürecindeki en son nokta olarak konteynerlerin anlaşılması daha kolay veya yararlı olabilir.

Geleneksel altyapıda uygulamalar fiziksel bir sunucuda çalışır ve alabildikleri tüm kaynakları alırlar. Bu, birden çok uygulamayı tek sunucuda çalıştırmak ve bunlardan birinin diğerlerinin hakkı olan kaynakları tüketmemesini ummak ya da her uygulama için bir sunucu ayırmak, kaynakları israf etmek ve ölçeklendirme olanağına sahip olmamak arasında tercih yapmak zorunda kalmanıza neden olur.

Sanal makineler, gerçek bilgisayar donanımından soyutlanan sunuculardır ve bir fiziksel sunucu üzerinde birden çok sanal makine veya birden çok fiziksel sunucuya yayılan tek bir sanal makine çalıştırmanızı sağlar. Her sanal makine kendi işletim sistemi eşgörünümünde çalışır ve her uygulamayı kendi sanal makinesinde izole edebilirsiniz. Bu sayede aynı temel fiziksel donanımda çalışan uygulamaların birbirini etkileme olasılığı azalır. Sanal makineler kaynakları daha iyi kullanır ve geleneksel altyapıya göre çok daha kolay ve uygun maliyetli bir şekilde ölçeklenebilir. Ayrıca kullanılıp atılabilirler, uygulamayı çalıştırmaya ihtiyacınız kalmadığında sanal makineyi kaldırabilirsiniz.

Sanal makineler hakkında daha fazla bilgi için "Sanal Makineler: Temel Bir Rehber" makalesine bakın.

Konteynerler, bu soyutlamayı daha yüksek düzeye taşır, özellikle temel sanallaştırılmış donanımın paylaşılmasına ek olarak temel sanallaştırılmış işletim sistemi çekirdeğini de paylaşırlar. Konteynerler sanal makinelerle aynı izolasyon, ölçeklenebilirlik ve ortadan kaldırılabilirlik avantajını sunarken kendi işletim sistemi eşgörünümlerinin bilgi yükünü taşımadıklarından sanal makinelere göre daha hafiftir, yani daha az yer kaplar. Bunlar, kaynakları daha verimli kullanır, daha az makine (sanal ve fiziksel) ve daha az işletim sistemi eşgörünümüyle daha fazla uygulama çalıştırmanıza imkan tanır. Konteynerler masaüstü, veri merkezi ve bulut ortamlarında daha kolay taşınabilir. Çevik ve DevOps geliştirme uygulamaları için de idealdir.

"Konteynerler: Temel Bir Rehber" konteynerler ve konteyner mimarisine ilişkin her şeyi ayrıntılarıyla anlatıyor. "Konteyner ve Sanal Makine Karşılaştırması: Farkı Ne?" başlıklı blog gönderisi, aradaki farkları ayrıntılarıyla açıklıyor.

Docker nedir?

Docker, Linux® konteynerlerinin yaratılması ve çalıştırılması bakımından en popüler araçtır. İlk konteyner örnekleri onlarca yıl önce kullanıma sunulmuş olmakla birlikte (FreeBSD Jails ve AIX Workload Partitions gibi teknolojilerle), konteynerler 2013 yılında, Docker tarafından yeni bir geliştirici dostu ve bulut dostu uygulamayla kitlelere sunularak halkın kullanımına açılmış oldu.

Docker, bir açık kaynak projesi olarak başladı ancak günümüzde açık kaynak projesi temel alınarak geliştirilen bir ticari konteyner araç takımı olan Docker'i üreten (ve bu iyileştirmelerle açık kaynak topluluğuna katkı sağlayan) Docker Inc. firmasını da ifade etmektedir.

Docker geleneksel Linux konteyner (LXC) teknolojisi temel alınarak oluşturulmuştur, ancak Linux çekirdek süreçlerinin daha küçük parçalar halinde sanallaştırılmasını sağlar ve geliştiricilerin oluşturması, devreye alması, yönetmesi ve güvenliğini sağlaması için konteynerleri kolaylaştıran özellikler ekler.

Günümüzde alternatif konteyner platformları mevcut olmakla birlikte (Open Container Initiative (OCI), CoreOS ve Canonical (Ubuntu) LXD gibi), çok yaygın bir biçimde tercih edilmesi nedeniyle Docker kelimenin tam anlamıyla konteynerlerle eş anlamlı hale geldi ve zaman zaman Kubernetes gibi ücretsiz teknolojilere rakipmiş gibi algılanıyor (daha aşağıdaki "Kubernetes vs, Docker: It’s Not an Either/Or Question” adlı videoyu izleyin).

Kubernetes ile konteyner orkestrasyonu

Konteynerler yaygınlaştığından (günümüzde bir kuruluş yüzlerce ve hatta binlerce konteynere sahip olabilir) operasyon ekipleri, konteyner devreye almayı, ağ oluşturmayı, ölçeklendirilebilirliği ve kullanılabilirliği zamanlamaya ve otomatikleştirmeye gereksinim duymaktaydı. Böylece konteyner orkestrasyonu pazarı doğdu.

İlk zamanlarda diğer konteyner orkestrasyonu seçenekleri (en yaygın olarak Docker Swarm ile Apache Mesos) popülerlik kazanmış olsa da Kubernetes kısa süre içinde en yaygın olarak kullanılan seçenek haline geldi (hatta, bir noktada açık kaynaklı yazılım tarihindeki en hızlı büyüyen projeydi).

Geliştiriciler, geniş ve büyümeye devam eden açık kaynaklı destek araçları ekosistemi ile önde gelen bulut sağlayıcılarını (bunlardan bazıları şu anda tam yönetilen Kubernetes hizmetleri sunuyor) desteklemesi ve bunlar arasında taşınabilirliği nedeniyle Kubernetes'i tercih etti ve tercih etmeye devam ediyor.

Konteyner orkestrasyonuna ilişkin daha fazla bilgi için “Container Orchestration Explained” (08:59) videosunu izleyin:

Kubernetes neler yapıyor?

Kubernetes bu ve bunun gibi konteynerle ilgili diğer görevleri zamanlar ve otomatikleştirir:

  • Devreye alma: Belirli sayıda konteyneri belirtilen bir anasistemde devreye alın ve istediğiniz durumda çalışır olmalarını sağlayın.
  • Kullanıma açma: Kullanıma açma devreye alımda yapılan bir değişikliktir. Kubernetes, kullanıma açmaları başlatmanızı, durdurmanızı, sürdürmenizi veya geri almanızı sağlar.
  • Hizmet keşfi: Kubernetes DNS adını veya IP adresini kullanarak bir konteyneri internete veya diğer konteynerlere otomatik olarak açabilir.
  • Depolama tahsis etme: Kubernetes'i gerektiğinde konteynerleriniz için kalıcı yerel veya bulut depolaması ekleyecek şekilde ayarlayın.
  • Yük dengeleme ve ölçekleme: Bir konteyner trafiği zirveye ulaştığında Kubernetes, istikrarı sürdürmek üzere ağ genelinde trafiği dağıtmak için yük dengelemeyi ve ölçeklemeyi kullanabilir.
  • Yüksek düzeyde kullanılabilirlik için kendi kendini iyileştirme: Bir konteyner arızalandığında Kubernetes otomatik olarak bunu yeniden başlatabilir veya değiştirebilir; ayrıca durum denetimi gereksinimlerinizi karşılamayan konteynerleri devre dışına alabilir.

Kubernetes ile Docker karşılaştırması

Buraya kadar okuduysanız, Kubernetes'in Docker Swarm için bir alternatif olmasına karşın Docker'in kendisine bir alternatif ya da rakip olmadığını (yaygın yanlış anlamaya karşın) anlamışsınızdır.

Aslında Docker'ı isteyerek kullanmaya başladıysanız ve büyük ölçekli Docker tabanlı konteyner devreye alımları oluşturuyorsanız Kubernetes orkestrasyonu bu iş yüklerinin yönetilmesinde atacağınız bir sonraki mantıklı adımdır. Daha fazla bilgi için lütfen "Kubernetes vs. Docker: It’s Not an Either/Or Question” (08:03): adlı videoyu izleyin

Kubernetes mimarisi

Kubernetes mimarisinin önde gelen bileşenleri şunlardır:

Kümeler ve düğümler (hesaplama)

Kümeler Kubernetes mimarisinin yapı taşlarıdır. Her biri tek bir hesaplama anasistemini (sanal veya fiziksel makine) temsil eden düğümlerden oluşur.

Her küme konteyner mimarili uygulamaları devreye alan, çalıştıran ve yöneten birden fazla işçi düğümünden ve işçi düğümlerini kontrol eden ve izleyen bir ana düğümden oluşur.

Ana düğüm, geliştirici tarafından belirlenen devreye alma gereksinimlerine ve mevcut hesaplama kapasitesine dayalı olarak konteynerlerin ne zaman ve nerede devreye alınacağını otomatikleştiren bir zamanlayıcı hizmetini çalıştırır. Her işçi düğüm, konteynerlerin yönetilmesi için kullanılan Docker gibi bir araç ve ana düğümden komutları alan ve yerine getiren Kubelet adlı bir yazılım aracısı içerir.

Kubernetes kümeleriyle ilgili ayrıntılar için "Kubernetes Clusters: Architecture for Rapid, Controlled Cloud App Delivery" blog gönderisine göz atabilirsiniz.

Pod'lar ve devreye alımlar (yazılım)

Pod'lar aynı hesaplama kaynaklarını ve aynı ağı paylaşan konteynerler grubudur. Bunlar ayrıca Kubernetes'teki ölçeklenebilirlik birimleridir: Bir pod içindeki bir konteyner işleyebileceğinden daha fazla trafik alıyorsa, Kubernetes podu kümedeki diğer düğümlere eşler. Bu nedenle pod'ları yalnızca kaynakları paylaşması gereken konteynerleri içerecek şekilde kompakt tutmak iyi bir uygulamadır.

Devreye alma, konteyner mimarisindeki uygulamaların oluşturulmasını ve durumunu kontrol eder ve bunları çalışır durumda tutar. Kümede bir pod'un kaç replikasının çalışması gerektiğini belirtir. Bir pod arızalanırsa devreye alım, yenisini oluşturur.

Kubernetes devreye alımları hakkında daha fazla bilgi için "Kubernetes Deployments: Get Started Fast” (03:54) videosunu izleyin:

Kubernetes mimarisinin bileşenleri hakkında daha ayrıntılı bilgi edinmek için bu öğrencinin ilerleyişine dayalı çevrim içi kursu deneyin: "Kubernetes 101".

"Kubernetes Architecture: Four Approaches to Container Solutions" adlı blog gönderisini okuyarak da daha kapsamlı bilgi edinebilirsiniz.

Istio hizmet örgüsü (service mesh)

Kubernetes, pod'ları devreye alabilir ve ölçekleyebilir, ancak aralarındaki yönlendirmeyi yönetemez veya otomatikleştiremez ve bu bağlantıların izlenmesi, güvenliğinin sağlanması veya bunlarda hata ayıklaması yapılması amacıyla hiçbir araç sağlamaz. Bir kümedeki konteynerlerin sayısı arttıkça, bunlar arasındaki olası bağlantı yollarının sayısı katlanarak artar (örneğin, iki konteynerin iki potansiyel bağlantısı bulunur, 10 podun ise 90) ve potansiyel bir yapılandırma ve yönetim kabusu yaratır.

Burada devreye Kubernetes kümeleri için açık kaynak hizmet örgüsü katmanı olan Istio girer. Istio, her Kubernetes kümesine temelde programcı ve sistem yöneticisi tarafından görülmeyen ve diğer konteynerlerle etkileşimleri yapılandıran, izleyen ve yöneten bir yan konteyner ekler.

Istio sayesinde konteynerler arasındaki bağlantıları yapılandıran tek bir ilke belirleyebilirsiniz, bu sayede her bağlantıyı tek tek yapılandırmanız gerekmez. Bu da konteynerler arasındaki bağlantılarda hata ayıklama yapılmasını kolaylaştırır.

Istio, DevOps ekiplerinin ve sistem yöneticilerinin gecikme süresini, hizmet süresindeki hataları ve konteynerler arasındaki bağlantıların diğer özelliklerini izlemek için kullanabileceği bir gösterge panosu da sağlar. Ayrıca, güvenlik uzmanlarının kümeyi izlemek için kullanabileceği güvenliği (özellikle yetkisiz kullanıcıların konteynerler arasındaki bir hizmet çağrısını gözetlemesini önleyen kimlik yönetimi) ve kimlik doğrulama, yetkilendirme ve denetleme (AAA) yeteneklerini yerleşik hale getirir.

Istio kullanıma ait video ve bazı örnekler dahil daha fazla ayrıntı için "İstio Nedir?" başlıklı makaleyi okuyabilirsiniz.

Knative ve sunucusuz bilişim

Knative (‘kay-native’ gibi okunur), Kubernetes'in üzerinde bulunan bir açık kaynaklı platformdur ve bulut tabanlı geliştirme için iki tür önemli avantaj sağlar:

Knative, sunucusuz bilişime kolay ve hızlı başlanmasını sağlar

Sunucusuz bilişim bulut tabanlı uygulamaları daha verimli ve uygun maliyetli hale getiren, kod devreye alımının nispeten yeni bir yöntemidir. Sunucusuz bilişim, talepler için beklerken boşta duracak bir sürekli kod eşgörünümü devreye alınması yerine, kodu gereken şekilde etkinleştirir (talep dalgalandıkça ölçeği artırır ya da azaltır) ve ardından kullanılmadığında kodu kaldırır. Gerçekten çalıştığında kodu çalıştırmak için ödeme yaptığınızdan sunucusuz bilişim seçeneğinde hesaplama kapasitesini ve gücü boşa harcamanın önüne geçebilir ve maliyetleri düşürebilirsiniz.

Knative, geliştiricilerin bir konteyneri bir kez oluşturmasını ve yazılım hizmeti veya sunucusuz işlev olarak çalıştırmasını sağlar. Geliştiriciye tamamen şeffaftır: Knative arka planda ayrıntıları işlerken geliştirici koda odaklanabilir.

Knative konteyner devreye alma ve orkestrasyon sürecini kolaylaştırır

Geliştiriciler için kodun konteynerli hale getirilmesi çok fazla yinelenen adım ve konteynerlerin orkestrasyonu çok fazla yapılandırma ve komut dosyası oluşturma (örneğin, yapılandırma dosyalarının oluşturulması, bağımlılıkların kurulması, log dosyasına kaydın ve takibin yönetilmesi ve sürekli entegrasyon/sürekli teslimat (CI/CD) komut dosyalarının yazılması) gerektirir.

Knative bu görevleri şu 3 bileşenle otomatikleştirerek daha kolay hale getirir:

  • Derleme: Knative'in Derleme bileşeni, kaynak kodunu otomatik olarak bir bulut tabanlı konteynere ya da işleve dönüştürür. Özellikle, kodu depodan çeker, gerekli bağımlılıkları kurar, konteyner görüntüsünü oluşturur ve diğer geliştiricilerin kullanması için konteyner kayıt defterine yerleştirir. Knative'in bulabilmesi için geliştiricilerin bu bileşenlerin konumunu belirtmesi gerekir, ancak bittiğinde Knative oluşturmayı otomatikleştirir.
  • Hizmet: Hizmet (Serve) bileşeni, konteynerleri ölçeklenebilir hizmetler olarak çalıştırır; binlerce konteyner eşgörünümüne kadar veya sıfıra kadar ölçeklenebilir (sıfıra ölçekleme). Ayrıca Hizmet bileşeninin 2 çok yararlı özelliği vardır:
    • Konteyneri her üretime aldığınızda versiyonlarını (anlık görüntüler adı verilir) kaydeden ve bu versiyonları eşzamanlı çalıştırmanızı sağlayan Yapılandırma özelliği.
    • Farklı hacimlerde trafiği bu sürümlere yönlendirmenizi sağlayan Hizmet yönlendirme. Bir konteynerin kullanıma açılmasını aşamalandırmak veya genel üretime sokmadan önce konteyner mimarili bir uygulamanın hızlı (canary) testini gerçekleştirmek için bu özellikleri birlikte kullanabilirsiniz.
  • Olay: Olay (Event), belirtilen olayların konteyner tabanlı hizmetleri veya işlevleri tetiklemesini sağlar. Bu özellikle Knative'in sunucusuz bilişim yetenekleri için çok önemlidir; bir işlev sisteme gerektiğinde bir şeylerin sisteme bu işlevi getirmesini söylemesi gerekir. Olay, ekiplerin olay türlerine ilgi göstermesine imkan tanır ve ardından olayın oluşturucusuna otomatik olarak bağlanarak olayları konteynere yönlendirir ve bu bağlantıları programlamaya duyulan ihtiyacı ortadan kaldırır.

"Knative: Temel Bir Rehber" makalesini okuyarak Knative hakkında daha fazla bilgi edinebilirsiniz.

Kubernetes GitHub commit'leri ve artan popülerliğinin diğer kanıtları

Tarihin en hızlı büyüyen açık kaynak projelerinden biri olan Kubernetes'in büyüme eğrisi hızlanmaya devam ediyor. Geliştiriciler ve onları istihdam eden şirketler arasındaki benimsenme oranı tırmanışta. Bazı veriler dikkate değer:

  • Bu yazının yazıldığı tarih itibariyle, GitHub (bağlantı IBM dışındadır) üzerindeki Kubernetes havuzuna son dört aydaki yaklaşık 6.000 giriş dahil olmak üzere 86.200'den fazla giriş yapıldı ve projeye aktif olarak katkı sağlayan 2.300'den  fazla kişi bulunuyor. Cloud Native Computing Foundation'a (bağlantı IBM dışındadır) göre, Kubernetes ile bağlantılı tüm havuzlar (Kubernetes Gösterge Panosu ve  Kubernetes MiniKube dahil) çapında 148.000'den fazla giriş yapıldı.
  • 1500'den fazla şirket üretim yazılımı varlıkları içinde Kubernetes'i kullanıyor. Bunların arasında AirBnB, Bose, CapitalOne, Intuit, Nordstrom, Philips, Reddit, Slack, Spotify, Tinder ve tabii ki IBM gibi dünyanın tanıdığı pek çok kuruluş yer alıyor. Bunları ve kullanmaya başlayan diğerlerine ilişkin vaka incelemelerini okuyun (bağlantı IBM dışındadır)
  • Container Journal'da (bağlantı IBM dışındadır) yer alan Temmuz 2019'da gerçekleştirilmiş bir ankete göre, son altı ayda Kubernetes kullanmaya başlama oranı %51 arttı.
  • KubeCon + CloudNative Con Kuzey Amerika 2019 (bağlantı IBM dışındadır) etkinliğine 12.000'den fazla kişi katıldı ve bu sayı önceki yılın rekor olan katılımcı sayısından yaklaşık 3.000  daha fazla.
  • ZipRecruiter'a (bağlantı IBM dışındadır) göre, Kubernetes ile bağlantılı bir iş için ödenen ortalama yıllık maaş (Kuzey Amerika'da) 144.628 ABD Doları tutarında. Bu yazının yazıldığı tarih itibariyle, LinkedIn'de (bağlantı IBM dışındadır) listelenen 21.000'den  fazla Kubernetes ile bağlantılı pozisyon bulunuyor.

Kubernetes eğitici programları

Kubernetes ile çalışmaya hazırsanız veya Kubernetes ve Kubernetes ekosistemi araçlarıyla ilgili becerilerinizi geliştirmek istiyorsanız bu eğitici programlardan birini deneyebilirsiniz:

Kubernetes ve IBM Cloud

Bir yönetilen konteyner orkestrasyonu çözümü olan IBM Cloud® Kubernetes Hizmeti, bir hesaplama anasistemleri kümesinde konteynerli uygulamaların devreye alınmasını, işletimini, ölçeklendirilmesini ve izlenmesini otomatikleştirirken aynı zamanda IBM'e özgü yetenekler ekler. Uygulamaların hızla teslim edilmesine olanak sağlar ve blockchain ile IBM Watson® gibi gelişmiş hizmetlere bağlayabilir.

Yönetilen Kubernetes hizmetinin bulut yolculuğunuzda size nasıl yardımcı olabileceğine ilişkin bir genel bakış için "Advantages of Managed Kubernetes"(03:14) videomuzu izleyin:

Red Hat® OpenShift® on IBM Cloud, IBM Cloud platformu üzerinde tam yönetilen OpenShift kümeleri sunan kapsamlı bir hizmettir (OpenShift, Red Hat Enterprise Linux üzerinde çalışan bir kurumsal Kubernetes platformudur).

Yeni Forrester Wave: Çoklu Bulut Konteyner Geliştirme Platformları raporunda (PDF, 415 KB) OpenShift hakkında daha fazla bilgi edinin.

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