CodeBlanks Logo Icon CodeBlanks

Meydan okuma - Operator

Operator reconcile mantığını açıklayan bir yapı yazarsın.

Meydan okuma: Yedek operator'ü

CRD tek başına yalnızca veri saklar; işi yapan bir operator gerekir. Operator her Yedek nesnesi için bir CronJob oluşturacak ve son yedeğin durumunu status'a yazacak:

Yedek magaza-db  ──reconcile──►  CronJob magaza-db-yedek (0 2 * * *)
                ◄──status─────   sonYedek: 2026-11-03T02:00:00Z, durum: Basarili

İskeleti kubebuilder ile kuracak, ardından operator'ü cluster'a dağıtıp sonucu sınayacaksın.

Uygulama İskeleti kur

Üç komut yaz: kubebuilder init --domain sirket.com --repo github.com/sirket/yedek-operator; platform grubunda, v1 sürümünde Yedek türü için API oluştur (--resource --controller); CRD ve RBAC dosyalarını üret (make manifests).

Başlangıç kodu

terminal
# buraya yaz

Örnek çözüm

terminal
kubebuilder init --domain sirket.com --repo github.com/sirket/yedek-operator
kubebuilder create api --group platform --version v1 --kind Yedek --resource --controller
make manifests

Beklenen çıktı

INFO Writing kustomize manifests for you to edit...
INFO Writing scaffold for you to edit...
INFO api/v1/yedek_types.go
INFO internal/controller/yedek_controller.go
/home/ali/yedek-operator/bin/controller-gen rbac:roleName=manager-role crd webhook paths="./..." output:crd:artifacts:config=config/crd/bases

Uygulama Dağıt ve sına

Dört komut yaz: CRD'yi cluster'a kur (make install); operator'ü ghcr.io/sirket/yedek-operator:0.1.0 image'ıyla dağıt (make deploy IMG=...); yedek.yaml'ı uygula; magaza'da magaza-db nesnesinin {.status.durum} alanını jsonpath ile yazdır.

Başlangıç kodu

terminal
# buraya yaz

Örnek çözüm

terminal
make install
make deploy IMG=ghcr.io/sirket/yedek-operator:0.1.0
kubectl apply -f yedek.yaml
kubectl get yedek magaza-db -n magaza -o jsonpath='{.status.durum}'

Beklenen çıktı

customresourcedefinition.apiextensions.k8s.io/yedekler.platform.sirket.com created
deployment.apps/yedek-operator-controller-manager created
yedek.platform.sirket.com/magaza-db created
Basarili

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Operator'ün oluşturduğu CronJob'a ownerReference eklemesinin faydası nedir?

  • CronJob daha hızlı çalışır
  • RBAC gerekmez
  • Status otomatik dolar
  • Yedek nesnesi silinince CronJob da çöp toplayıcıyla silinir Doğru cevap

Açıklama: Sahiplik ilişkisi temizliği Kubernetes'e bırakır.

2 Yeni bir API türü ve denetleyicisi ekle.

Soru
kubebuilder create ____ --group platform --version v1 --kind Yedek
Cevap
kubebuilder create api --group platform --version v1 --kind Yedek

Açıklama: create api tür ve denetleyici iskeletini üretir.

3 Eşleştir.

Kavram Anlamı
reconcile İstenen duruma getir
ownerReference Sahiplik
status Gözlenen durum
make manifests CRD ve RBAC üret

Uzman bölümündeki tüm dersler