Takip et

Kubernetes ve Mimarisi: Konteyner Orkestrasyonunun Kalbi

Günümüzün hızla değişen dijital dünyasında, uygulamaları hızlı, esnek ve güvenilir bir şekilde dağıtmak ve yönetmek büyük önem taşımakt…

Kubernetes ve Mimarisi: Konteyner Orkestrasyonunun Kalbi

Günümüzün hızla değişen dijital dünyasında, uygulamaları hızlı, esnek ve güvenilir bir şekilde dağıtmak ve yönetmek büyük önem taşımaktadır. Konteyner teknolojisi bu ihtiyaca güçlü bir çözüm sunarken, bu konteynerlerin büyük ölçekte yönetimi ve orkestrasyonu için Kubernetes gibi platformlar vazgeçilmez hale gelmiştir. Bu makale, Kubernetes’in ne olduğunu, neden bu kadar kritik olduğunu ve karmaşık mimarisinin temel bileşenlerini detaylı bir şekilde inceleyecektir.

Kubernetes Nedir? Neden İhtiyaç Duyarız?

Kubernetes, açık kaynaklı bir konteyner orkestrasyon platformudur. Temel amacı, konteynerleştirilmiş iş yüklerini ve servislerini otomatik olarak dağıtmak, ölçeklendirmek ve yönetmektir. Google tarafından geliştirilen ve daha sonra Cloud Native Computing Foundation’a (CNCF) bağışlanan Kubernetes, modern uygulama geliştirme ve operasyonlarının omurgası haline gelmiştir.

Konteynerleşmenin Yükselişi

Uygulamaların ve bağımlılıklarının izole edilmiş, taşınabilir birimler halinde paketlenmesini sağlayan konteyner teknolojisi (özellikle Docker), yazılım geliştirme süreçlerini devrim niteliğinde değiştirdi. Geliştiriciler, uygulamalarını farklı ortamlarda (geliştirme, test, üretim) tutarlı bir şekilde çalıştırabilmenin avantajını yaşadı. Ancak, yüzlerce veya binlerce konteyneri manuel olarak yönetmek kısa sürede sürdürülemez bir hale geldi.

Orkestrasyon İhtiyacı

Tek bir konteyneri yönetmek kolay olsa da, mikroservis tabanlı bir mimaride çalışan birden fazla konteyneri dağıtmak, ağlarını yapılandırmak, depolama sağlamak, yük dengelemek, hataları ele almak ve ölçeklendirmek karmaşık bir iştir. İşte tam bu noktada Kubernetes devreye girer. Kubernetes, bu operasyonel yükü otomatize ederek geliştiricilerin ve operasyon ekiplerinin ana işlerine odaklanmasını sağlar.

Kubernetes’in Sunduğu Avantajlar

  • Otomatik Dağıtım ve Geri Alma: Uygulamalarınızı otomatik olarak dağıtır ve bir sorun durumunda önceki bir sürüme geri dönebilir.
  • Ölçeklendirme: İhtiyaca göre uygulamalarınızı otomatik olarak ölçeklendirebilir (yatay ölçeklendirme).
  • Servis Keşfi ve Yük Dengeleme: Uygulamalarınızın birbirini bulmasını sağlar ve trafiği eşit şekilde dağıtır.
  • Depolama Orkestrasyonu: Uygulamalarınıza kalıcı depolama birimleri atar.
  • Kendi Kendine İyileşme: Arızalı konteynerleri veya düğümleri otomatik olarak yeniden başlatır, değiştirir veya kaldırır.
  • Yapılandırma ve Gizli Bilgi Yönetimi: Uygulama yapılandırmalarını ve hassas verileri güvenli bir şekilde yönetir.

Kubernetes Mimarisine Genel Bakış

Kubernetes, bir “küme” (cluster) mimarisi üzerinde çalışır. Bu küme, uygulamalarınızı çalıştıran bir dizi bağlı makineden oluşur. Temel olarak iki ana bileşen türü vardır: Kontrol Düzlemi (Control Plane) ve Çalışan Düğümler (Worker Nodes).

Master-Worker Düğüm Yapısı

Bir Kubernetes kümesi, en az bir ana düğüm (Master Node) ve bir veya daha fazla çalışan düğümden (Worker Node) oluşur. Ana düğüm, kümenin beyni gibidir; tüm küme etkinliklerini yönetir ve koordine eder. Çalışan düğümler ise, konteynerleştirilmiş uygulamalarınızı çalıştıran makinelerdir.

Kontrol Düzlemi ve Veri Düzlemi

Kontrol Düzlemi (Control Plane): Kümenin genel durumunu yöneten ve çalışan düğümler üzerinde iş yüklerinin nasıl dağıtılacağını belirleyen bileşenler bütünüdür. Genellikle ana düğüm üzerinde çalışır, ancak yüksek erişilebilirlik için birden fazla ana düğümde dağıtılabilir.
Veri Düzlemi (Data Plane): Çalışan düğümlerin kendisidir. Kontrol düzleminin talimatlarına göre konteynerleri çalıştırır, ağ ve depolama kaynaklarını sağlar.

Kontrol Düzlemi (Control Plane) Bileşenleri

Kontrol düzlemi, Kubernetes kümesinin kalbidir ve kümenin genel durumunu sürdürmekten sorumludur. İşte ana bileşenleri:

kube-apiserver

Kubernetes API sunucusu, kontrol düzleminin ön yüzüdür ve tüm RESTful API isteklerini işler. Kullanıcılar, CLI araçları (kubectl) veya diğer servisler aracılığıyla küme ile etkileşim kurmak için bu API sunucusunu kullanır. Kümedeki tüm iletişimin merkezi noktasıdır ve güvenlik, kimlik doğrulama ve yetkilendirme gibi önemli işlevleri yerine getirir.

etcd

etcd, Kubernetes kümesinin tüm yapılandırma verilerini, durum bilgilerini ve meta verilerini depolayan dağıtılmış, tutarlı bir anahtar-değer deposudur. Kümenin “tek doğruluk kaynağı” olarak işlev görür. Yüksek erişilebilirlik ve veri tutarlılığı sağlamak için tasarlanmıştır.

kube-scheduler

Zamanlayıcı, yeni oluşturulan Pod’ları (Kubernetes’teki en küçük dağıtılabilir birim) uygun bir çalışan düğümüne atamaktan sorumludur. Düğüm kaynak gereksinimleri, politikalar, etiketler ve diğer kısıtlamalar gibi faktörleri dikkate alarak en uygun düğümü seçer.

kube-controller-manager

Bu bileşen, farklı kontrolörleri tek bir işlemde birleştirir. Kontrolörler, kümenin mevcut durumunu gözlemler ve istenen duruma ulaşmak için değişiklikler yapar. Örneğin:

  • Node Controller: Düğüm durumunu kontrol eder ve düğümlerin düşmesi durumunda Pod’ları yeniden zamanlar.
  • Replication Controller: Her bir Deployment için belirtilen sayıda Pod kopyasının çalıştığından emin olur.
  • Endpoint Controller: Service ve Pod’lar arasındaki bağlantıları yönetir.
  • Service Account & Token Controllers: Yeni namespace’ler için varsayılan servis hesapları ve API erişim belirteçleri oluşturur.

cloud-controller-manager (İsteğe Bağlı)

Bu bileşen, Kubernetes’i belirli bir bulut sağlayıcısıyla (AWS, GCP, Azure vb.) entegre etmek için kullanılır. Bulut sağlayıcısına özgü kontrolörleri çalıştırır. Örneğin, bulut sağlayıcısının yük dengeleyicilerini veya depolama birimlerini yönetir.

Çalışan Düğüm (Worker Node) Bileşenleri

Çalışan düğümler, kontrol düzleminin talimatlarını yerine getirerek gerçek iş yüklerini (uygulama konteynerleri) çalıştıran makinelerdir. Her çalışan düğümde aşağıdaki bileşenler bulunur:

kubelet

kubelet, her çalışan düğümde çalışan bir aracıdır. Kontrol düzleminden gelen Pod spesifikasyonlarını alır ve Pod’daki konteynerlerin çalıştığından ve sağlıklı olduğundan emin olur. Konteyner çalışma zamanı ile etkileşime girerek konteynerleri başlatır, durdurur ve yönetir. Ayrıca düğüm ve Pod durum bilgilerini API sunucusuna geri bildirir.

kube-proxy

kube-proxy, her çalışan düğümde çalışan bir ağ proxy’sidir. Kubernetes Service kavramının uygulanmasından sorumludur. Küme içindeki ağ kurallarını yönetir ve Pod’lara giden ağ trafiğini yönlendirir. Çeşitli modlarda (iptables, ipvs) çalışabilir ve servis keşfi ile yük dengeleme için temel ağ altyapısını sağlar.

Konteyner Çalışma Zamanı (Container Runtime)

Konteyner çalışma zamanı, konteynerleri çalıştıran yazılımdır. En bilinen örneği Docker’dır, ancak containerd, CRI-O gibi diğer çalışma zamanları da kullanılabilir. kubelet, bu çalışma zamanı arayüzü (CRI – Container Runtime Interface) aracılığıyla konteynerleri yönetir.

Kubernetes Nesneleri ve Kaynakları

Kubernetes’te, kümenizin istenen durumunu tanımlamak için “nesneler” kullanırsınız. Bu nesneler, kümenize ne tür iş yükleri çalıştırmak istediğinizi, ne kadar kaynak kullanacaklarını ve nasıl davranacaklarını bildirir. İşte en yaygın Kubernetes nesneleri:

Pod’lar

Pod, Kubernetes’teki en küçük ve temel dağıtılabilir birimdir. Bir veya daha fazla konteyner (genellikle sıkıca bağlı ve birlikte çalışan) ve bu konteynerler için paylaşılan depolama, ağ kaynakları ve bir çalışma zamanı yapılandırması içerir. Pod’lar geçicidir ve bir düğümde öldüklerinde yeniden oluşturulurlar.


apiVersion: v1
kind: Pod
metadata:
  name: benim-nginx-pod
spec:
  containers:
  - name: nginx
    image: nginx:latest
    ports:
    - containerPort: 80

Deployment'lar

Deployment'lar, Pod'ların ve ReplicaSet'lerin deklaratif güncellemelerini sağlar. Bir uygulamanın istenen durumunu tanımlamanıza olanak tanır ve Kubernetes'in bu durumu sürdürmesini sağlar. Örneğin, bir Deployment ile uygulamanızın 3 kopyasının her zaman çalışmasını sağlayabilirsiniz. Güncelleme stratejilerini (rolling update, recreate) yönetir.

Service'ler

Service'ler, bir dizi Pod'a sabit bir ağ erişimi sağlar. Pod'lar geçici olduğu için IP adresleri değişebilir. Service'ler, bu Pod'lara erişmek için sabit bir IP adresi ve DNS adı sağlayarak, diğer uygulamaların Pod'ları kolayca bulmasını ve onlarla iletişim kurmasını sağlar. Yük dengeleme işlevini de yerine getirirler.

  • ClusterIP: Küme içinde erişilebilir sabit bir IP sağlar.
  • NodePort: Her düğümde belirli bir port açar ve bu port üzerinden servise erişim sağlar.
  • LoadBalancer: Bulut sağlayıcısının yük dengeleyicisini kullanarak servisi dış dünyaya açar.
  • ExternalName: Harici bir DNS adını bir servise eşler.

ConfigMap'ler ve Secret'lar

ConfigMap'ler: Uygulama yapılandırma verilerini (ortam değişkenleri, komut satırı argümanları, yapılandırma dosyaları) Pod'lardan ayırmak için kullanılır.
Secret'lar: Hassas verileri (parolalar, API anahtarları, kimlik doğrulama belirteçleri) güvenli bir şekilde depolamak ve Pod'lara sağlamak için kullanılır. Base64 ile kodlanmış olsalar da, daha güçlü şifreleme yöntemleri için ek araçlar önerilir.

Persistent Volume'lar (PV) ve Persistent Volume Claim'ler (PVC)

Persistent Volume (PV): Kümedeki bir depolama kaynağının soyutlamasıdır (örneğin, NFS paylaşımı, bulut depolama birimi). Küme yöneticileri tarafından sağlanır.
Persistent Volume Claim (PVC): Bir kullanıcının depolama isteğidir. Bir Pod, doğrudan bir PV'ye değil, bir PVC'ye bağlanır. Kubernetes, uygun bir PV'yi PVC'ye otomatik olarak bağlar.

Kubernetes'in Çalışma Prensibi ve İş Akışı

Kubernetes'in gücü, deklaratif API'sinde ve sürekli kontrol döngülerinde yatar. Kullanıcılar, kümenin "istenilen durumunu" tanımlar ve Kubernetes, bu duruma ulaşmak ve sürdürmek için otomatik olarak çalışır.

Deklaratif API ve Kontrol Döngüleri

Kullanıcılar, YAML veya JSON dosyaları kullanarak Kubernetes nesnelerinin istenen durumunu tanımlar ve bu tanımları API sunucusuna gönderir. Kontrolörler, kümenin mevcut durumunu etcd'den okur, istenen durumla karşılaştırır ve aradaki farkı kapatmak için gerekli eylemleri gerçekleştirir. Bu sürekli döngü, kümenin her zaman tanımlanan durumda kalmasını sağlar.

Pod Yaşam Döngüsü

Bir Pod oluşturulduğunda, kube-scheduler onu uygun bir düğüme atar. kubelet, atanan düğümde Pod'un konteynerlerini başlatır. Pod, çeşitli yaşam döngüsü aşamalarından geçer (Pending, Running, Succeeded, Failed, Unknown). Kubernetes, Pod'un sağlığını izler ve bir sorun durumunda onu yeniden başlatır veya değiştirir.

Servis Keşfi ve Yük Dengeleme

Kubernetes, servis keşfi için dahili bir DNS sistemi kullanır. Pod'lar, bir servisin adını kullanarak diğer servislere erişebilir. kube-proxy, bu servislerin arkasındaki Pod'lara gelen trafiği otomatik olarak yük dengeleyerek dağıtır. Bu sayede uygulamalar birbirini kolayca bulabilir ve yüksek erişilebilirlik sağlanır.

Ölçeklendirme ve Kendi Kendine İyileşme

Kubernetes, Horizontal Pod Autoscaler (HPA) ve Cluster Autoscaler gibi araçlarla otomatik ölçeklendirme yetenekleri sunar. HPA, CPU kullanımı veya özel metrikler gibi ölçütlere göre Pod'ların sayısını artırır veya azaltır. Cluster Autoscaler ise, kümedeki düğüm sayısını otomatik olarak yönetir. Kendi kendine iyileşme mekanizmaları sayesinde, arızalı Pod'lar veya düğümler otomatik olarak tespit edilir ve sistemin genel kararlılığı korunur.

Sonuç

Kubernetes, modern bulut yerel uygulamaların geliştirilmesi ve dağıtılmasında devrim yaratan güçlü bir platformdur. Karmaşık mimarisi, kontrol düzlemi ve çalışan düğüm bileşenlerinin uyumlu çalışmasıyla konteyner orkestrasyonunu otomatize eder. Pod'lar, Deployment'lar ve Service'ler gibi temel nesneleri anlayarak, geliştiriciler ve operasyon ekipleri uygulamalarını daha verimli, ölçeklenebilir ve dayanıklı hale getirebilirler. Kubernetes'in sunduğu bu sağlam altyapı, işletmelerin dijital dönüşüm yolculuklarında kritik bir rol oynamaya devam edecektir.

Sıkça Sorulan Sorular (SSS)

Kubernetes ve Docker arasındaki fark nedir?

Docker, konteyner oluşturmak ve çalıştırmak için bir araç setidir (konteyner çalışma zamanı). Kubernetes ise, Docker gibi konteynerleri büyük ölçekte yönetmek, dağıtmak ve orkestre etmek için kullanılan bir platformdur. Kubernetes, Docker'ı bir alt bileşen olarak kullanabilir.

Bir Kubernetes kümesi kaç ana düğümden oluşmalıdır?

Geliştirme veya test ortamları için tek bir ana düğüm yeterli olabilir. Ancak üretim ortamları için yüksek erişilebilirlik sağlamak amacıyla genellikle en az üç ana düğümden oluşan bir küme önerilir. Bu, bir ana düğümün arızalanması durumunda kümenin çalışmaya devam etmesini sağlar.

kubectl nedir ve ne işe yarar?

kubectl, Kubernetes kümenizi komut satırından yönetmek için kullanılan bir CLI (Komut Satırı Arayüzü) aracıdır. Pod'ları dağıtmak, servisleri yönetmek, küme kaynaklarını görüntülemek ve küme durumunu kontrol etmek gibi birçok işlemi kubectl ile yapabilirsiniz.

Kubernetes'te "namespace" ne anlama gelir?

Namespace'ler, Kubernetes kümesi içindeki kaynakları (Pod'lar, Service'ler, Deployment'lar vb.) mantıksal olarak izole etmek için kullanılan sanal kümelerdir. Büyük projelerde veya birden fazla ekibin çalıştığı ortamlarda kaynak çakışmalarını önlemek ve yönetimi kolaylaştırmak için kullanılırlar.

Kubernetes'i öğrenmeye nereden başlamalıyım?

Kubernetes'i öğrenmeye başlamak için öncelikle konteyner (özellikle Docker) kavramını iyi anlamak önemlidir. Ardından, Kubernetes'in temel mimarisini ve Pod, Deployment, Service gibi ana nesnelerini öğrenmekle başlayabilirsiniz. Minikube veya Kind gibi yerel küme araçları, pratik yapmak için harika başlangıç noktalarıdır. Resmi Kubernetes dokümantasyonu ve çevrimiçi kurslar da değerli kaynaklardır.

Yorumlar
İçeriği beğendiniz mi? Bir tartışma başlatın veya görüşlerinizi paylaşın.
Yorum Yaz

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Gönder

E-posta Bülteni
Yazılım Topluluğuna Katılın
En son güncellemeleri, yaratıcı ipuçlarını ve özel kaynakları doğrudan e-posta kutunuza alın. Tasarım ve inovasyonun geleceğini birlikte keşfedelim.
Mobil sürümden çık