# Kubernetes Operator

Adres: https://softwaredictionary.org/tr/terimler/kubernetes-operator
Kategori: DevOps ve Bulut
Son güncelleme: 2026-10-06
Okunuşu: kubernetis opıreytır

Kısaca: Kubernetes operator, kümede çalışan ve veritabanı gibi karmaşık bir uygulamayı deneyimli bir operasyon uzmanı gibi yöneten özel bir controller'dır.

## Kubernetes operator nedir?

Kubernetes, bir pod'un üç kopyası gibi genel şeyleri çalışır durumda tutmayı bilir, ama belirli bir veritabanını nasıl işleteceğini bilmez: replikasyonu nasıl kuracağını, nasıl yedek alacağını, veri kaybetmeden nasıl sürüm yükselteceğini ya da primary çöktüğünde bir replica'yı nasıl öne çıkaracağını. Bir operator bu bilgiyi yazılım olarak paketler. Desen 2016'da CoreOS tarafından tanıtıldı; bugün PostgreSQL, Kafka, Elasticsearch, Prometheus ve daha birçok sistem için operator'lar var.

Bir operator'ın iki parçası vardır. Custom resource definition (CRD), Kubernetes API'sine örneğin bir PostgreSQL kümesi gibi yeni bir nesne türü ekler; kullanıcılar bunu her yerleşik nesne gibi YAML ile oluşturur. Kümede çalışan bir program olan controller ise bu nesneleri izler ve bir uzlaştırma döngüsü (reconciliation loop) çalıştırır: her nesnenin spec'indeki istenen durumu gerçekte var olanla karşılaştırır, pod, volume ve service oluşturmak ya da yedeğe geçişi başlatmak gibi adımlarla aradaki farkı kapatır ve sonucu nesnenin status alanına yazar.

Operator, kümede yaşayan ve hiç uyumayan bir uzman gibidir: üç düğümlü ve her gün yedeği alınan bir veritabanı gibi ne istediğinizi söylersiniz, o da bir veritabanı yöneticisinin aksi hâlde elle yapacağı rutin işleri yapar. Operator'lar genellikle Go ile, ikisi de controller-runtime kütüphanesi üzerine kurulu olan Kubebuilder ya da Operator SDK kullanılarak yazılır; Java, Python ve başka diller için de framework'ler vardır. OperatorHub.io, yayımlanmış pek çok operator'ı listeler.

Operator'lar sık sık Helm chart'larıyla karıştırılır. Bir Helm chart'ı bir dizi Kubernetes nesnesini şablondan üretip kurar; bu, kurulumun yapıldığı ilk günü (day one) kapsar. Operator ise sonrasında da çalışmaya devam eder ve ikinci günü (day two), yani sürüm yükseltme, yedekleme, ölçekleme ve arızalardan kurtulma gibi süregelen işleri üstlenir. İkisi çoğu zaman birlikte kullanılır; birçok operator'ın kendisi de bir Helm chart'ıyla kurulur. Her operator bir controller'dır ama her controller bir operator değildir: bu ad, belirli bir uygulamayı custom resource'lar aracılığıyla yöneten controller'lar için kullanılır.

## Önemli noktalar

- Operator, tek bir uygulamayı işletme bilgisini yazılıma dönüştürür.
- Bir custom resource definition'ı kümede çalışan bir controller ile birleştirir.
- Controller'ın uzlaştırma döngüsü gerçek durumu istenen duruma doğru taşır.
- Operator'lar day two işlerini üstlenir: sürüm yükseltme, yedekleme, ölçekleme ve yedeğe geçiş.
- Helm bir uygulamayı kurar; operator onu yönetmeye devam eder.

## Örnek: Bir operator'dan PostgreSQL kümesi istemek

```yaml
# A custom resource: the CloudNativePG operator turns it into a PostgreSQL cluster
apiVersion: postgresql.cnpg.io/v1
kind: Cluster
metadata:
  name: orders-db
spec:
  instances: 3      # one primary and two replicas; the operator handles failover
  storage:
    size: 20Gi

# kubectl apply -f orders-db.yaml
# kubectl get cluster orders-db   -> status reported by the operator
```

## Sık sorulan sorular

**Kubernetes operator ile Helm chart arasındaki fark nedir?**

Helm chart'ı, siz çalıştırdığınızda bir dizi Kubernetes nesnesini kurar ya da günceller. Operator ise kümede sürekli çalışır ve uygulamayı yönetmeye devam eder; arızalara tepki verir, yedekleme ve sürüm yükseltme gibi işleri üstlenir.

**Kendi operator'ımı yazmam gerekir mi?**

Genellikle hayır. Popüler veritabanlarının, mesaj aracılarının ve izleme araçlarının çoğu için olgun operator'lar zaten var. Kendi operator'ınızı yazmak, bir ekip Kubernetes üzerinde kendi karmaşık ve durum tutan (stateful) yazılımını çalıştırıyor ve onun işletilmesini otomatikleştirmek istiyorsa anlamlıdır.

**Kubernetes'te custom resource nedir?**

Kubernetes'e yerleşik olmayan, API'ye bir custom resource definition ile eklenmiş bir türden nesnedir. Tanım kurulduktan sonra bu nesneleri tıpkı pod'lar ya da deployment'lar gibi kubectl ile oluşturabilir, listeleyebilir ve silebilirsiniz.

## Kaynaklar

- [Kubernetes documentation: Operator pattern](https://kubernetes.io/docs/concepts/extend-kubernetes/operator/)
- [Kubernetes documentation: Custom Resources](https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/)
- [Kubernetes documentation: Controllers](https://kubernetes.io/docs/concepts/architecture/controller/)

---

Software Dictionary: https://softwaredictionary.org/tr · https://softwaredictionary.org/tr/llms.txt
