Kubernetes Replication Controller Nedir?

Kubernetes Replication Controller, Kubernetes cluster içindeki Pod'ların sürekli olarak çalışmasını sağlamak için kullanılan Kubernetes objesidir. Replication Controller, belirtilen sayıda Pod'un çalıştırılmasını ve bu Pod'ların çökmesi durumunda otomatik olarak yeniden başlatılmasını sağlar.

Örneğin bir Node hata verir ve çökerse, üzerinde yaşayan Pod'larda ölecektir. Fakat Replication Controller nesnesinin takip ettiği Pod'lar, farklı bir Node üzerinde yeniden ayağa kaldırılacaktır.

Replication Controller, ayrıca Pod'ların konfigürasyonunu ve ölçeklendirilmesini de yönetir. Örneğin, bir Replication Controller, önceden belirlenmiş bir sayıda replica Pod'u çalıştırmak üzere yapılandırılabilir ve bu Pod'ların sayısı otomatik olarak ölçeklendirilebilir.

Buna bir örnek verirsek; eğer Replication Controller'a bir yapılandırmanın 3 adet pod'unun olmasını söylemişseniz, RC onu daima 3 adet olacak şekilde tutacaktır. Eğer pod'lardan birini silerseniz, RC, yeni bir pod'u oluşturup cluster'a dahil edecektir.

Replication Controller, belirlenen sayıda pod'u garanti etme yeteneğini bir takım karar mekanizmasına dayanarak sağlar. RC'nin yapılandırmasında belirlediğiniz label selector ile pod'ları sürekli kontrol ederek yeni bir pod oluşturur veya fazlaysa ortadan kaldırır. Bu karar mekanizması aşağıdaki akışta olduğu gibi ilerler.

1. Replication Controller Yapısı

Bir Replication Controller, 3 ana parçadan oluşur:

  • label selector: RC'nin kontrol edeceği pod'ları tanımlada kullanılır.
  • replica count: Kaç adet pod'un çalışması gerektiğini belirtir.
  • pod template: Yeni oluşturulacak pod'ların manifestidir.

Bir Replication Controller'un bu üç ana bileşeni herhangi bir zamanda değiştirilebilir. Fakat şu detayları hatırlamanız gerekmektedir:

  • label selector ve pod template'i değiştirmenin mevcut pod'lara herhangi bir etkisi yoktur.
  • RC'nin label selector'u veya RC'nin kontrol ettiği podların label'ları değiştirildiğinde, pod'lar silinmez ve mevcut label'ları ile yaşamaya devam ederler. Fakat RC'nin kontrolünden çıkmış olurlar.
  • pod template değiştirildiğinde mevcut pod'lar herhangi bir değişikliğe uğramaz. Sadece artık bundan sonra RC tarafından oluşturulacak yeni pod'lar, bu yeni template ile oluşturulur.

2. Replication Controller Oluşturmak

Replication Controller oluşturmak için JSON veya YAML formatında bir manifest dosyası hazırlayarak Kubernetes API Server'a göndereceğiz. Bunun için ilk olarak manifest dosyamızı görelim:

apiVersion: v1
kind: ReplicationController
metadata:
  name: myapp
spec:
  replicas: 3
  selector:
    app: myapp
  template:
    metadata:
      name: myapp
      labels:
        app: myapp
    spec:
      containers:
        - name: web
          image: nginx
          ports:
            - containerPort: 8080

Bu YAML dosyası, "myapp" adlı bir Replication Controller oluşturur. Bu Replication Controller, 3 replica Pod çalıştırmak için yapılandırılmıştır ve selector altında belirtildiği gibi "app: myapp" label ile işaretlenmiş Pod'ları bulup yönetir.

template kısmı ise daha önce gördüğümüz Pod manifesti ile aynıdır. Tek dikkat edilmesi gereken şey, oluşturulan Pod'ların RC tarafından yönetilebilmesi için labels kısmında, RC'nin selector kısmında belirtilen label'larla oluşturulmasıdır. Aksi halde RC'yi oluşturamazsınız.

💡
Daha basit ve kısa bir manifest dosyası için selector bölümünü dosyadan çıkarabilirsiniz. RC, pod template içindeki labels kısmını kontrol ederek selector'u kendisi otomatik belirler.

Manifest dosyası hazır olduktan sonra kubectl create veya kubectl apply komutlarından birisi ile Replication Controller'ı oluşturabilirsiniz.

 kubectl create -f file-rc.yaml

Ardından pod'lara baktığınızda belirttiğiniz replica sayısı kadar pod'un oluşturuluduğunu göreceksiniz.

$ kubectl get pods
NAME READY STATUS RESTARTS AGE
myapp-53thy 0/1 ContainerCreating 0 2s
myapp-k0xz6 0/1 ContainerCreating 0 2s
myapp-q3vkg 0/1 ContainerCreating 0 2s

3. Oluşturulan Replication Controller Hakkında Bilgi Almak

Oluşturduğunuz Replication Controller'ları görmek için kubectl get rs komutunu kullanabilirsiniz.

$ kubectl get rc
NAME DESIRED CURRENT READY AGE
myapp 3 3 2 3m
💡
kubectl get komutunda uzunca replicationcontroller yazmak yerine kısaca rc yazabilirsiniz.

Replication Controller hakkında daha fazla bilgi almak için kubectl describe komutunu kullanabilirsiniz.

$ kubectl describe rc myapp
Name:         myapp
Namespace:    default
Selector:     app=myapp
Labels:       app=myapp
Annotations:  <none>
Replicas:     3 current / 3 desired
Pods Status:  0 Running / 3 Waiting / 0 Succeeded / 0 Failed
Pod Template:
  Labels:  app=myapp
  Containers:
   myapp:
    Image:        nginx
    Port:         8080/TCP
    Host Port:    0/TCP
    Environment:  <none>
    Mounts:       <none>
  Volumes:        <none>
Events:
  Type    Reason            Age   From                    Message
  ----    ------            ----  ----                    -------
  Normal  SuccessfulCreate  3m3s  replication-controller  Created pod: myapp-6np2p
  Normal  SuccessfulCreate  3m2s  replication-controller  Created pod: myapp-snw7l
  Normal  SuccessfulCreate  3m2s  replication-controller  Created pod: myapp-krj2q

4. RC Scale Etmek ve Replica Sayısını Değiştirmek

Replica Controller oluştururken replicas parametresi ile belirlediğimiz replica sayısı, RC'nin bize çalışmasını garanti ettiği pod sayısıdır. Replica sayısını ihtiyaçlara göre dilediğimiz zaman azaltabilir veya artırabiliriz.

Replica sayısını değiştirmek için kubectl scale rc komutunu kullanabiliriz.

kubectl scale rc myapp --replicas=10

Bu komut örneğinde, RC'nin verilen template üzerinden 10 adet replika ayarlamasını istiyoruz. Yani eğer mevcutta 3 tane pod aktifse, bu komut sonrası 7 tane daha pod çalıştırılacak ve toplam pod sayısı 10 olacaktır.

Diğer bir yöntemde Replication Controller'ın tanımını kubectl edit komutu ile düzenlemektir.

kubectl edit rc myapp

Açılan editörde replicas değerini düzenleyerek kaydedebilirsiniz. Ardından RC pod sayısını arzu ettiğiniz sayı kadar ayarlayacaktır.

5. Replication Controller Silmek

Replication Controller silindiğinde yönettiği tüm podlarda silinir. RC'yi silmek için kubectl delete komutunu çalıştırabiliriz.

kubectl delete rc myapp

Replication Controller'u sildiğinizde, bu RC'nin takip ettiği podlarda silinir. Eğer silinmemesini istiyorsanız --cascade=false parametresini kullanabilirsiniz.

kubectl delete rc myapp --cascade=false

Sıradaki yazı ile eğitim serisine devam edebilirsiniz.

Kubernetes ReplicaSet Nedir?
Kubernetes ReplicaSet, belirli bir pod sayısını yönetmek ve high availability sağlamak için kullanılan bir Kubernetes nesnesidir.