Kubernetes ReplicaSet Nedir?
Kubernetes ReplicaSet, belirtilen sayıda replica Pod'un daima çalıştığından emin olmak için kullanılan bir Kubernetes nesnesidir. ReplicaSet, scalability ve high availability için kullanılır.
ReplicaSet, bir önceki yazımızda anlattığımız Replication Controller nesnesinin yeni versiyonudur ve daha efektif pod selector seçenekleri sunar.
Deployment
that configures a ReplicaSet
is now the recommended way to set up replication.Replication işleminin nasıl çalıştığına dair detaylı bilgi almak için devam etmeden önce Replication Controller yazısını ziyaret edebilirsiniz.
1. Replication Set Oluşturmak
Replication Set oluşturmak için JSON veya YAML formatında bir manifest dosyası hazırlayarak Kubernetes API Server'a göndermemiz gerekiyor. Bunun için ilk olarak manifest dosyamızı görelim:
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: myapp
spec:
replicas: 3
selector:
matchLabels:
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 Set oluşturur. Bu Replication Set, 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 RS tarafından yönetilebilmesi için labels
kısmında, RS'nin selector
kısmında belirtilen label'larla oluşturulmasıdır. Aksi halde RS'yi oluşturamazsınız.
Manifest dosyası hazır olduktan sonra kubectl create
veya kubectl apply
komutlarından birisi ile Replication Controller'ı oluşturabilirsiniz.
kubectl create -f file-rs.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
2. ReplicaSet İle Detaylı Label Selector Kullanımı
Replica Controller ile kıyaslandığında ReplicaSet ile gelen en önemli güncellemelerden birisi de daha detaylı ve anlamlı label selector kullanımıdır.
Label selector olarak kullanabileceğimiz ilk parametre matchLabels
'dır.
selector:
matchLabels:
app: myapp
Bu kullanım ile RS, direkt olarak key:value
çiftiyle eşleşen podları kontrolü altına alır. Replication Controller'daki kullanım ile aynıdır.
Diğer bir selector ise matchExpressions
'dır. Bu yeni selector ile daha esnek ve detaylı selector'lar yazabiliriz.
selector:
matchExpressions:
- key: app
operator: In
values:
- myapp
Örnekte gördüğünüz gibi her expression bir key
, operator
ve operator'e bağlı olarak values
içerir. operator
parametresinin alabileceği parametreler ise şunlardır:
- In: Label'ın değeri values ile verilen listedeki değerlerden biri olmalıdır
- NotIn: Label'ın değeri values ile verilen listedeki değerlerden biri olmamalıdır
- Exists: Pod, değeri farketmeksizin belirtilen key'e sahip olmalıdır.
- DoesNotExists: Pod, değeri farketmeksizin belirtilen key'e sahip olmamalıdır.
Exists
ve DoesNotExists
operator'leri kullanıldığında values parametresini kullanmamanız gerekir. Çünkü bu iki operator sadece key
kontrolü yapar.Birden fazla koşul içeren label selector kullanmak istediğinizde, hem matchLabels
hem de matchExpressions
altında tüm koşullarınızı yazabilirsiniz. Fakat bu durumda bir pod'un tüm bu koşulları sağlaması gerekmektedir. Yani OR
değil, AND
ile koşullar oluşturmuş olursunuz.
3. Oluşturulan Replication Set Hakkında Bilgi Almak
Oluşturduğunuz Replication Set'leri görmek için kubectl get rs
komutunu kullanabilirsiniz.
$ kubectl get rs
NAME DESIRED CURRENT READY AGE
myapp 3 3 2 3m
kubectl get
komutunda uzunca replicationset
yazmak yerine kısaca rs
yazabilirsiniz.Replication Set hakkında daha fazla bilgi almak için kubectl describe
komutunu kullanabilirsiniz.
$ kubectl get rs myapp
Name: myapp
Namespace: default
Selector: app=myapp
Labels: <none>
Annotations: <none>
Replicas: 3 current / 3 desired
Pods Status: 2 Running / 1 Waiting / 0 Succeeded / 0 Failed
Pod Template:
Labels: app=myapp
Containers:
web:
Image: nginx
Port: 8080/TCP
Host Port: 0/TCP
Environment: <none>
Mounts: <none>
Volumes: <none>
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal SuccessfulCreate 15s replicaset-controller Created pod: myapp-sfpgv
Normal SuccessfulCreate 15s replicaset-controller Created pod: myapp-zng5n
Normal SuccessfulCreate 15s replicaset-controller Created pod: myapp-kjb8p
4. RS Scale Etmek ve Replica Sayısını Değiştirmek
ReplicaSet oluştururken replicas
parametresi ile belirlediğimiz replica sayısı, RS'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 rs
komutunu kullanabiliriz.
kubectl scale rs myapp --replicas=10
Bu komut örneğinde, RS'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 Set'in tanımını kubectl edit
komutu ile düzenlemektir.
kubectl edit rs myapp
Açılan editörde replicas değerini düzenleyerek kaydedebilirsiniz. Ardından RS pod sayısını arzu ettiğiniz sayı kadar ayarlayacaktır.
Sıradaki yazı ile eğitim serisine devam edebilirsiniz.