Kubernetes Cluster Kurulumu: Kapsamlı Bir Kılavuz ve Pratik Uygulamalar
Bu kılavuzda, üretim ortamlarına uygun, sağlam bir Kubernetes kümesi kurulumunun temel adımlarını ve kritik bileşenlerini derinlemesine inceleyeceğiz. Amaç, yalnızca kurulumu gerçekleştirmek değil, aynı zamanda kümenin mimarisini, işleyişini ve ölçeklenebilirlik stratejilerini anlamaktır.
Kubernetes Mimarisi ve Temel Bileşenler
Kubernetes kümesi, birbirleriyle iletişim kuran ve iş yüklerini yöneten bir dizi makineden (düğüm) oluşur. Bu düğümler iki ana kategoriye ayrılır:
- Control Plane (Kontrol Düzlemi) Düğümleri: Kümenin beyni olarak görev yaparlar. API sunucusu, etcd veri deposu, scheduler ve controller manager gibi kritik bileşenleri barındırırlar. Bu düğümlerin yüksek erişilebilirliği (HA) üretim ortamları için zorunludur.
- Worker (İşçi) Düğümleri: Uygulama konteynerlerinin çalıştığı yerlerdir. Kubelet, kube-proxy ve container runtime (örn. Docker, containerd) bu düğümlerde çalışır.
Control Plane Kurulumu (HA Yapılandırması)
Yüksek erişilebilirlik için en az üç control plane düğümü önerilir. etcd'nin dağıtık bir veri deposu olması, veri tutarlılığını ve hata toleransını sağlar. API sunucusu, etcd'ye erişerek küme durumunu yönetir. Scheduler, Pod'ları uygun düğümlere atarken, Controller Manager küme durumunu sürekli olarak istenen durumla karşılaştırır ve gerekli düzeltmeleri yapar.
# Örnek: etcd kurulumu ve konfigürasyonu (basitleştirilmiş)
# Gerçek bir HA kurulumu için daha fazla yapılandırma gereklidir.
# etcd servisini başlatma
systemctl start etcd
# etcd üye listesini kontrol etme
etcdctl member list
Açıklama: Bu komutlar, etcd hizmetini başlatır ve mevcut etcd kümesinin üyelerini listeler. Üretim ortamlarında, etcd'nin TLS ile güvenli hale getirilmesi, yedekleme stratejilerinin belirlenmesi ve ağ erişiminin kısıtlanması hayati önem taşır.
Worker Düğümü Kurulumu
Her worker düğümünde, Kubelet Kubernetes kontrol düzlemi ile iletişim kurarak Pod'ların çalışmasını sağlar. Kube-proxy, Pod'lar arasındaki ağ trafiğini yönetir ve servis keşfini sağlar. Container runtime ise konteyner imajlarını indirip konteynerleri çalıştırır.
# Örnek: Kubelet servisini başlatma
systemctl enable kubelet
systemctl start kubelet
Açıklama: Kubelet hizmetini etkinleştirmek ve başlatmak, worker düğümünün küme tarafından tanınmasını ve iş yüklerini alabilmesini sağlar.
Temel Kubernetes Kavramları
- Pod: Kubernetes'deki en küçük dağıtım birimidir. Bir veya daha fazla konteyner içerebilir. Konteynerler Pod içinde IP adresini ve depolama kaynaklarını paylaşır.
- Service: Bir Pod grubuna erişim sağlayan bir soyutlamadır. Pod'lar ölçeklendiğinde veya değiştirildiğinde sabit bir erişim noktası sunar.
- Deployment: Uygulamaların deklaratif güncellemelerini ve yönetilmesini sağlar. Pod'ların istenen sayıda kopyasını çalıştırır ve güncellemeler sırasında kesintisiz hizmet sunar.
- Namespace: Küme kaynaklarını mantıksal olarak gruplandırmak için kullanılır. Farklı ekipler veya projeler için izole ortamlar sağlar.
Gerçek Production Senaryosu: Mikroservis Dağıtımı
Bir e-ticaret platformunda, her biri ayrı bir servisi temsil eden (örn. ürün kataloğu, sipariş yönetimi, kullanıcı kimlik doğrulaması) onlarca mikroservis bulunmaktadır. Bu mikroservisler Kubernetes üzerinde konteynerler halinde çalıştırılır. Her mikroservis için bir Deployment oluşturulur. Bu Deployment'lar, mikroservisin belirli sayıda kopyasının (replica) her zaman çalışır durumda olmasını sağlar. Bir Service, her mikroservise sabit bir DNS adı ve IP adresi üzerinden erişim imkanı tanır. Kullanıcı trafiği, bir Ingress Controller aracılığıyla ilgili servislere yönlendirilir. Örneğin, ürün arama servisi güncellendiğinde, Deployment'ın rolling update özelliği sayesinde mevcut kullanıcılar etkilenmeden yeni versiyon sorunsuz bir şekilde devreye alınır.
Ağ Yapılandırması (CNI)
Kubernetes'in ağ yetenekleri, Container Network Interface (CNI) eklentileri aracılığıyla sağlanır. Calico, Flannel, Cilium gibi CNI çözümleri, Pod'lar arasında güvenli ve verimli ağ iletişimi sağlar. Üretim ortamlarında, ağ politikaları (Network Policies) ile Pod'lar arasındaki trafiği kısıtlamak, güvenlik duruşunu güçlendirir.
Depolama Yönetimi (CSI)
Konteynerler geçici depolama alanına sahip olsa da, kalıcı veri depolama ihtiyacı Container Storage Interface (CSI) sürücüleri ile karşılanır. AWS EBS, Azure Disk, Google Persistent Disk gibi bulut sağlayıcı depolama birimleri veya Ceph, GlusterFS gibi dağıtık depolama sistemleri CSI sürücüleri aracılığıyla Kubernetes ile entegre edilebilir.
Ölçeklenebilirlik ve Yönetim
Horizontal Pod Autoscaler (HPA), Pod'ların CPU veya bellek kullanımına göre otomatik olarak ölçeklenmesini sağlar. Cluster Autoscaler ise, Pod'ların çalışması için yeterli kaynak olmadığında worker düğümü sayısını otomatik olarak artırıp azaltır. Bu iki özellik, kaynak kullanımını optimize eder ve maliyetleri düşürürken performansın korunmasını sağlar.