Daemonsets
Kubernetes’te, DaemonSet, belirli bir tür pod’u (container’lar grubu) her bir Node’da çalıştırmak için kullanılan bir nesne türüdür. Diğer bir deyişle, Kubernetes kümesindeki her Node’a bir DaemonSet tarafından yönetilen bir pod yerleştirilir.
DaemonSet’in bazı yaygın kullanım durumları şunlardır:
-
Log ve izleme ajanları: Örneğin, her nod’ta çalışan ve nod’daki tüm container’ların loglarını toplayan bir log toplayıcı ajanı kurmak isteyebilirsiniz.
-
Node izleme ve performans analizi: Node’un kaynak kullanımını, performansını izlemek için araçları her node’da çalıştırmak.
-
Ağ yapılandırma ve yönetimi: Örneğin, ağ kurallarını ayarlamak veya SDN (Software Defined Networking) çözümleri için gereken ajanları çalıştırmak.
DaemonSet oluşturulduğunda, Kubernetes otomatik olarak seçilen her Node için bir pod oluşturur. Yeni bir Node eklediğinizde, bu Node için de otomatik olarak bir pod oluşturulur. Node’u kümesten çıkarırsanız, Kubernetes bu Node için olan pod’u otomatik olarak siler.
DaemonSet’in çalışma şekli, yüksek seviyede şu adımlardan oluşur:
- DaemonSet tanımı oluşturulur.
- DaemonSet Kubernetes API’sine gönderilir.
- DaemonSet denetleyicisi, Kubernetes kümesindeki her Node için bir pod oluşturur.
- Eğer bir Node kümeye eklenirse, DaemonSet yeni bir pod oluşturur. Eğer bir Node kümeden çıkarılırsa, DaemonSet pod’u siler.
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: example-daemonset
labels:
app: example-app
spec:
selector:
matchLabels:
name: example-daemonset-pod
template:
metadata:
labels:
name: example-daemonset-pod
spec:
containers:
- name: example-container
image: nginx:latest
Bu manifestte şu bilgiler bulunmaktadır:
apiVersion
: Kullandığımız Kubernetes API’nin versiyonunu belirtir.DaemonSet
içinapps/v1
sıklıkla kullanılır.kind
: Oluşturmak istediğimiz kaynağın türünü belirtir. Bu örnekte, birDaemonSet
oluşturuyoruz.metadata
: Kaynağın meta verilerini belirtir. Bu örnekte kaynağaexample-daemonset
adını verdik.spec
: Kaynağın özelliklerini belirtir.selector
: Hangi podların bu DaemonSet’e ait olduğunu belirten etiketleri seçer.template
: Yeni pod’ların nasıl oluşturulacağını belirten bir şablon.metadata
: Pod’un meta verileri.spec
: Pod özellikleri.containers
: Pod içerisinde çalışacak olan container’lar listesi. Bu örnekte sadece bir container bulunuyor ve bu container’ın adıexample-container
, kullanılan imaj iseexample-image:latest
.
Bu manifesti kubectl
aracılığıyla uygulayarak bir DaemonSet oluşturabilirsiniz:
kubectl apply -f <manifest-dosya-adı.yaml>