Daemonset ve Kullanımı

 

Daemonset Nedir?

Cluster’da her Node üzerinde belirlediğimiz bir Pod’u çalıştırma yöntemidir.

Genellikle loglama, monitör etme işlemleri için kullanılan default Podların oluşturuması için kullanılır.

Örneğin; Cluster’ı ölçeklendirmek için node eklendiği zaman her node’a default olarak log toplamak için Fluentd gibi bir uygulamanın otomatik kurulması için (imaj ile pod’un oluşturulması) kullanılır.

Aşağıdaki mimaride yeni bir Node (Node-4 10.0.0.5) eklendiği zaman bu Node üzerinde default Fluend Pod’unun hali hazırda kurulması sağlanır.

Bunun gibi özel gereksinimler ve özel işler için Node’lara deploy edilebilirler.

Asıl uygulamaların çalıştırılacağı Pod’ları oluşturmadan önce Node’larda ön hazırlık olması gereken durumlarda kullanılabilir.

Genellikle dışarıya data push etmek için DaemonSetler kullanılıyor.

Aslında DaemonSet Node üzerinde bir agent gibi çalışıyor.

 

Daemonset’e Nasıl Erişilir?

-          Daemonset oluşturulduğunda port numarası verilip NodeIP-Port bilgisi üzerinden erişilebilir.

-          Daemonset podları bir service objesine bind edilip service üzerinden erişilebilir.









Komutlar:


#cluster kontrol edelim
kubectl get nodes
kubectl describe node node1

#daemonset oluşturalım
kubectl create -f fluentd.yaml

#daemonsetlere bakalım desired ve current 0 olarak görülecek çünkü henüz pod oluşturulmadı
kubectl get ds

#daemonset üzerinde çalışan podlara bakalım
kubectl get pods

Dikkat:
Daemonset'in podları oluşturması için fluentd.yaml olan dosyada nodeSelector altında app:collector-node alanındaki label'a göre pod oluşturulur.

#elimizdeki node'a label atayacağız
kubectl label node node1 app=collector-node
#bu node içindeki labelları görmek için
kubectl decribe node node1

#daha önce bu label oluşturulduysa zaten var diye hata verir. Bu durumda label overwrite edilmelidir.
kubectl label node node1 app=collector-node --overwrite

#daemonsetlere bakalım desired ve current 0 olarak görülmüştü artık 1 olacak çünkü label eşleşti ve pod oluşturuldu
kubectl get ds

Böylece ilk başta kubernetes'de başlatılan daemonset label eşleşmediği için herhangi bir node bulamadı. Daha sonra label eşleşince pod ayağa kalktı.
#podları görelim
kubectl get pods

#bu node içindeki labelları görelim
kubectl decribe node node1

#daemonset'i silelim
kubectl delete ds data-collector-ds
# ds olmadığını görelim
kubectl get ds 

#daemonset silindiği için pod'un state'i artık Terminating olacak ve deamonsetle ilişkili olan podlar da siliecek
#pod'un terminating olduğunu görelim
kubectl get pods


Share:
spacer

Hiç yorum yok:

Yorum Gönder