İçeriğe geç
BilgiKütüphanesi
DevOps

Kubernetes Changed Block Tracking Beta'da: Artımlı Yedeklemede Ne Değişti?

Kubernetes'in CSI Changed Block Tracking (CBT) API'si, external-snapshot-metadata v1.0.0 ile Beta'ya geçti. SnapshotMetadataService CRD'si v1beta1 oldu, v1alpha1 ise kaldırıldı. Yazıda CBT'nin ne işe yaradığını, gereksinimleri ve Alpha kullanıcılarının geçiş adımlarını anlatıyoruz.

İlk yayın: 3 dk okuma3 kaynak

Kubernetes'te kalıcı hacimlerin yedeklenmesi uzun süre aynı sorunla boğuştu: Bir hacimde neyin değiştiğini bilmenin standart bir yolu olmadığı için yedekleme araçları ya tüm hacmi yeniden okuyor ya da depolama sağlayıcısına özel API'lere bağımlı kalıyordu. CSI Changed Block Tracking (CBT) API'si bu boşluğu doldurmak için geliştirildi. Eylül 2025'te Alpha olarak duyurulan özellik, Mart 2026'da yayınlanan external-snapshot-metadata v1.0.0 sürümüyle Beta'ya geçti. Kubernetes blogunda 14 Eylül 2026'da yayınlanan yazı ise iki sürüm arasındaki farkları özetliyor.

CBT ne işe yarıyor?

CBT, depolama sistemlerinin iki snapshot arasında blok düzeyinde hangi verinin değiştiğini raporlamasını sağlıyor. Kubernetes'in Alpha duyurusuna göre amaç, yedekleme sırasında tüm hacmin taranması ihtiyacını ortadan kaldırmak. Tam yedeklemeler; uzun yedekleme pencereleri, yüksek bant genişliği ve I/O kullanımı ile tekrar eden veri yüzünden büyüyen depolama maliyetleri anlamına geliyor. CBT ile yedekleme araçları yalnızca değişen blokları aktararak gerçek anlamda artımlı yedekleme yapabiliyor.

Mimarinin parçaları

CBT üç bileşenden oluşuyor:

  • CSI SnapshotMetadata servisi: Snapshot ve değişen blok verilerini sunan gRPC API'si.
  • SnapshotMetadataService CRD'si: CSI sürücüsünün metadata servisinin var olduğunu ve bağlantı bilgilerini küme içindeki istemcilere duyuran özel kaynak tanımı.
  • external-snapshot-metadata sidecar'ı: CSI sürücüsü ile yedekleme uygulamaları arasında standart gRPC arayüzünü sağlayan yardımcı konteyner.

API iki RPC sunuyor ve ikisi de sunucu taraflı akış (server-side streaming) kullanıyor:

  • GetMetadataAllocated: Tek bir snapshot'ta ayrılmış blokları listeler. İlk tam yedek için kullanılır.
  • GetMetadataDelta: Aynı hacmin iki snapshot'ı arasında değişen blokları listeler. Artımlı yedeklerin temelidir.

Yanıtlar SnapshotMetadataResponse mesajları halinde parça parça geliyor; bu yüzden istemcilerin büyük akışları verimli işleyecek şekilde yazılması gerekiyor. Kimlik doğrulama tarafında yedekleme uygulaması bir Kubernetes ServiceAccount token'ı kullanıyor ve bu token'ları alabilmesi için uygulamanın ServiceAccount'ına RBAC RoleBinding'ler ile yetki verilmesi gerekiyor.

Beta'da ne değişti?

Beta'nın en önemli değişikliği API sürümü:

  • SnapshotMetadataService CRD'si v1alpha1 sürümünden v1beta1 sürümüne yükseltildi. Şema değişmedi.
  • v1alpha1 iki sürümün birlikte sunulduğu bir geçiş dönemi olmadan doğrudan kaldırıldı.
  • İki sürüm arasında otomatik dönüşüm yok.

Yeni API grubu ve sürümü manifestlerde şöyle görünüyor:

apiVersion: cbt.storage.k8s.io/v1beta1
kind: SnapshotMetadataService

Gereksinimler

Kubernetes blogundaki Beta yazısına göre:

  • En düşük Kubernetes sürümü: 1.33
  • CSI spesifikasyonu: 1.10 veya üzeri
  • Sidecar imajı: registry.k8s.io/sig-storage/csi-snapshot-metadata:v1.0.0

Bunlara ek olarak CSI sürücünüzün volume snapshot'ları desteklemesi ve external-snapshot-metadata sidecar'ını birlikte dağıtması gerekiyor.

Alpha kullanıcıları için geçiş adımları

Otomatik dönüşüm olmadığı için Alpha'yı denemiş ekiplerin geçişi elle yapması gerekiyor:

  1. v1.0.0 ile gelen CRD tanımını yeniden uygulayın.
  2. SnapshotMetadataService manifestlerinizi apiVersion: cbt.storage.k8s.io/v1beta1 olarak güncelleyin.
  3. CRD ile konuşan istemci veya controller kodunuzu yeni sürüme göre güncelleyin.

Sıfırdan kurulum

Beta ile CBT'yi ilk kez kullanacaklar için adımlar şöyle özetleniyor: Sürücünün snapshot desteğini ve sidecar'ı doğrulayın, v1beta1 CRD'sini kurun, sürücünüz için bir SnapshotMetadataService kaynağı oluşturun ve RPC'leri çağırmak için snapshot-metadata-lister örnek istemcisini ya da kendi istemcinizi kullanın. Uçtan uca bir örnek için blog yazısı csi-driver-host-path sürücüsünü işaret ediyor.

Sınırlamalar

  • CBT yalnızca blok hacimleri kapsıyor. Dosya tabanlı hacimler ve ağ dosya paylaşımları için değişiklik takibi bu API'nin kapsamında değil; dosya tabanlı CSI sürücüleri bu API'yi uygulayamıyor.
  • Özellik Beta aşamasında, henüz GA değil. Proje ekibi GA öncesinde daha geniş CSI sürücüsü desteği ve operasyonel geri bildirim topluyor.

Sonuç

CBT'nin Beta'ya geçmesi, Kubernetes'te sağlayıcıdan bağımsız artımlı blok yedeklemenin olgunlaştığını gösteriyor. Asıl belirleyici, CSI sürücünüzün bu API'yi ne zaman desteklediği olacak. Alpha'yı deneyen ekipler için en kritik nokta, v1alpha1'in uyarı vermeden kaldırılmış olması: Yükseltmeden önce CRD'yi, manifestleri ve istemci kodunu birlikte güncellemeyi planlayın. Ayrıntılar için Kubernetes blogundaki Beta yazısına ve KEP-3314 belgesine bakabilirsiniz.

Benzer İçerikler