DevOps & Platform Eng

Kubernetes 1.36: Pod Kaynak Yöneticileri Geliyor (Alpha)

Kubernetes v1.36, alfa aşamasındaki yeni bir özellikle kaynak yönetimini sallıyor: Pod Seviyesi Kaynak Yöneticileri. Bu değişim, Kubernetes'i kapsayıcı odaklı tahsislerden daha esnek, pod odaklı bir yaklaşıma doğru taşıyor.

{# Always render the hero — falls back to the theme OG image when article.image_url is empty (e.g. after the audit's repair_hero_images cleared a blocked Unsplash hot-link). Without this fallback, evergreens with cleared image_url render no hero at all → the JSON-LD ImageObject loses its visual counterpart and LCP attrs go missing. #}
Kubernetes v1.36: Pod'lar Artık Kaynakları Daha Akıllıca Yönetiyor — DevTools Feed

Key Takeaways

  • Kubernetes v1.36, pod merkezli kaynak tahsisini sağlayan Pod Seviyesi Kaynak Yöneticileri'ni alfa özelliği olarak sunuyor.
  • Bu özellik, belirli kapsayıcılara özel NUMA uyumlu kaynakları tahsis ederken diğerlerinin bir pod seviyesi havuzunu paylaştığı hibrit kaynak modellerine olanak tanıyor.
  • Yeni yöneticiler, ML eğitimi ve düşük gecikmeli veritabanları gibi zorlu iş yükleri için kaynak verimliliğini ve performans öngörülebilirliğini artırmayı hedefliyor.

Şöyle bir durum var Kubernetes’le ilgili: devasa bir yapı. Ve bu devi yönetmek, özellikle de ML eğitim çiftlikleri, ultra düşük gecikmeli ticaret sistemleri veya neredeyse nefes alan veritabanları gibi performans-kritik iş yüklerinden bahsettiğimizde — her zaman hassas bir dans olmuştur. Tahmin edilebilir performans istersiniz, bu da genellikle ana etkinlik için özel, NUMA uyumlu kaynakları ayırmayı gerektirir. Ama pod’lar artık yalnız tek kapsayıcılar değil. Onlar birer ekosistem. Loglama, izleme, servis ağları, veri girişi için yan destekçileri var — her şey dahil.

Tarihsel olarak, ana uygulamanız için o el değmemiş, özel kaynakları elde etmek demek, her şeye baştan girmeniz demekti. Pod’daki her bir kapsayıcı, özel, tam sayı bir CPU dilimi alırdı. İsraf mı? Kesinlikle. Özellikle zar zor CPU tüketen minicik bir metrik dışa aktarıcısı için. Eğer bu sıkı tahsisten kaçınırsanız, pod’un değerli Garantili Hizmet Kalitesi (QoS) sınıfını kaybederdiniz ve onunla birlikte tutarlı, üst düzey performans umudunuzu da. Zorlu uygulamaları çalıştıran herkes için gerçek bir Sophie’nin Seçimi.

Yeni Bir Umut: Pod Seviyesi Yöneticileri Ortaya Çıkıyor

Kubernetes v1.36 ise, Pod Seviyesi Kaynak Yöneticileri‘nin alfa tanıtımıyla iğneyi biraz daha ileri itiyor. Bu sadece bir ayar değil; bu, kubelet’in Topoloji, CPU ve Bellek Yöneticilerinin yeteneklerini genişleten temel bir mimari değişim. En büyük haber ne mi? Artık .spec.resources içinde pod seviyesi kaynak tanımlarını destekliyorlar. Katı kapsayıcı başına tahsis modelinden kesinlikle pod merkezli bir modele geçiyoruz.

Bu yeni özellik kapılarını (PodLevelResourceManagers ve PodLevelResources) etkinleştirmek, kubelet’in hibrit kaynak tahsis modellerini düzenlemesini sağlıyor. Bu demek oluyor ki, yıldız performans gösterenler için o NUMA uyumunu ve özel kaynak tahsisini, daha az talepkar yoldaşlarına CPU çekirdekleri israf etmeden alabilirsiniz. Esneklik verimlilikle buluşuyor, sonunda.

Gerçek Dünya Senaryoları: Lastiğin NUMA ile Buluştuğu Yer

Bu yeni yaklaşımın güzelliği, pratik kullanım durumlarında parlıyor ve büyük ölçüde Topoloji Yöneticisi’nin kapsamına bağlı. Ana kapsayıcı, yerel metrik dışa aktarıcısı ve bir yedekleme ajanı yan destekçisi ile birlikte gelen, gecikmeye duyarlı bir veritabanı pod’u düşünün.

Eğer Topoloji Yöneticisi’ni pod kapsamıyla yapılandırırsanız, kubelet tüm pod’un kaynak bütçesine dayalı tekil bir NUMA hizalaması gerçekleştirir. Kritik veritabanı kapsayıcısı, o belirli NUMA düğümünden özel CPU ve bellek dilimlerini kapar. Geriye ne kaldı? Bir pod paylaşımlı havuzu oluşturur. Metrik dışa aktarıcınız ve yedekleme ajanınız burada ikamet eder. Kaynakları kendi aralarında paylaşırlar, evet, ancak kritik olarak, veritabanının özel dilimlerinden ve düğümün geri kalanından izole edilmişlerdir. Bu çok önemli: özel çekirdekleri israf etmeden yardımcı kapsayıcıları aynı NUMA düğümüne yerleştirebilirsiniz.

pod Topoloji Yöneticisi kapsamıyla yapılandırıldığında, kubelet tüm pod’un bütçesine dayalı tek bir NUMA hizalaması gerçekleştirir. Veritabanı kapsayıcısı, o NUMA düğümünden özel CPU ve bellek dilimlerini alır. Pod’un bütçesinden kalan kaynaklar yeni bir pod paylaşımlı havuzu oluşturur.

Bu YAML’de şöyle görünebilir:

apiVersion: v1
kind: Pod
metadata:
  name: tightly-coupled-database
spec:
  # Pod seviyesi kaynaklar genel bütçeyi ve NUMA hizalama boyutunu belirler.
  resources:
    requests:
      cpu: "8"
      memory: "16Gi"
    limits:
      cpu: "8"
      memory: "16Gi"
  initContainers:
  - name: metrics-exporter
    image: metrics-exporter:v1
    restartPolicy: Always
  - name: backup-agent
    image: backup-agent:v1
    restartPolicy: Always
  containers:
  - name: database
    image: database:v1
    # Bu Garantili kapsayıcı, pod'un bütçesinden özel bir 6 CPU dilimi alır.
    # Kalan 2 CPU ve 4Gi bellek, yan destekçiler için pod paylaşımlı havuzunu oluşturur.
    resources:
      requests:
        cpu: "6"
        memory: "12Gi"
      limits:
        cpu: "6"
        memory: "12Gi"

Alternatif olarak, altyapı yan destekçileriyle bir ML iş yükü düşünün. Burada muhtemelen container Topoloji Yöneticisi kapsamına yönelirsiniz. Kubelet her kapsayıcıyı ayrı ayrı değerlendirir. Maksimum performans arayışındaki ML eğitim kapsayıcısı, özel, NUMA uyumlu CPU’larını ve belleğini alır. Servis ağı yan destekçisi mi? O özel muameleye ihtiyacı yok; düğüm genelindeki paylaşımlı havuzda mutlu mesut çalışır. Toplam kaynak tüketimi hala genel pod sınırlarıyla sınırlıdır, ancak o özel, NUMA uyumlu kaynakları yalnızca gerçekten ihtiyaç duyulan yerlere ihtiyatlı bir şekilde uyguluyorsunuz.

apiVersion: v1
kind: Pod
metadata:
  name: ml-workload
spec:
  # Pod seviyesi kaynaklar genel bütçe kısıtlamasını belirler.
  resources:
    requests:
      cpu: "4"
      memory: "8Gi"
    limits:
      cpu: "4"
      memory: "8Gi"
  initContainers:
  - name: service-mesh-sidecar
    image: service-mesh:v1
    restartPolicy: Always
  containers:
  - name: ml-training
    image: ml-training:v1
    # 'container' kapsamı altında, bu Garantili kapsayıcı özel,
    # NUMA uyumlu kaynakları alırken, yan destekçi düğümün paylaşımlı havuzunda çalışır.
    resources:
      requests:
        cpu: "3"
        memory: "6Gi"
      limits:
        cpu: "3"
        memory: "6Gi"

CPU Kotaları ve İzolasyon Sanatı

İzolasyon anahtardır ve bu karma iş yükleri için farklı şekilde ele alınır. Özel CPU dilimleri alan kapsayıcılar için, CPU CFS kota zorlaması kapsayıcı seviyesinde devre dışı bırakılır. Bu, genellikle çekirdeğin Tam Adil Zamanlayıcısı (CFS) tarafından uygulanan kısıtlamalar olmadan çalıştıkları anlamına gelir, bu da onların engellenmeden patlamalarını ve performans göstermelerini sağlar.

Özel CPU dilimleri almayan kapsayıcılar için, bir paylaşımlı havuzun parçası haline gelirler – ister pod seviyesi paylaşımlı havuz, ister düğüm genelindeki paylaşımlı havuz olsun. Bu kapsayıcılar CFS kota zorlamasına sahiptir. CFS zamanlama politikasına göre kaynakları paylaşırlar. Temel süreçleri aç bırakmalarını önlemek için tasarlanmış nüanslı bir sistemdir, aynı zamanda yüksek bahisli uygulamalar için özel hatlar sağlarken.

Temel Değişim: Kapsayıcılardan Podlara

Bu pod seviyesi kaynak yönetimine geçiş, bir optimizasyondan daha fazlasıdır; Kubernetes içinde felsefi bir değişimdir. Yıllardır, temel planlama ve kaynak tahsis birimi kapsayıcı olmuştur. Bu yeni özellik, modern uygulamaların genellikle bir pod içinde dağıtıldığını ve bu dağıtılmış bileşenleri birleşik bir birim olarak yönetmenin performans ve verimlilik için kritik olduğunu kabul ediyor. Pod’u bağımsız süreçlerin bir koleksiyonundan çok, tek bir, karmaşık da olsa, uygulama örneği olarak ele almakla ilgili.

Bu, yüksek performanslı uygulamaları nasıl tasarlayıp dağıttığımız konusunda büyüleyici olasılıklar açıyor. Bireysel kapsayıcı kaynak ihtiyaçlarını titizlikle hesaplamak ve QoS etkileriyle mücadele etmek yerine, artık bir pod’un genel kaynak ayak izini tanımlayabilir ve ardından bu bütçe dahilinde akıllıca yetki devri yapabiliriz. Operasyonları kolaylaştırır ve daha da önemlisi, performans cezaları olmadan daha sıkı kaynak kullanımı sağlar. Bu, FinOps ekipleri ve o ulaşılmaz performans metriklerinin peşinde koşan mühendisler için bir kazanç.

Geliştiriciler ve Operatörler İçin Anlamı

Geliştiriciler için bu, karmaşık pod’lar için kaynak gereksinimlerini belirtmenin daha sezgisel bir yolunu sunar. Performans-kritik bileşenlerinizi ve destekleyici kadrolarını net bir şekilde ayırabilirsiniz. Operatörler için, bu daha verimli düğüm kullanımı ve potansiyel olarak daha iyi maliyet tasarrufu anlamına gelir, çünkü ana uygulama için QoS’yi sürdürmek için yan destekçiler için kaynakları aşırı tahsis etmiyorsunuz. Bu, Kubernetes’i en zorlu iş yükleri için daha uygulanabilir bir platform haline getirme yolunda önemli bir adımdır.

Elbette, bu alfa. Pürüzlü kenarlar, değişiklikler ve tabii ki olgunlaştıkça daha fazla sorgulama bekleyin. Ama yön açık: Kubernetes, temel donanımın sınırlı kaynaklarını nasıl tahsis ettiği konusunda akıllanıyor ve bu izlemeye değer bir gelişme.


🧬 İlgili İçgörüler

Jordan Kim
Written by

Cloud and infrastructure correspondent. Covers Kubernetes, DevOps tooling, and platform engineering.

Worth sharing?

Get the best Developer Tools stories of the week in your inbox — no noise, no spam.

Originally reported by Kubernetes Blog