Bulut Günlüğü (AWS)

Kubernetes Cluster Kurulumu: Temellerden İleri Seviye Yönetime

 · 

Kubernetes Cluster Kurulumu: Temellerden İleri Seviye Yönetime

Kubernetes Cluster Kurulumu: Temellerden İleri Seviye Yönetime

Bu rehber, modern mikroservis mimarilerinin temel taşı olan Kubernetes cluster'larının kurulumunu, temel bileşenlerini ve üretim ortamına yönelik en iyi uygulamaları derinlemesine incelemektedir. Karmaşık dağıtımlar ve ölçeklenebilirlik ihtiyaçları için sağlam bir altyapı oluşturmayı hedefleyen sistem yöneticileri ve mimarlar için hazırlanmıştır.

Kubernetes Mimarisinin Temelleri

Kubernetes, konteynerleştirilmiş uygulamaların dağıtımını, ölçeklendirilmesini ve yönetimini otomatikleştiren açık kaynaklı bir sistemdir. Bir Kubernetes cluster'ı, temel olarak Control Plane (Kontrol Düzlemi) ve Worker Node (Çalışan Düğüm) bileşenlerinden oluşur.

Control Plane Bileşenleri

  • kube-apiserver: Cluster'ın ön yüzüdür. Tüm REST isteklerini işler ve doğrular. Diğer tüm bileşenler onunla iletişim kurar.
  • etcd: Cluster'ın durumunu tutan tutarlı ve yüksek oranda erişilebilir anahtar-değer deposudur. Cluster'daki tüm veriler burada saklanır.
  • kube-scheduler: Yeni oluşturulan Pod'ları hangi Node'a yerleştireceğine karar verir. Kaynak ihtiyaçları, politikalar ve kısıtlamaları dikkate alır.
  • kube-controller-manager: Çeşitli kontrol döngülerini çalıştırır. Örneğin, Node Controller, Replication Controller, Endpoints Controller gibi. Cluster'ın istenen durumda kalmasını sağlar.
  • cloud-controller-manager: (Opsiyonel) Cloud sağlayıcısına özgü kontrolleri yönetir. Load balancer, storage gibi cloud kaynaklarıyla entegrasyonu sağlar.

Worker Node Bileşenleri

  • kubelet: Her Node'da çalışan bir ajandır. API sunucusundan Pod ve Container bilgilerini alır ve Node'un bu Pod'ları çalıştırdığından emin olur.
  • kube-proxy: Her Node'da çalışan bir ağ temsilcisidir. Cluster içindeki ve dışındaki ağ kurallarını yönetir. Pod'lara erişimi sağlar.
  • Container Runtime: Konteynerleri çalıştırmaktan sorumlu yazılımdır. Docker, containerd, CRI-O gibi.

Üretim Ortamı Kubernetes Cluster Kurulumu (AWS EKS Örneği)

Üretim ortamlarında manuel kurulum yerine yönetilen servisler tercih edilir. AWS Elastic Kubernetes Service (EKS), Kubernetes cluster'larını AWS üzerinde kurmayı ve yönetmeyi kolaylaştıran bir hizmettir. Control Plane'in yönetimi AWS tarafından yapılırken, worker node'lar sizin tarafınızdan yönetilir (EC2 instance'ları veya Fargate kullanarak).

EKS Cluster Oluşturma Adımları

1. IAM Rolleri ve Politikaları: EKS Control Plane ve Worker Node'lar için gerekli IAM rollerini ve politikalarını oluşturun. EKS, API sunucusu ve etcd için yetkilendirme gerektirir.

2. VPC ve Alt Ağlar: Cluster'ınız için özel VPC, alt ağlar (public ve private) ve güvenlik grupları yapılandırın. Ağ trafiğinin doğru yönlendirildiğinden emin olun.

3. EKS Control Plane Oluşturma: AWS CLI, SDK veya konsol üzerinden bir EKS Control Plane oluşturun. Bu işlem, API sunucusu, etcd gibi bileşenleri sizin için yönetir.

4. Worker Node Grupları (Managed Node Groups): EC2 instance'ları kullanarak worker node grupları oluşturun. Bu gruplar, Auto Scaling Group (ASG) ile entegre çalışarak node sayısını otomatik olarak ayarlar. Node'ların imajı, instance tipi ve sayısı gibi parametreleri belirleyin.


# Örnek AWS CLI komutu ile EKS Control Plane oluşturma (basitleştirilmiş)
aws eks create-cluster --name my-eks-cluster --role-arn arn:aws:iam::111122223333:role/eks-cluster-role --resources-vpc-config subnetIds=subnet-xxxxxxxxxxxxxxxxx,subnet-yyyyyyyyyyyyyyyyy,endpointPublicAccess=true

# Örnek AWS CLI komutu ile Managed Node Group oluşturma (basitleştirilmiş)
aws eks create-nodegroup --cluster-name my-eks-cluster --nodegroup-name my-nodegroup --subnets subnet-xxxxxxxxxxxxxxxxx,subnet-yyyyyyyyyyyyyyyyy --instance-types t3.medium --min-size 1 --max-size 3 --scaling-config desiredSize=2 --node-role arn:aws:iam::111122223333:role/eks-worker-role

Açıklama: İlk komut, belirtilen IAM rolü ve VPC konfigürasyonu ile 'my-eks-cluster' adında bir EKS Control Plane oluşturur. İkinci komut ise, aynı cluster için 'my-nodegroup' adında, belirli alt ağlarda, t3.medium instance tiplerinde ve belirtilen ölçeklendirme ayarlarıyla worker node'ları içeren bir grup oluşturur. Gerçek senaryolarda network konfigürasyonu (NAT Gateway, NAT Instance, VPC Endpoints) ve güvenlik daha detaylı planlanmalıdır.

5. Kubeconfig Yapılandırması:

Yerel makinenizden cluster'a erişmek için aws eks update-kubeconfig komutunu kullanarak ~/.kube/config dosyanızı güncelleyin.


aws eks update-kubeconfig --region us-east-1 --name my-eks-cluster

Bu komut, AWS kimlik bilgilerinizle entegre olan bir kubectl konfigürasyonu oluşturur. Artık kubectl get nodes gibi komutları çalıştırarak cluster'ınızdaki node'ları görebilirsiniz.

Temel Kubernetes Kavramları ve Objeleri

Cluster kurulumu sonrası, uygulamalarınızı yönetmek için şu temel Kubernetes objelerini anlamak kritiktir:

  • Pod: Kubernetes'teki en küçük dağıtım birimidir. Bir veya daha fazla konteyner, depolama kaynakları ve ağ profili içerir. Pod'lar, IP adresini ve depolama alanını paylaşır.
  • Deployment: Stateful olmayan uygulamalar için deklaratif güncelleme ve geri alma mekanizması sağlar. ReplicaSet'leri yönetir.
  • Service: Bir Pod grubuna erişim sağlayan sabit bir IP adresi ve DNS adıdır. Ağ trafiğini Pod'lara yük dengelemesi yapar.
  • Namespace: Tek bir fiziksel veya sanal cluster içindeki kaynakları mantıksal olarak ayırmak için kullanılır. Projeler veya ekipler arasında izolasyon sağlar.
  • Ingress: Dışarıdan gelen HTTP ve HTTPS trafiğini cluster içindeki Servis'lere yönlendiren API objesidir. Load balancing, SSL sonlandırma ve ad tabanlı sanal barındırma sağlar.
  • StatefulSet: Stateful uygulamaları (veritabanları gibi) yönetmek için kullanılır. Sıralı dağıtım, ölçeklendirme ve kararlı ağ kimlikleri sağlar.
  • PersistentVolume (PV) ve PersistentVolumeClaim (PVC): Verilerin yaşam döngüsünü Pod'lardan bağımsız yönetmek için kullanılır. PV, depolama kaynağını temsil eder; PVC ise bu kaynağı talep eder.

Üretim Senaryoları ve En İyi Uygulamalar

Otomasyon ve CI/CD: Jenkins, GitLab CI, GitHub Actions gibi araçlarla entegre ederek otomatik build, test ve dağıtım pipeline'ları oluşturun. GitOps prensiplerini benimseyerek cluster yapılandırmasını ve uygulama dağıtımlarını Git üzerinden yönetin.

İzleme (Monitoring) ve Günlükleme (Logging): Prometheus ve Grafana ile metrikleri toplayıp görselleştirin. Elasticsearch, Fluentd ve Kibana (EFK) veya Loki, Promtail ve Grafana (PLG) stack'leri ile log toplama ve analiz yapın. Bu, sorunları hızlı tespit etmek ve performans optimizasyonu için hayati önem taşır.

Güvenlik: Network Policies ile Pod'lar arası ağ erişimini kısıtlayın. RBAC (Role-Based Access Control) kullanarak kullanıcı ve servis hesaplarının yetkilerini en aza indirin. Secret'ları güvenli bir şekilde yönetmek için AWS Secrets Manager veya HashiCorp Vault gibi çözümleri kullanın. Container imajlarını düzenli olarak güvenlik taramalarından geçirin.

Kaynak Yönetimi ve Ölçeklendirme: Horizontal Pod Autoscaler (HPA) ile Pod'ları CPU veya bellek kullanımına göre otomatik ölçeklendirin. Cluster Autoscaler ile worker node sayısını otomatik olarak ayarlayın. Vertical Pod Autoscaler (VPA) ile Pod'ların kaynak isteklerini ve limitlerini otomatik ayarlayabilirsiniz.

Yüksek Erişilebilirlik (High Availability): Birden fazla Availability Zone (AZ) kullanarak Control Plane ve worker node'ları dağıtın. etcd'nin yedekliliğini ve performansını optimize edin. Uygulamalarınızın birden fazla replica ile çalışmasını sağlayın.

Maliyet Optimizasyonu: Kullanılmayan kaynakları tespit edin ve temizleyin. Spot instance'ları veya Fargate gibi maliyet etkin seçenekleri değerlendirin. Node boyutlandırmasını optimize edin ve kararlı iş yükleri için Reserved Instances kullanmayı düşünün.

Kubernetes cluster kurulumu ve yönetimi, sürekli öğrenme ve adaptasyon gerektiren dinamik bir alandır. Bu rehber, üretim ortamlarında başarılı bir şekilde Kubernetes kullanmanız için gerekli temel bilgileri ve pratik yaklaşımları sunmaktadır.

← Blog Listesine Dön