Kubernetes Nedir?
Kubernetes (K8s), container'laştırılmış uygulamaların dağıtımını, ölçeklendirmesini ve yönetimini otomatikleştiren açık kaynaklı bir container orkestrasyon platformudur. Google tarafından geliştirilen ve 2014 yılında açık kaynak olarak yayınlanan Kubernetes, bugün Cloud Native Computing Foundation (CNCF) tarafından yönetilmektedir.
2026 yılında Kubernetes, kurumsal uygulamaların %80'inden fazlasında kullanılan standart bir platform haline gelmiştir. Mikro hizmet mimarileri, bulut yerel uygulamalar ve DevOps süreçlerinin temel yapı taşıdır.
Kubernetes Neden Gerekli?
Docker gibi container teknolojileri, tek bir uygulamayı paketlemek ve çalıştırmak için mükemmeldir. Ancak üretim ortamında yüzlerce veya binlerce container'ı yönetmek büyük zorluklar doğurur:
- Container'lar çöktüğünde otomatik olarak yeniden başlatılması gerekir.
- Trafik artışında container sayısının otomatik artırılması gerekir.
- Container'lar arasındaki ağ iletişiminin yönetilmesi gerekir.
- Yeni sürümlerin kesintisiz olarak dağıtılması gerekir.
- Container'ların sunucular arasında dengeli dağıtılması gerekir.
Kubernetes, tüm bu zorlukları otomatik olarak yöneten güçlü bir orkestrasyon platformudur.
Kubernetes Mimarisi
Control Plane (Kontrol Düzlemi)
Cluster'ın beynini oluşturur ve tüm karar verme süreçlerinden sorumludur:
- API Server: Kubernetes'in giriş noktasıdır. Tüm istekler API Server üzerinden geçer.
- etcd: Cluster'ın tüm yapılandırma verilerini saklayan dağıtık anahtar-değer deposu.
- Scheduler: Yeni pod'ların hangi node'da çalışacağını belirler.
- Controller Manager: Cluster'ın istenen durumunu korumak için sürekli kontroller yapar.
Worker Node (İşçi Düğümler)
Uygulamalarınızın gerçekte çalıştığı sunuculardır:
- Kubelet: Her node'da çalışan ajan. Pod'ların sağlıklı çalışmasını sağlar.
- Kube-proxy: Ağ kurallarını yönetir ve servisler arasındaki iletişimi sağlar.
- Container Runtime: Container'ları çalıştıran motor (containerd, CRI-O).
Temel Kubernetes Kavramları
Pod
Kubernetes'in en küçük dağıtım birimidir. Bir veya birden fazla container içerebilir. Aynı pod içindeki container'lar ağ ve depolama kaynaklarını paylaşır. Genellikle bir pod, bir uygulama container'ı barındırır.
Deployment
Pod'ların istenen durumunu tanımlar ve yönetir. Replika sayısı, güncelleme stratejisi ve geri alma (rollback) işlemlerini kontrol eder. Üretim ortamında pod'lar doğrudan değil, Deployment üzerinden oluşturulur.
Service
Pod'lara sabit bir ağ uç noktası sağlar. Pod'lar geçici olsa da Service, değişmeyen bir IP adresi ve DNS adı sunar. ClusterIP, NodePort, LoadBalancer ve ExternalName gibi türleri vardır.
Namespace
Cluster kaynaklarını mantıksal bölümlere ayırmak için kullanılır. Farklı ekipler, ortamlar (dev, staging, prod) veya projeler için ayrı namespace'ler oluşturabilirsiniz.
ConfigMap ve Secret
Uygulama yapılandırmasını container image'ından ayırmak için kullanılır. ConfigMap genel yapılandırma verilerini, Secret ise hassas bilgileri (şifreler, API anahtarları) şifreli olarak saklar.
Ingress
Cluster dışından gelen HTTP ve HTTPS trafiğini yönetir. URL tabanlı yönlendirme, SSL sonlandırma ve yük dengeleme gibi özellikleri sağlar.
Kubernetes ile Uygulama Dağıtımı
Kubernetes'te uygulama dağıtım süreci şu adımlardan oluşur:
- Container image oluşturma: Docker ile uygulamanızı image'a dönüştürün.
- Image'ı registry'ye yükleme: Docker Hub, AWS ECR veya Azure ACR gibi bir registry'ye gönderin.
- YAML manifesto yazma: Deployment, Service ve diğer kaynakları tanımlayan YAML dosyaları oluşturun.
- kubectl ile dağıtım: kubectl apply komutuyla manifestoları cluster'a uygulayın.
- İzleme ve yönetim: kubectl get, describe ve logs komutlarıyla durumu takip edin.
Ölçeklendirme
Manuel Ölçeklendirme
kubectl scale komutuyla pod replika sayısını artırabilir veya azaltabilirsiniz.
Horizontal Pod Autoscaler (HPA)
CPU ve bellek kullanımına göre pod sayısını otomatik olarak ayarlar. Trafik artışında pod'lar otomatik oluşturulur, azaldığında silinir.
Vertical Pod Autoscaler (VPA)
Pod'ların CPU ve bellek kaynak taleplerini otomatik olarak optimize eder.
Cluster Autoscaler
Node düzeyinde otomatik ölçeklendirme yapar. Kaynak yetersizliğinde yeni node ekler, boşta kalan node'ları kaldırır.
Güncelleme Stratejileri
Rolling Update
Varsayılan güncelleme stratejisidir. Pod'lar kademeli olarak güncellenir, böylece hizmet kesintisi yaşanmaz. Aynı anda güncellenen pod sayısı yapılandırılabilir.
Blue-Green Deployment
Yeni sürüm (green) tamamen hazır olduktan sonra trafik bir anda yeni sürüme yönlendirilir. Sorun durumunda hızlı geri alma imkanı sunar.
Canary Deployment
Yeni sürüm, trafiğin küçük bir yüzdesiyle (örneğin %5) test edilir. Sorun yoksa trafik kademeli olarak artırılır.
Yönetilen Kubernetes Hizmetleri
Kubernetes cluster'ını sıfırdan kurmak yerine bulut sağlayıcılarının yönetilen hizmetlerini kullanabilirsiniz:
- Amazon EKS: AWS'nin yönetilen Kubernetes hizmeti.
- Azure AKS: Microsoft Azure'un yönetilen Kubernetes hizmeti.
- Google GKE: Google Cloud'un yönetilen Kubernetes hizmeti. Kubernetes'in yaratıcısı olarak en olgun hizmet.
- DigitalOcean Kubernetes: Küçük ve orta ölçekli projeler için uygun fiyatlı bir seçenek.
Kubernetes Güvenliği
Kubernetes güvenliği için dikkat edilmesi gereken noktalar:
- RBAC: Rol tabanlı erişim kontrolüyle yetkilendirmeyi yönetin.
- Network Policy: Pod'lar arası ağ trafiğini kontrol edin.
- Pod Security Standards: Pod güvenlik politikalarını uygulayın.
- Secret yönetimi: Hassas bilgileri güvenli şekilde saklayın (Vault, Sealed Secrets).
- Image güvenliği: Sadece taranmış ve doğrulanmış image'ları kullanın.
Ekolsoft, Kubernetes tabanlı mikro hizmet mimarisi tasarımı, cluster yönetimi ve DevOps danışmanlığı konusunda işletmelere profesyonel çözümler sunmaktadır.
Sonuç
Kubernetes, container orkestrasyon alanında endüstri standardıdır. Mikro hizmet mimarileri, bulut yerel uygulamalar ve ölçeklenebilir sistemler için vazgeçilmez bir platformdur. Temel kavramları öğrenin, yönetilen hizmetlerle pratik yapın ve güvenlik en iyi uygulamalarını benimseyin. Kubernetes öğrenme eğrisi dik olsa da kazandığı yetenekler, modern yazılım geliştirme süreçlerinde büyük avantaj sağlar.