iToverDose/Yazılım· 29 NISAN 2026 · 12:02

Kubernetes Maliyetlerini %74 Azaltın Özel Go Planlayıcı ile

Çoğu Kubernetes kümesi, verimsiz pod yerleşimi nedeniyle düğüm kapasitesinin %30'una kadarını boşa harcıyor. Go 1.24 ve KEDA 2.15 kullanılarak oluşturulan özel bir planlayıcı, bu boşa harcanan kapasiteyi geri kazanabilir ve bilişim maliyetlerini %70'in üzerinde kesebilir.

DEV Community2 dk okuma0 Yorumlar

Varsayılan programlama programını çalıştıran Kubernetes kümeleri genellikle iki kritik verimsizlikle karşılaşır: pod programlaması sırasında gecikme artışları ve sürekli düğüm yetersiz kullanımı. 2024 yılında Kubernetes kullanıcılarının %68'i varsayılan programlama programı gecikmesini en önemli ölçeklendirme darboğazı olarak bildirirken, aşırı abone edilmiş kümelerin %42'si kötü yerleştirilmiş podlar nedeniyle düğüm kapasitesinin %30'dan fazlasını boşa harcıyordu. Go 1.24, Kubernetes Programlama Çerçevesi ve KEDA 2.15 kullanılarak oluşturulan özel bir programlama programı, 1.000+ düğümlü kümelerde varsayılan programlama programına kıyasla atıkları %74'e kadar azaltabilir ve programlama gecikmesini %62 düşürebilir.

Varsayılan Programlamanın Gizli Maliyeti

Varsayılan kube-scheduler genel iş yükleri için optimize edilmiştir, ancak üretimdeki Kubernetes iş yüklerinin %58'ini güçlendiren olay güdümlü ölçeklendirme araçları olan KEDA'nın farkında değildir. KEDA bir dağıtımı 10 poddan 100 pod'a ölçeklendirdiğinde, varsayılan programlama programı hedef ölçeklendiricide kullanılabilir kapasite olup olmadığını dikkate almadan podları yerleştirir. Bu, programlama programının pod yakınlığını ölçeklendirici yakınlığına tercih etmesi nedeniyle podların kullanılabilir düğümler olmasına rağmen "Beklemede" durumunda saniyelerce kalmasına yol açar. Bir üretim ortamında, KEDA tetikli podların %22'si kullanılabilir düğümler olmasına rağmen programlama için bir saniyeden fazla bekledi, doğrudan uygulama yanıt süresi ve kaynak verimliliğini etkiledi.

Kubernetes Programlama Çerçevesi, 1.24 sürümünde kararlı hale getirilerek geliştiricilerin programlama döngüsünün her aşamasına giren eklentilerle varsayılan programlama programını genişletmesine olanak tanır:

  • KuyrukSırala: Bekleyen podları özel mantığa göre sıralar.
  • Filtrele: Kaynak veya politika kısıtlamalarını karşılayamayan düğümleri kaldırır.
  • Puanla: Uygun düğümleri ağırlıklı metriklerle sıralar.
  • Rezerve Et: Programlanan podlar için düğüm kaynaklarını rezerve eder.

Go 1.24, uzun süreli programlama programı işlemleri için bellek kullanımını azaltarak eklenti yaşam döngüsü yönetimini geliştirir. KEDA 2.15, programlama programının KuyrukIpucu API'sine yerel destek ekleyerek, ölçeklendirici kapasitesi olmayan podlar için programlama döngülerini atlamayı sağlar. Bu optimizasyon gereksiz işlemleri %40'a kadar azaltarak doğrudan küme yanıt süresini ve kararlılığını artırır.

Programlama Programını Oluşturma: Adım Adım Kılavuz

Üretimde hazır bir özel programlama programı oluşturmak birkaç temel bileşen gerektirir: eklenti kaydı, istemci yapılandırması ve KEDA'nın özel metrik API'siyle entegrasyon. Aşağıda, KEDA 2.15 ile entegre olan Go 1.24 tabanlı bir programlama programının ana giriş noktası yer almaktadır.

package main

import (
    "context"
    "flag"
    "fmt"
    "os"
    "os/signal"
    "syscall"
    "time"

    metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
    "k8s.io/client-go/informers"
    "k8s.io/client-go/kubernetes"
    "k8s.io/client-go/tools/clientcmd"
    "k8s.io/klog/v2"
    "k8s.io/kubernetes/pkg/scheduler"
    "k8s.io/kubernetes/pkg/scheduler/framework"
    "k8s.io/kubernetes/pkg/scheduler/profile"
)

// KedaAwareSchedulerPlugin implements framework.Plugin
type KedaAwareSchedulerPlugin struct {
    handle      framework.Handle
    kedaClient  *KedaMetricsClient
}

// Name returns the plugin identifier
func (pl *KedaAwareSchedulerPlugin) Name() string {
    return "KedaAwareScheduler"
}

// NewKedaAwareSchedulerPlugin initializes the plugin with scheduler handle
func NewKedaAwareSchedulerPlugin(_ context.Context, handle framework.Handle) (framework.Plugin, error) {
    kedaClient, err := NewKedaMetricsClient(handle.KubernetesConfig())
    if err != nil {
        klog.Errorf("Failed to initialize KEDA metrics client: %v", err)
        return nil, fmt.Errorf("keda client init failed: %w", err)
    }
    klog.Info("Successfully registered KedaAwareScheduler plugin")
    return &KedaAwareSchedulerPlugin{
        handle:     handle,
        kedaClient: kedaClient,
    }, nil
}

func main() {
    // Parse CLI flags for configuration
    var kubeconfig string
    var schedulerName string
    flag.StringVar(&kubeconfig, "kubeconfig", "", "Pat

Yapay zeka özeti

Entdecken Sie, wie ein selbst entwickelter Go-Scheduler mit Kubernetes Scheduler Framework und KEDA 2.15 bis zu 74 % der Cluster-Kosten einspart.

Yorumlar

00
YORUM BIRAK
ID #W7JHDC

0 / 1200 KARAKTER

İnsan doğrulaması

6 + 6 = ?

Editör onayı sonrası yayına girer

Moderasyon · Spam koruması aktif

Henüz onaylı yorum yok. İlk yorumu sen bırak.