Kubernetes Nedir ve Neden Önemlidir?
Kubernetes’in Açık Kaynaklı Bir Orkestrasyon Aracı Olarak Tanımı
Kubernetes hakkında bilinmesi gereken en temel bilgi, onun konteynerleştirilmiş uygulamaların dağıtımını, ölçeklendirilmesini ve yönetimini otomatikleştiren açık kaynaklı bir konteyner orkestrasyon platformu olmasıdır. Başlangıçta Google tarafından Go dilinde geliştirilmiş ve 2015’te açık kaynak olarak yayınlanmıştır. Kubernetes, konteyner tabanlı uygulamaları yönetmek için günümüzde endüstri standardı haline gelmiştir. “Kubernetes” kelimesi Yunanca kökenlidir ve “dümenci” veya “pilot” anlamına gelir
Cloud Native Computing Foundation ve Kubernetes’in Gelişimi
Kubernetes, 2015 yılında 1.0 sürümünün çıkışıyla beraber Google tarafından yeni kurulan Cloud Native Computing Foundation (CNCF) bünyesine bağışlandı. 2016’da CNCF’in ilk barındırılan projesi oldu ve 2018’de olgunluk (mezun) seviyesine ulaşarak tam teşekküllü bir topluluk projesi haline geldi. Kubernetes, geniş bir açık kaynak ekosisteme sahiptir ve Red Hat ile CoreOS gibi birçok şirket projeye katkı sağlamıştır. 2017 itibarıyla Docker Swarm ve Apache Mesos gibi alternatifleri geride bırakıp konteyner orkestrasyonu alanında fiili standart konumuna yükselmiştir
Kubernetes’in İş Yükü Yönetimindeki Avantajları
Kubernetes, konteyner tabanlı iş yükü yönetiminde birçok avantaj sunar. Kendini iyileştirme (self-healing), otomatik ölçeklendirme ve yüksek erişilebilirlik özellikleri sayesinde uygulamalar kesintisiz bir şekilde çalışır. Platform, uygulamalarınızın farklı sunucu veya bulut ortamlarında da benzer bir şekilde çalışmasını mümkün kılar; bu taşınabilirlik avantajı sayesinde aynı iş yükü her yerde tutarlı olarak yönetilebilir. Kubernetes, insan müdahalesini azaltarak pek çok işlemi otomasyon ile gerçekleştirir ve büyük ölçekli konteyner ortamlarını verimli bir şekilde yönetebilir. Bu sayede kaynak kullanımı optimize edilir ve operasyonel yük azalır.
Docker ve Kubernetes Arasındaki İlişki Nedir?
Container Teknolojisi ve Docker’ın Temel Prensipleri
Konteyner (container) teknolojisi, bir uygulamanın kodunu ve tüm bağımlılıklarını tek bir paket halinde sunarak her ortamda aynı şekilde çalışmasını sağlar. Bir konteyner, izole bir çalışma ortamıdır ve uygulamayı işletim sistemi seviyesinde sanallaştırarak çalıştırır. Docker ise bu konteynerleri oluşturmak, görüntü (image) olarak paketlemek ve çalıştırmak için geliştirilmiş en yaygın platformdur. Docker ile bir imaj dosyası oluşturulur; bu imaj çalıştırıldığında bir konteyner ortaya çıkar. Konteynerler, sanal makinelere kıyasla daha hafif oldukları için ayrı bir işletim sistemi çekirdeği taşımazlar; bu da uygulamaların daha hızlı ve taşınabilir olmasını mümkün kılar
Kubernetes ve Docker’ın Birlikte Çalışma Mekanizması
Kubernetes ve Docker birbirini tamamlayan teknolojilerdir. Kubernetes’i kullanarak Docker konteynerlerini birden fazla sunucuya (node) yayabilir ve hepsini tek merkezden yönetebilirsiniz. Docker, tek bir sunucuda konteyner çalıştırmaya odaklanırken Kubernetes, tüm bu konteynerleri orkestre eden üst katmanda görev yapar. Kubernetes, her worker node’da Docker Engine (veya benzeri bir konteyner motoru) üzerinden konteynerleri pod’lar içinde başlatır ve denetler. Böylece Docker konteynerlerinin yaşam döngüsü Kubernetes ile otomatik hale gelir ve altyapınız çok daha ölçeklenebilir, dayanıklı bir yapıya kavuşur.
Docker Swarm ile Kubernetes Karşılaştırması
Docker Swarm, Docker Engine içinde yer alan yerleşik ve basit bir konteyner orkestrasyon servisidir. Kurulumu ve kullanımı Kubernetes’e göre daha kolaydır, ancak sunduğu özellikler sınırlıdır. Kubernetes ise daha geniş bir özellik setine ve eklenti ekosistemine sahiptir; otomatik ölçeklendirme, kendini iyileştirme ve gelişmiş güvenlik gibi imkanlar sunar. Docker Swarm otomatik ölçeklendirme desteğine sahip değildir ve genellikle daha küçük ölçekli işler için yeterlidir. Büyük ve karmaşık projelerde ise Kubernetes, geniş topluluk desteğiyle fiili standart haline gelmiştir
Kubernetes Mimarisi Nasıl Çalışır?
Master ve Worker Node’ların Görevleri
Kubernetes kümesi genellikle bir Master Node ve birden çok Worker Node’dan oluşur. Master Node, kümenin kontrol düzlemi olarak çalışır ve kümenin yönetiminden sorumludur (örn. API sunucusu, zamanlayıcı ve denetleyicileri barındırır). Worker Node’lar ise uygulama iş yüklerini çalıştıran makinelerdir; üzerlerinde pod’lar ve konteynerler çalışır. Master, hangi pod’un hangi node üzerinde çalışacağını belirler ve Worker Node’lar bu talimatları yerine getirerek konteynerları çalıştırır.
Kubernetes API ve Kontrol Düzlemi Yapısı
API Sunucusu, Kubernetes kontrol düzleminin merkezidir ve tüm yönetim komutlarının iletilmesini sağlar. Küme durum bilgisi, etcd adlı dağıtık veritabanında saklanır; etcd, CoreOS tarafından geliştirilmiş açık kaynaklı bir anahtar-değer deposudur. Kontrol düzlemindeki diğer bileşenler (Denetleyici Yöneticisi ve Zamanlayıcı gibi) istenen durumun korunması için sürekli çalışır. Kullanıcılar ve yönetim araçları (ör. kubectl) Kubernetes API’si aracılığıyla cluster ile etkileşim kurar. Kontrol düzlemi, yeni bir pod oluşturulması isteğine karşılık uygun Worker Node üzerinde yeni pod’un başlatılmasını tetikler ve kümenin genel durumunu yönetir.
Kubernetes Cluster Yapısı ve Yönetimi
Kubernetes cluster’ının yönetimi, deklaratif yapılandırma ve denetleyici mekanizmaları ile gerçekleşir. Yöneticiler, kubectl
gibi araçlarla YAML biçimindeki manifest dosyaları kullanarak küme kaynaklarını tanımlar. Kubernetes, bu tanımlara göre gerekli pod’ları başlatarak istenen durumu sağlar ve sürdürür. Örneğin, ReplicaSet adlı denetleyici, bir uygulamanın kaç adet pod ile çalışacağını belirler ve bu sayıyı otomatik olarak korur. Ayrıca, düğümler arası yük dengeleme ve pod yeniden başlatma gibi işlemler de Kubernetes tarafından otomatik olarak yönetilir.
Pod Kavramı ve Kubernetes’teki Önemi Nedir?
Bir Pod İçerisinde Birden Fazla Konteyner Çalıştırmak
Pod, Kubernetes’in en küçük dağıtım birimidir ve gerektiğinde bir pod içerisinde birden fazla konteyner çalıştırılabilir. Aynı pod içindeki konteynerler depolama ve ağ gibi kaynakları ortak paylaşır; örneğin hepsi aynı IP adresini kullanır. Ancak genellikle her bir pod içerisinde yalnızca tek bir konteyner çalıştırılması tavsiye edilir. Birden fazla konteyner kullanımı, çoğunlukla birbirini tamamlayan yardımcı işlemler (ör. log toplama veya proxy konteyneri) gerektiğinde tercih edilir.
Pod’ların IP Adresi ve Network Yapılandırması
Her pod, Kubernetes kümesi içinde kendine ait benzersiz bir IP adresi alır. Kubernetes network’ü, tüm pod’ların sanki ortak bir ağa bağlıymış gibi doğrudan iletişim kurabilmesini sağlar; farklı düğümlerdeki pod’lar bile IP adresleri üzerinden haberleşebilir. Aynı pod içindeki birden fazla konteyner de aynı IP adresini ve port alanını paylaşır. Bu yapı sayesinde uygulama bileşenleri, ayrıntılı ağ ayarlarıyla uğraşmadan birbirleriyle kolayca iletişim kurabilir.
Pod Yaşam Döngüsü ve Yönetimi
Pod’ların yaşam döngüsü, oluşturulma, çalıştırılma ve sonlanma aşamalarını içerir. Kubernetes, pod’ların mevcut durumunu sürekli izler ve herhangi bir pod beklenmedik şekilde sonlanırsa yerine yenisini başlatarak istenen durumu korur. Pod’lar geçicidir; doğrudan kullanıcılar tarafından yeniden başlatılmaz, bunun yerine denetleyici mekanizmalar (örneğin Deployment veya ReplicaSet) aracılığıyla yönetilir. Bu sayede bir pod ölse bile uygulamanın kesintisiz çalışması sağlanır.
Kubernetes Deployment Nasıl Yapılır?
Bir Deploy İsteği Geldiğinde Pod’un Yeni Versiyonu Nasıl Oluşturulur?
Bir deploy isteği (yeni bir sürüm talebi) geldiğinde Kubernetes, ilgili pod’un yeni versiyonunu oluşturur. Yeni pod’un sorunsuz bir şekilde çalıştığı görüldüğünde diğer pod versiyonu (eski sürüm) otomatik olarak sonlandırılır. Bu yaklaşım, uygulama güncellemelerini kesinti olmadan (rolling update yöntemiyle) gerçekleştirmeyi sağlar. Kubernetes, bu süreçte önce yeni pod’ları ayağa kaldırır, ardından sorunsuz çalıştıklarından emin olduktan sonra eski pod’ları devre dışı bırakır.
Kubernetes ile Uygulama Dağıtım Stratejileri
Kubernetes, uygulama dağıtımı için birden fazla stratejiyi destekler. Varsayılan olarak Rolling Update stratejisi kullanılır; bu yöntem yeni sürümü kademeli olarak devreye alırken eski sürümü kaldırır ve kesintisiz dağıtım sağlar. İhtiyaca göre Blue-Green dağıtım gibi yaklaşımlar da uygulanabilir: bu stratejide yeni sürüm paralel bir ortamda hazır hale getirilir ve trafik yönlendirilerek bir anda geçiş yapılır. Ayrıca Canary dağıtım stratejisi ile yeni sürüm yalnızca kullanıcıların küçük bir bölümüne sunulup kademeli olarak yaygınlaştırılabilir. Hangi stratejinin seçileceği, uygulamanın ihtiyaçlarına ve risk toleransına bağlıdır.
Deployment Yapılandırmaları ve Best Practices
Kubernetes’te bir uygulamayı dağıtmak için Deployment nesnesi kullanılır ve bu nesnenin yapılandırması YAML formatında tanımlanır. Deployment tanımında konteyner imajı, kaç adet pod çalışacağı (replica sayısı) ve güncelleme stratejisi gibi bilgiler yer alır. En iyi uygulamalardan biri olarak, her konteyner için CPU ve bellek limitleri belirlemek ve sağlık kontrolleri (liveness ve readiness probeleri) eklemek önerilir. Ayrıca imaj sürümlerini etiketleyerek yönetmek ve yapılandırma verilerini ConfigMap/Secret gibi dış nesneler aracılığıyla sağlamak da iyi bir yaklaşımdır.
Kubernetes Service ve Network Yapısı Nasıl Çalışır?
Kubernetes Network’ü ve İletişim Modeli
Kubernetes’de ağ iletişim modeli, bileşenlerin kolay ve tutarlı bir şekilde haberleşmesini sağlayacak şekilde tasarlanmıştır. Her Pod’a kendi IP adresi verilir ve tüm Pod’lar, kümedeki diğer Pod’larla doğrudan iletişim kurabilir (gerektiğinde Network Policy ile iletişim sınırlandırılabilir). Service nesneleri, birden fazla pod’u tek bir ağ hizmeti altında birleştirerek sabit bir erişim noktası oluşturur. Ayrıca Kubernetes, dahili DNS mekanizması ile servis adlarının çözümlenmesini sağlayarak iletişimi kolaylaştırır.
Bir Kubernetes Hizmeti Oluşturma ve Yönetme
Service, kümedeki bir veya birden fazla pod’a tek bir erişim noktası (sabit IP ve DNS adı) sağlayan Kubernetes nesnesidir. Bir Kubernetes hizmeti oluştururken, hedef pod’ları eşleştirmek için etiket seçiciler (label selector) kullanılır. Service, gelen ağ trafiğini ilgili pod ve içindeki konteynerlere yönlendirerek yük dengelemesi yapar. Örneğin, “ClusterIP” türü bir servis, pod’ları yalnızca küme içinden erişilebilen sabit bir IP altında birleştirir. Kubernetes servisleri sayesinde, ölçeklendirme veya pod yeniden başlatma gibi işlemler sırasında bile uygulamalara kesintisiz olarak erişim sağlanır.
Service Tipleri ve Kullanım Senaryoları
Kubernetes’te farklı Service tipleri bulunmaktadır ve her birinin kullanım alanı farklıdır. ClusterIP (varsayılan servis tipi), pod’ları sadece küme içinden erişilebilen sanal bir IP adresi altında birleştirir. NodePort servisi, her node üzerinde sabit bir port açarak servisinize küme dışından (node’un IP adresi ve belirtilen port üzerinden) ulaşılmasını sağlar. LoadBalancer servisi ise bulut sağlayıcılarıyla entegre şekilde çalışarak harici bir yük dengeleyici aracılığıyla servisinize internet üzerinden erişim sunar. Ayrıca, HTTP bazlı trafik için Ingress nesnesi kullanılarak birden fazla servisi tek bir dış uç nokta altında birleştirmek de mümkündür.
Kubernetes’i Bulut Ortamlarında Kullanmak
Bulut Sağlayıcılarının Kubernetes Hizmetleri
Önde gelen bulut sağlayıcıları (AWS, Azure, Google Cloud gibi) Kubernetes’i yönetilen hizmet olarak sunmaktadır. Örneğin Amazon Elastic Kubernetes Service (EKS), Microsoft Azure Kubernetes Service (AKS) ve Google Kubernetes Engine (GKE) gibi servisler, Kubernetes kümesini bir bulut ortamında kolayca kurup yönetmenize imkân tanır. Bu hizmetler, Kubernetes kontrol düzlemini sizin adınıza yönetir ve küme ölçeklendirme ile güncelleme işlemlerini otomatize eder. Böylece şirketler, Kubernetes’i bulut altyapısında hızlıca kullanabilir ve altyapı yönetiminin büyük bir kısmını bulut sağlayıcısına devredebilir.
Kubernetes Kümesi Kurulumu ve Yönetimi
Kubernetes kümesini kendiniz kurmak isterseniz bunun için çeşitli araçlar ve yöntemler vardır. Geliştirme veya test amaçlı tek düğümlü bir küme için Minikube gibi araçlar kullanılabilir. Birden fazla sunucudan oluşan üretim ortamlarında ise kubeadm veya benzeri araçlarla Kubernetes kurulumu yapılabilir. Küme yönetiminde kubectl
komut satırı aracı kullanılır; bu araç Kubernetes API’si ile iletişim kurarak pod, servis ve node gibi kaynakları yönetmenizi sağlar. Ayrıca, kümenin performansını izlemek için Prometheus ve Grafana gibi izleme araçları da entegre edilebilir.
Linux ve Kubernetes Entegrasyonu
Kubernetes, temelinde Linux çekirdek teknolojilerinden yararlanan bir sistemdir. Konteyner izolasyonu için Linux’un cgroups ve namespace gibi özellikleri kullanılır. Bu nedenle Kubernetes node’larının çoğu Linux tabanlıdır ve üretim ortamlarında Linux dağıtımları tercih edilir. Windows tabanlı node desteği bulunsa da Kubernetes ekosistemindeki araçların ve konteyner imajlarının büyük kısmı Linux uyumludur. Sonuç olarak, Kubernetes ile çalışırken Linux komutlarına ve sistem yönetimine hâkim olmak büyük bir avantaj sağlar.