Docker & Kubernetes
Controller mantığı
Operator'ın denetleyici mantığını öğrenirsin.
Controller mantığı
Operator'ün kalbi Reconcile fonksiyonudur. Özel kaynak her değiştiğinde (ya da sahip olduğu bir nesne değiştiğinde) çağrılır ve şu adımları izler:
- Özel kaynağı oku; silinmişse çık.
- Gereken alt nesneleri (Deployment, Service, CronJob) hesapla.
- Yoksa oluştur, farklıysa güncelle.
- Status'u güncelle; gerekiyorsa bir süre sonra yeniden kuyruğa al.
func (r *YedekReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error) {
var y v1.Yedek
if err := r.Get(ctx, req.NamespacedName, &y); err != nil {
return ctrl.Result{}, client.IgnoreNotFound(err)
}
cj := cronJobOlustur(&y) // istenen alt nesne
ctrl.SetControllerReference(&y, cj, r.Scheme) // sahiplik
// CreateOrUpdate ... status güncelle ...
return ctrl.Result{RequeueAfter: time.Hour}, nil
}
Sahiplik ve çöp toplama
ownerReferences, alt nesneyi sahibine bağlar. Sahip (özel kaynak) silinince Kubernetes'in çöp toplayıcısı alt nesneleri de siler; ayrıca alt nesne değişince sahibin Reconcile'ı tetiklenir. Silmeden önce dış kaynakları temizlemek için finalizer kullanılır:
metadata:
ownerReferences:
- apiVersion: ornek.com/v1
kind: Yedek
name: magaza-gece
controller: true
blockOwnerDeletion: true
# finalizer
metadata:
finalizers: ["ornek.com/s3-temizle"]
Uygulama Sahipliği incele
Üç komut yaz: magaza'daki magaza-gece-yedek CronJob'unun sahibinin türünü jsonpath='{.metadata.ownerReferences[0].kind}' ile yazdır; magaza'daki magaza-gece Yedek'ini sil; magaza'daki CronJob'ları listele.
Örnek çözümü göster
kubectl get cronjob magaza-gece-yedek -n magaza -o jsonpath='{.metadata.ownerReferences[0].kind}'
kubectl delete yedek magaza-gece -n magaza
kubectl get cronjobs -n magaza
Kendini test et
-
Reconcile fonksiyonu neden aynı girdiyle tekrar tekrar çağrılabilir olmalıdır (idempotent)?
- Hız için
- Bellek için
- Gerekli değildir
- Denetleyici aynı nesne için defalarca, sırası belirsiz çağrılır; her çağrı aynı sonuca varmalı
Cevabı göster
Denetleyici aynı nesne için defalarca, sırası belirsiz çağrılır; her çağrı aynı sonuca varmalı — "Oluştur" yerine "yoksa oluştur, varsa uydur" yazılır.
-
Alt nesneyi sahibine bağlayan alanı yaz.
metadata:
____:
- apiVersion: ornek.com/v1
kind: Yedek
name: magaza-gece
Cevabı göster
metadata:
ownerReferences:
- apiVersion: ornek.com/v1
kind: Yedek
name: magaza-gece
-
Eşleştir.
- Reconcile
- Uzlaştırma fonksiyonu
- ownerReferences
- Sahiplik
- finalizer
- Silmeden önce temizlik
- RequeueAfter
- Sonra yeniden dene
Sıradaki ders: Operator SDK