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.
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.