Bölüm 3: Yüksek Yoğunluklu Kubernetes ve Karpenter ile Otomatik Ölçeklendirme
Karpenter ile tam zamanında (JIT) düğüm tahsisi, Graviton ARM64 geçişi, Spot konsolidasyonu ve paketleme verimliliği.
#1. Yönetici Özeti ve Problem Tanımı
Geleneksel Kubernetes Cluster Autoscaler (CAS), çalışan düğümleri katı Auto Scaling Group (ASG) yapılarına göre ölçeklendirir. Pod'lar zamanlanamadığında CAS, aşırı kaynak parçalanmasına yol açan önceden tanımlanmış düğüm boyutları tahsis eder: tek bir 500m CPU'luk pod, bir m5.4xlarge sunucusunun ayağa kalkmasını tetikleyebilir ve oranında atıl işlemci kapasitesine neden olabilir.
Karpenter, tam zamanında (Just-in-Time - JIT) düğüm tahsisini sunar. Önceden tanımlanmış ASG şablonlarını eşleştirmek yerine Karpenter, bekleyen pod gereksinimlerine göre uyarlanmış Graviton (ARM64) örnekleri, Spot örnekleri ve değişken sunucu türlerinin en uygun karışımını başlatmak için doğrudan bulut API'leriyle (AWS Fleet API) iletişim kurar.
#2. Karpenter NodePool Spesifikasyonu
ARM64 Graviton örneklerine, Spot havuzlarına ve otomatik düğüm konsolidasyonuna öncelik veren bir canlı ortam Karpenter NodePool yapılandırması:
apiVersion: karpenter.sh/v1
kind: NodePool
metadata:
name: general-compute-finops
spec:
template:
spec:
requirements:
- key: kubernetes.io/arch
operator: In
values: ["arm64"] # Graviton3 / Graviton4 (%20 daha iyi fiyat/performans)
- key: karpenter.sh/capacity-type
operator: In
values: ["spot", "on-demand"] # Spot tercih eder; yetersizse On-Demand'e döner
- key: node.kubernetes.io/instance-type
operator: In
values: ["c7g.xlarge", "c7g.2xlarge", "m7g.xlarge", "m7g.2xlarge", "r7g.xlarge"]
nodeClassRef:
group: karpenter.k8s.aws
kind: EC2NodeClass
name: default-al2023
disruption:
consolidationPolicy: WhenEmptyOrUnderutilized
consolidateAfter: 1m # Düşük kullanım tespit edildikten 60 saniye sonra pod'ları daha küçük düğümlere konsolide et
expireAfter: 720h # İşletim sistemi sapmalarını önlemek için 30 günlük düğüm rotasyonu
#3. Paketleme Verimliliği (Bin-Packing) ve Konsolidasyon Ekonomisi
Karpenter küme kullanımını sürekli izler. Trafik azaldığında:
- Pod'ların mevcut diğer düğümlere sığabileceği düşük kullanımlı düğümleri belirler.
- Daha küçük bir örnek tahsis eder (veya mevcut düğümlere boşaltır).
- Düşük kullanımlı düğümü izole eder ve kapatır; 60 saniye içinde EC2 işlemci maliyetini sonlandırır.
Sağlıklı bir Karpenter kümesi, geleneksel statik kümelerdeki seviyesine kıyasla ortalama 'nin üzerinde CPU ve bellek kullanımı sağlar.
#4. En İyi Uygulamalar ve Değişmezler
- Gerçekçi Kaynak İstekleri Belirleyin: Şişirilmiş CPU isteklerine sahip pod'lar verimli paketlemeyi engeller. Gerçek p95 kullanımına dayalı olarak istekleri doğru boyutlandırmak için Vertical Pod Autoscaler'ı (VPA) öneri modunda çalıştırın.
- Topoloji Yayılma Kısıtlamaları (Topology Spread Constraints): Karpenter'ın tüm Spot örneklerini kesintiye yatkın tek bir erişilebilirlik alanına (AZ) yerleştirmesini engellemek için
maxSkew: 1iletopologySpreadConstraintsuygulayın.
