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: 8080Bu 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.yamlArdı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 2s2. 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: myappBu 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 3mkubectl 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-kjb8p4. 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=10Bu 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 myappAçı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.
