はじめに
k8s(Kubernetes)の学習をしているとDeamonSetというリソースが聞くことがあるかと思います。
自分の中でDeamonSetについてあまり理解できていなかったので、記事にしてまとめたいと思います。
DeamonSetとは?
全nodeに1 podずつ配置するリソースです。
実際に動作確認してみる
前提
- minikube が動作していること
minikube start --nodes 2 -p multinode-demo
DeploymentとDeamonSetをデプロイすることでDeamonSetが全Nodeにpodが作成されることを確認してみたいと思います。
kubectl apply -f https://gist.githubusercontent.com/Higakinn/77cbcba2a4c5160122269efe9cf93812/raw/6f733db004ac557724c507ab8c6a84d2b980062e/DemonSetDev.yaml
applyできたら、出来上がったリソースをみてみましょう。
kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
deploy-dev-7dd88cd587-4sbbv 1/1 Running 0 10s 10.244.1.3 multinode-demo-m02 <none> <none>
ds-dev-2fsfv 1/1 Running 0 2m27s 10.244.0.3 multinode-demo <none> <none>
ds-dev-jgwb4 1/1 Running 0 2m27s 10.244.1.2 multinode-demo-m02 <none> <none>
deploymentは multinode-demo-m02
というNodeにしかリソースが作成されていないのに対して、DeamonSetは 全てのNodeにリソースが作成されていることがわかります。
このような形で全Nodeにpodを作成したりすることができます。
で、どんなときに使うの?
色々利用用途がありますが、以下のような場合があります。
- 各Podが出すログを収集するためのPodを用意したい
- 各Podのリソース使用状況やノードの状態をモニタリングするPodを用意したい
- 各Nodeにコンテナイメージをキャッシュさせておきたい
まとめ
- k8s DeamonSet
- 全nodeに1 podずつ配置するリソース
- 全Nodeで必ず動作する必要のあるプロセスのために利用されることが多い
- Fluentd,DataDogなど、、、