Kubernetes DaemonSet Nedir?
Kubernetes DaemonSet, cluster'daki her bir node üzerinde belirli bir pod'un bir replikasını çalıştıran sistemdir. DaemonSet ile cluster'daki her bir node üzerinde belirli bir görevi yerine getirmesi gereken pod'lar otomatik olarak çalıştırılabilir ve yönetilebilir.
ReplicationController ve ReplicaSet nesneleri, bir pod'un belirlenen sayı kadar replikasının çalışmasını garanti ederler. Fakat hangi node üzerinde kaç tanesinin yer alacağına dair herhangi bir garanti sunmazlar. DaemonSet ise her bir node üzerinde bir replikanın çalışacağının garantisini size sunar.
Kubernetes DaemonSet'in kullanılabileceği senaryolar şunlar olabilir:
- Log toplama: Her bir node üzerinde çalışması gereken log toplama pod'ları DaemonSet ile otomatik olarak dağıtılabilir ve yönetilebilir.
- Güvenlik: Her bir node üzerinde çalışması gereken güvenlik pod'ları DaemonSet ile otomatik olarak dağıtılabilir ve yönetilebilir.
- Monitoring: Her bir node üzerinde çalışması gereken monitoring pod'ları DaemonSet ile otomatik olarak dağıtılabilir ve yönetilebilir.
- İzolasyon: Özel bir gereksinim için bir DaemonSet kullanarak, belirli bir node üzerinde çalışması gereken podlar diğer node'larda çalışmayacak şekilde izole edilebilir.
- Network policy: DaemonSet kullanarak, ağ politikalarının uygulanması için her bir node üzerinde belirli bir pod çalıştırılabilir.
1. DaemonSet Önemli Özellikler
- Kubernetes DaemonSet nesnesinin amacı her node üzerinde bir pod çalıştırmak olduğu için Scheduler bileşenine ihtiyaç duymaz. Bu nedenle
unschedulable
olarak işaretlenmiş node'larınız varsa bile DaemonSet bunu önemsemeden pod'u ilgili node üzerinde çalıştırır. - DaemonSet ile ilgili diğer bir önemli yetenekte,
nodeSelector
parametresini yapılandırarak her node yerine belirli koşulları sağlayan tüm node'larda pod oluşturma işlemini sağlayabilmenizdir. Tabi eğer bu parametreyi yapılandırmazsanız, varsayılan davranış tüm node'lar üzerinde pod oluşturulmasıdır.
- Cluster'a yeni bir node eklendiğinde, DaemonSet, o yeni node üzerinde ilgili pod'u oluşturur. Node silindiğinde ise yine ilgili pod'u kaldırır.
- Son olarak ise ReplicationController ve ReplicaSet nesnelerinin aksine, DaemonSet herhangi bir replica sayısı parametresi içermez. Çünkü DaemonSet nesnesinin amacı tüm node'lar üzerinde ilgili pod'un bir replikasını çalıştırmaktır.
2. DaemonSet 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: DaemonSet
metadata:
name: ssd-monitor
spec:
selector:
matchLabels:
app: ssd-monitor
template:
metadata:
labels:
app: ssd-monitor
spec:
nodeSelector:
disk: ssd
containers:
- name: web
image: nginx:latest
Buradaki nodeSelector
parametresi opsiyoneldir. Bu parametreyi yapılandırarak tüm node'lar yerine belirli label'larla işaretlenmiş tüm node'lar üzerinde pod'ları çalıştırmış olursunuz. Eğer nodeSelector
parametresini kullanmazsanız tüm node'lar üzerinde pod'lar çalıştırılır.
Manifest dosyası hazır olduktan sonra kubectl create
veya kubectl apply
komutlarından birisi ile Replication Controller'ı oluşturabilirsiniz.
kubectl create -f file-ds.yaml
Ardından pod'lara baktığınızda belirttiğiniz node sayısı kadar pod'un oluşturuluduğunu göreceksiniz.
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
ssd-monitor-53thy 0/1 ContainerCreating 0 2s
nodeSelector
ile belirttiğimiz disk: ssd
label'ını node'unuza eklememişsiniz demektir. kubectl label node minikube disk=ssd
komutu ile ilgili node'unuza label ekleyebilirsiniz. Ardından pod ilgili node üzerinde çalıştırılacaktır.Kubernetes Label konusu hakkında daha fazla detay almak için şu yazımızı ziyaret edebilirsiniz:
3. Oluşturulan DaemonSet Hakkında Bilgi Almak
Oluşturduğunuz DaemonSet'leri görmek için kubectl get ds
komutunu kullanabilirsiniz.
$ kubectl get ds
NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE
ssd-monitor 1 1 1 1 1 disk=ssd 48s
kubectl get
komutunda uzunca daemonset
yazmak yerine kısaca ds
yazabilirsiniz.DaemonSet hakkında daha fazla bilgi almak için kubectl describe
komutunu kullanabilirsiniz.
$ kubectl describe ds ssd-monitor
Name: ssd-monitor
Selector: app=ssd-monitor
Node-Selector: disk=ssd
Labels: <none>
Annotations: deprecated.daemonset.template.generation: 1
Desired Number of Nodes Scheduled: 1
Current Number of Nodes Scheduled: 1
Number of Nodes Scheduled with Up-to-date Pods: 1
Number of Nodes Scheduled with Available Pods: 1
Number of Nodes Misscheduled: 0
Pods Status: 1 Running / 0 Waiting / 0 Succeeded / 0 Failed
Pod Template:
Labels: app=ssd-monitor
Containers:
web:
Image: nginx:latest
Port: <none>
Host Port: <none>
Environment: <none>
Mounts: <none>
Volumes: <none>
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal SuccessfulCreate 82s daemonset-controller Created pod: ssd-monitor-pp6cm
4. DaemonSet Silmek
DaemonSet silindiğinde yönettiği tüm podlarda silinir. DS'yi silmek için kubectl delete
komutunu çalıştırabiliriz.
kubectl delete ds ssd-monitor
DaemonSet'i sildiğinizde, bu DS'nin takip ettiği podlarda silinir. Eğer silinmemesini istiyorsanız --cascade=false
parametresini kullanabilirsiniz.
kubectl delete ds ssd-monitor --cascade=false
Sıradaki yazı ile eğitim serisine devam edebilirsiniz.