Kubernetes

Kubernetes Nedir? Konteyner Orkestrasyon Platformu Kullanımı

Noves TeamNoves Team
11 dk okuma
Kubernetes Nedir? Konteyner Orkestrasyon Platformu Kullanımı

Kubernetes, Google tarafından geliştirilen ve şimdi Cloud Native Computing Foundation (CNCF) tarafından yönetilen açık kaynaklı bir konteyner orkestrasyon platformudur. Modern yazılım geliştirme dünyasında, mikroservis mimarileri ve bulut tabanlı uygulamaların yükselişiyle birlikte Kubernetes, uygulamaların dağıtımı, ölçeklendirilmesi ve yönetimi için standart bir araç haline geldi. Özellikle cross-platform projelerde ve SaaS ürünlerinde, farklı ortamlarda tutarlı çalışan uygulamalar sunmak kritik öneme sahiptir. Kubernetes, bu tutarlılığı sağlayarak geliştirici ekiplerinin altyapı yönetimi yerine iş mantığına odaklanmasına olanak tanır. Noves Digital olarak, projelerimizde bu güçlü platformu kullanarak müşterilerimize ölçeklenebilir ve güvenilir çözümler sunuyoruz. Konteyner teknolojisinin sunduğu taşınabilirlik ile Kubernetes'in orkestrasyon yetenekleri birleştiğinde, e-ticaret sitelerinden mobil uygulama backend'lerine kadar geniş bir yelpazede uygulama yönetimi mümkün hale gelir.


Kubernetes'in Temel Özellikleri

Kubernetes'in popülerliği, sunduğu temel özelliklerin yazılım yaşam döngüsünü ne kadar kolaylaştırdığından kaynaklanır. Bu özellikler, geliştirme ekiplerinin daha hızlı ve daha güvenilir şekilde ürün çıkarmasını sağlar.

Otomatik Ölçeklendirme

Trafikte ani artışlar yaşayan e-ticaret siteleri veya SaaS platformları için otomatik ölçeklendirme hayati öneme sahiptir. Kubernetes, Horizontal Pod Autoscaler (HPA) sayesinde CPU kullanımı veya özel metriklere göre pod sayısını otomatik olarak artırır veya azaltır. Bu sayede yüksek trafik anlarında uygulama yanıt süreleri korunurken, düşük trafik dönemlerinde gereksiz kaynak tüketimi önlenir. Özellikle agile çalışan ekipler, bu esnekliği sayesinde kullanıcı taleplerine hızla yanıt verebilir. Örneğin, bir API endpoint'ine gelen istekler arttığında Kubernetes otomatik olarak yeni pod'lar başlatır:

apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: api-hpa
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: api-deployment
  minReplicas: 2
  maxReplicas: 10
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 70

Self-Healing Mekanizması

Kubernetes'in en güçlü özelliklerinden biri self-healing yeteneğidir. Bir pod çöktüğünde, Kubernetes otomatik olarak yeni bir pod başlatır ve sistemin çalışmaya devam etmesini sağlar. Bu mekanizma, özellikle kullanıcı deneyimi açısından kritik olan üretim ortamlarında kesintisiz hizmet sunmayı mümkün kılar. Liveness ve readiness probe'ları sayesinde Kubernetes, bir pod'un gerçekten sağlıklı olup olmadığını sürekli kontrol eder. Eğer bir pod yanıt vermiyorsa, trafik o pod'a yönlendirilmez ve gerekirse yeniden başlatılır. Bu özellik, performans optimizasyonu ve sistem güvenilirliği açısından profesyonel ekiplerde vazgeçilmez bir araçtır. Böylece geliştiriciler, gece yarısı yaşanan sorunlarla uğraşmak yerine yeni özellikler geliştirmeye odaklanabilir.

Servis Keşfi ve Load Balancing

Modern uygulamalarda servisler birbiriyle sürekli iletişim halindedir. Kubernetes'in yerleşik servis keşfi (service discovery) özelliği, pod'ların IP adreslerini dinamik olarak yönetir ve servisler arası iletişimi kolaylaştırır. Aynı zamanda yerleşik load balancing ile gelen trafiği sağlıklı pod'lar arasında dengeler. Bu, özellikle mikroservis mimarilerinde kritik öneme sahiptir çünkü her servis bağımsız olarak ölçeklenebilir ve yönetilebilir. Bir servis tanımı şu şekilde oluşturulabilir:

apiVersion: v1
kind: Service
metadata:
  name: backend-service
spec:
  selector:
    app: backend
  ports:
    - protocol: TCP
      port: 80
      targetPort: 8080
  type: LoadBalancer

Kubernetes Kurulum ve Yerleşim Seçenekleri

Kubernetes'i farklı ortamlarda çalıştırmak için birçok seçenek bulunur. Geliştirme ortamından üretim ortamına geçiş, projenin ihtiyaçlarına göre farklı yaklaşımlar gerektirir.

Minikube ile Yerel Kurulum

Geliştiriciler için en kolay başlangıç noktası Minikube'dur. Tek bir node üzerinde çalışan bu araç, yerel makinenizde tam özellikli bir Kubernetes cluster'ı çalıştırmanıza olanak tanır. Özellikle yeni başlayanlar için ideal olan Minikube, kubectl komutlarını öğrenmek ve temel kavramları anlamak için mükemmel bir ortam sunar. Kurulumu basittir ve çoğu işletim sisteminde çalışır. Minikube üzerinde bir deployment oluşturmak için:

minikube start
kubectl create deployment nginx --image=nginx
kubectl expose deployment nginx --type=NodePort --port=80
minikube service nginx

Docker Desktop Üzerinde Kubernetes

Docker Desktop, yerleşik Kubernetes desteği sunarak geliştiricilerin tek bir araçla hem konteyner yönetimi hem de orkestrasyon yapmasını sağlar. Ayarlardan Kubernetes'i etkinleştirmek yeterlidir ve yerel geliştirme ortamınız hazır hale gelir. Bu seçenek, özellikle Docker ile zaten çalışan ekipler için geçişi kolaylaştırır. Docker Desktop üzerindeki Kubernetes, geliştirme ve test edilebilirlik açısından hızlı iterasyonlar yapmayı mümkün kılar. Ancak üretim ortamı için daha güçlü bir çözüm gerektiğini unutmamak gerekir.

Bulut Tabanlı Kubernetes Hizmetleri

Üretim ortamlarında genellikle bulut sağlayıcılarının yönetilen Kubernetes hizmetleri tercih edilir. Bu hizmetler, altyapı yönetimini otomatikleştirerek ekiplerin uygulama geliştirmeye odaklanmasını sağlar. SaaS projeleri ve büyük ölçekli uygulamalar için bu yaklaşım, operasyonel yükü önemli ölçüde azaltır.

AWS EKS, Azure AKS ve GCP GKE Kullanımı

Üç büyük bulut sağlayıcısı, kendi yönetilen Kubernetes hizmetlerini sunar: AWS Elastic Kubernetes Service (EKS), Azure Kubernetes Service (AKS) ve Google Kubernetes Engine (GKE). Her biri kendi ekosistemine entegre özellikler sunar. GKE, Kubernetes'in doğal ortamı olan Google Cloud'da en zengin özellik setine sahiptir. AKS, Azure ekosisteminde çalışan ekipler için Active Directory entegrasyonu gibi avantajlar sunar. EKS ise AWS'in geniş hizmet yelpazesiyle güçlü bir kombinasyon oluşturur. Seçim, mevcut bulut altyapınıza ve ekibinizin uzmanlığına bağlıdır. Bu platformlar, cross-platform uygulamalarınızı küresel ölçekte dağıtmanıza olanak tanır.


Kubernetes Mimarisi ve Bileşenleri

Kubernetes'in gücü, iyi tasarlanmış mimarisinden gelir. Cluster yapısı, master ve worker node'lar olmak üzere iki ana bileşenden oluşur ve bu bileşenler birlikte çalışarak uygulamaların sorunsuz çalışmasını sağlar.

Master Node Görevleri

Master node, cluster'ın beyni olarak çalışır. API Server, Scheduler, Controller Manager ve etcd olmak üzere dört temel bileşeni içerir. API Server, tüm iletişimin merkezi noktasıdır ve kubectl komutları buraya ulaşır. Scheduler, yeni pod'ların hangi worker node üzerinde çalışacağına karar verir. Controller Manager, cluster'ın istenen durumunu korumaktan sorumludur. etcd ise cluster'ın tüm durum bilgisini saklayan dağıtık anahtar-değer deposudur. Bu bileşenlerin sağlıklı çalışması, cluster'ın genel istikrarı için kritiktir. Profesyonel ekiplerde, master node'ların yüksek erişilebilirlik (HA) konfigürasyonu ile çalıştırılması standart bir uygulamadır.

Worker Node Yapısı

Worker node'lar, uygulama pod'larının çalıştığı makinelerdir. Her worker node üzerinde kubelet, kube-proxy ve container runtime çalışır. Kubelet, master node'dan gelen talimatları alır ve pod'ların çalışmasını sağlar. Kube-proxy, ağ kurallarını yönetir ve servisler arası iletişimi mümkün kılar. Container runtime (genellikle containerd veya CRI-O) ise konteynerlerin çalıştırılmasından sorumludur. Bu yapı, uygulamaların izole ve güvenli bir şekilde çalışmasını garanti eder. Worker node'ların sayısı, uygulamanızın kaynak ihtiyacına göre dinamik olarak artırılabilir.

Pod ve Deployment Kavramları

Pod, Kubernetes'in en küçük dağıtım birimidir ve bir veya daha fazla konteyneri içerir. Aynı pod içindeki konteynerler aynı ağ alanını ve depolama alanını paylaşır. Deployment ise pod'ların deklaratif yönetimini sağlayan bir Kubernetes kaynağıdır. Rolling update'ler, geri alma işlemleri ve replica yönetimi gibi özellikler deployment'lar sayesinde mümkün olur. Bir deployment tanımı şu şekildedir:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: web-app
spec:
  replicas: 3
  selector:
    matchLabels:
      app: web
  template:
    metadata:
      labels:
        app: web
    spec:
      containers:
      - name: web
        image: nginx:latest
        ports:
        - containerPort: 80

E-ticaret Projelerinde Pod Yönetimi

E-ticaret sitelerinde, farklı işlevler için farklı pod tipleri kullanılır. Örneğin, ödeme işlemleri için yüksek güvenlikli pod'lar, ürün kataloğu için önbellekli pod'lar ve kullanıcı oturumları için stateful pod'lar ayrı ayrı yönetilebilir. Bu ayrım, performans optimizasyonu ve güvenlik açısından büyük avantaj sağlar. Ayrıca, yoğun alışveriş dönemlerinde (Black Friday gibi) belirli servislerin pod sayısı bağımsız olarak artırılabilir. Bu esneklik, kullanıcı deneyimi açısından kesintisiz alışveriş deneyimi sunmayı mümkün kılar.


Kubernetes Performans ve Ölçeklenebilirlik

Kubernetes'in en büyük avantajlarından biri, uygulamaların performansını ve ölçeklenebilirliğini yönetmek için sunduğu güçlü araçlardır. Bu araçlar, kaynak kullanımını optimize ederken maliyetleri de kontrol altında tutar.

Horizontal Pod Autoscaler

HPA, pod sayısını otomatik olarak ayarlayarak uygulamanızın talebe göre ölçeklenmesini sağlar. CPU, bellek veya özel metrikler (örneğin saniye başına istek sayısı) kullanılarak ölçeklendirme kararları alınır. Bu özellik, özellikle değişken trafik desenlerine sahip uygulamalar için idealdir. SaaS platformlarında, kullanıcı sayısı arttıkça otomatik olarak yeni pod'lar başlatılır ve kullanıcı azaldığında kaynaklar serbest bırakılır. Bu dinamik yapı, hem performans optimizasyonu hem de maliyet verimliliği sağlar.

Cluster Autoscaler Kullanımı

Pod seviyesindeki ölçeklendirmenin ötesinde, Cluster Autoscaler node seviyesinde ölçeklendirme yapar. Eğer mevcut node'lar yetersiz kalırsa, Cluster Autoscaler yeni node'lar ekler. Tersine, boşta kalan node'lar kaldırılarak maliyetler düşürülür. Bu özellik, bulut ortamlarında özellikle değerlidir çünkü yalnızca kullandığınız kaynaklar için ödeme yaparsınız. Agile çalışan ekipler, bu esnekliği sayesinde altyapı maliyetlerini öngörülebilir hale getirebilir.

Büyük Ölçekli SaaS Projelerinde Kubernetes

Büyük SaaS projelerinde, binlerce pod ve yüzlerce node yönetmek gerekebilir. Kubernetes, bu ölçekte bile tutarlı bir yönetim deneyimi sunar. Namespace'ler sayesinde farklı müşteriler veya ortamlar birbirinden izole edilebilir. Resource quota'lar ile kaynak kullanımı sınırlandırılabilir. Network policy'ler ile güvenlik katmanları oluşturulabilir. Bu özellikler, multi-tenant SaaS mimarilerinde kritik öneme sahiptir ve yazılım ajanslarında karmaşık projelerin yönetimini kolaylaştırır.


Kubernetes Uyumluluk ve Entegrasyonlar

Kubernetes, modern yazılım geliştirme araç zincirinin merkezinde yer alır. CI/CD pipeline'ları, paket yöneticileri ve diğer araçlarla sorunsuz entegrasyon sağlar.

CI/CD Araçları ile Entegrasyon

Kubernetes, CI/CD pipeline'larıyla mükemmel uyum içinde çalışır. Jenkins, GitLab CI, GitHub Actions veya ArgoCD gibi araçlar, Kubernetes cluster'ına otomatik deployment yapabilir. GitOps yaklaşımı ile, git reposundaki değişiklikler otomatik olarak cluster'a yansıtılır. Bu entegrasyon, agile geliştirme süreçlerinde sürekli teslimat ve sürekli dağıtım hedeflerine ulaşmayı kolaylaştırır. Özellikle test edilebilirlik açısından, her değişiklik otomatik olarak test ortamına dağıtılıp test edilebilir. Bir GitLab CI pipeline örneği:

deploy:
  stage: deploy
  image: bitnami/kubectl:latest
  script:
    - kubectl apply -f k8s/
  only:
    - main

Docker ve Helm Chart Kullanımı

Docker, Kubernetes'in en yaygın kullanılan konteyner formatıdır. Uygulamalar Docker imajları olarak paketlenir ve Kubernetes pod'larında çalıştırılır. Helm ise Kubernetes için bir paket yöneticisidir. Helm chart'ları, karmaşık uygulamaların tekrar kullanılabilir şekilde paketlenmesini sağlar. Bir Helm chart, uygulamanın tüm Kubernetes kaynaklarını (deployment, service, configmap, secret vb.) tek bir pakette birleştirir. Bu, özellikle çok ortamlı projelerde konfigürasyon yönetimini büyük ölçüde kolaylaştırır. Profesyonel ekiplerde, Helm chart'ları git reposunda versiyonlanır ve CI/CD pipeline'ları aracılığıyla dağıtılır.

Web Geliştirme ve Responsive Tasarım Senaryoları

Kubernetes, frontend uygulamalarının dağıtımı için de ideal bir platformdur. Web geliştirme projelerinde, statik dosyalar Nginx veya Apache konteynerleri içinde sunulabilir. Responsive tasarım gerektiren uygulamalar, CDN ile birlikte kullanılarak küresel ölçekte hızlı teslimat sağlanabilir. Kubernetes ingress controller'ları, farklı path'ler için farklı servislere yönlendirme yaparak monolitik frontend'leri bile yönetilebilir hale getirir. Örneğin, /api path'i backend servisine, / path'i ise frontend servisine yönlendirilebilir. Bu esneklik, modern web uygulamalarının mimarisini basitleştirir.


Kubernetes Uygulama Senaryoları

Kubernetes, farklı sektörlerde ve farklı büyüklükteki projelerde başarıyla kullanılmaktadır. İşte en yaygın kullanım senaryolarından bazıları.

Mikroservis Mimarilerinde Kullanım

Mikroservis mimarisi, uygulamayı bağımsız olarak dağıtılabilir ve ölçeklenebilir servislere böler. Kubernetes, bu mimari için doğal bir uyum sağlar çünkü her servis bağımsız pod'lar olarak çalıştırılabilir. Servis keşfi, load balancing ve bağımsız ölçeklendirme gibi özellikler, mikroservislerin yönetimini kolaylaştırır. API gateway'ler, Kubernetes üzerinde bir servis olarak çalıştırılarak tüm mikroservislerin tek bir noktadan erişilmesini sağlar. Bu yapı, agile ekiplerin servisleri bağımsız olarak geliştirmesine ve dağıtmasına olanak tanır.

Mobil Uygulama Backend Yönetimi

Mobil uygulama geliştirmede, backend servislerinin yüksek erişilebilirlik ve düşük gecikme sunması kritiktir. Kubernetes, backend servislerini küresel ölçekte dağıtarak kullanıcılara en yakın konumdan hizmet sunmayı mümkün kılar. Ayrıca, push notification servisleri, kullanıcı kimlik doğrulama ve veri senkronizasyon gibi servisler bağımsız olarak ölçeklenebilir. Cross-platform mobil uygulamalar için tek bir backend altyapısı, hem iOS hem Android uygulamalarına hizmet verebilir. Bu, geliştirme maliyetlerini düşürür ve bakımı kolaylaştırır.

E-ticaret Sitelerinde Sürekli Teslimat

E-ticaret sitelerinde, yeni özelliklerin hızla ve güvenle yayınlanması rekabet avantajı sağlar. Kubernetes, rolling update'ler sayesinde sıfır kesintiyle deployment yapmayı mümkün kılar. Blue-green deployment veya canary deployment stratejileri ile yeni sürümler küçük bir kullanıcı grubuna önce test edilebilir. Sorun çıkarsa anında önceki sürüme geri dönülebilir. Bu yetenekler, CI/CD pipeline'ları ile birleştiğinde sürekli teslimat kültürünün temelini oluşturur. Özellikle yoğun alışveriş dönemlerinde, bu esneklik iş sürekliliği açısından hayati öneme sahiptir.


Kubernetes Araçları ve Eklentileri

Kubernetes ekosistemi, platformun yeteneklerini genişleten zengin bir araç ve eklenti koleksiyonuna sahiptir. Bu araçlar, geliştirme ve operasyon süreçlerini daha verimli hale getirir.

Kubectl Komutları

kubectl, Kubernetes cluster'ı ile etkileşim kurmanın temel komut satırı aracıdır. Pod'ları listelemek, logları görüntülemek, deployment'ları yönetmek ve daha birçok işlem kubectl ile yapılır. En yaygın kullanılan komutlardan bazıları şunlardır:

kubectl get pods                    # Pod'ları listele
kubectl logs <pod-name>            # Pod loglarını görüntüle
kubectl describe pod <pod-name>    # Pod detaylarını görüntüle
kubectl apply -f manifest.yaml     # Manifest dosyasını uygula
kubectl port-forward pod/name 8080:80  # Yerel port yönlendirme

Bu komutlar, günlük operasyonel görevlerde vazgeçilmezdir. Profesyonel ekiplerde, kubectl komutları shell alias'ları veya script'ler ile daha da verimli hale getirilebilir.

Helm Paket Yöneticisi

Helm, Kubernetes için "apt" veya "yum" gibi düşünülebilir. Chart adı verilen paketler sayesinde uygulamaları kolayca kurabilir, güncelleyebilir ve kaldırabilirsiniz. Helm, özellikle üçüncü taraf uygulamaların (Prometheus, Grafana, Elasticsearch vb.) kurulumunu basitleştirir. Ayrıca kendi uygulamalarınızı chart olarak paketleyerek farklı ortamlarda tutarlı dağıtım yapabilirsiniz. Helm chart'ları, değer dosyaları (values.yaml) ile konfigüre edilir ve bu sayede aynı chart farklı ortamlarda farklı parametrelerle kullanılabilir. Bu, test edilebilirlik ve tutarlılık açısından büyük bir avantajdır.

Popüler Eklentiler ve Avantajları

Kubernetes ekosisteminde birçok popüler eklenti bulunur. Prometheus ve Grafana ile monitoring ve alerting kurulabilir. Istio veya Linkerd ile service mesh yapıları oluşturularak servisler arası iletişim daha güvenli ve gözlemlenebilir hale getirilebilir. ArgoCD ile GitOps tabanlı sürekli dağıtım yapılabilir. Cert-manager ile TLS sertifikaları otomatik olarak yönetilebilir. Bu eklentiler, Kubernetes'in temel yeteneklerini genişleterek kurumsal düzeyde bir platform haline getirir. Sektörde, bu araçlarla donatılmış bir Kubernetes altyapısı standart bir beklenti haline gelmiştir.


Kubernetes ile Sonuç ve Gelecek Perspektifi

Kubernetes, konteyner orkestrasyon dünyasında standart bir platform haline gelmiştir. Sunduğu esneklik, ölçeklenebilirlik ve zengin ekosistem, modern yazılım geliştirme süreçlerinin vazgeçilmez bir parçası olmasını sağlamıştır.

DevOps Kültüründe Kubernetes'in Rolü

Kubernetes, DevOps kültürünün teknik altyapısını oluşturan temel taşlardan biridir. Geliştirme ve operasyon ekipleri arasındaki duvarı yıkarak, ortak bir dil ve ortak bir platform sunar. Altyapı kod olarak tanımlanır (Infrastructure as Code), deployment'lar otomatikleştirilir ve sistemler gözlemlenebilir hale gelir. Bu dönüşüm, agile prensiplerin teknik katmanını oluşturur ve ekiplerin daha hızlı ve daha güvenilir ürün çıkarmasını sağlar. Noves Digital olarak, projelerimizde bu yaklaşımı benimseyerek müşterilerimize modern ve ölçeklenebilir çözümler sunuyoruz.

Gelecek Trendler ve Alternatif Orkestrasyon Araçları

Kubernetes'in geleceği, bulut-native teknolojilerin evrimiyle şekillenecektir. Serverless Kubernetes (örneğin AWS Fargate for EKS, Azure Container Apps), geliştiricilerin altyapı yönetimini tamamen soyutlamasına olanak tanır. Yapay zeka ve makine öğrenimi workload'larının Kubernetes üzerinde çalıştırılması giderek yaygınlaşmaktadır. Kubeflow gibi araçlar, ML pipeline'larını Kubernetes'te yönetmeyi kolaylaştırır. Alternatif olarak Docker Swarm ve Nomad gibi araçlar da bulunsa da, Kubernetes ekosistemi ve topluluk desteği açısından liderliğini korumaktadır. Gelecekte, Kubernetes'in daha da soyutlanmış ve yönetimi kolaylaştırılmış halleriyle karşılaşmamız muhtemeldir. Sektörde, Kubernetes bilgisi artık bir opsiyon değil, bir zorunluluk haline gelmiştir.

Noves Team

Noves Team

Noves Digital: 2020'den beri İzmir merkezli, 3 kişilik tutkulu yazılım ekibi. Web & mobil uygulama, özel yazılım çözümleri. React, Node.js, Python uzmanlığı. Agile çalışma, şeffaf iletişim, %100 zamanında teslimat. Sizin teknoloji partneriniz.