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", "", "PatYapay 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.
Etiketler