##DaemonSet
ReplicaSetはPodをスケジューラによってNodeに配置する時、上記の図のようにNode1にresourceが多く残っている状態ならNode1にPodを多く生成し、Node3のようにresourceがなければPodを生成しない。
一方、DaemonSetはNodeのresource状態とは関係なく、すべてのNodeにPodを一つずつ作る特徴がある。
もしNodeが10個なら、それぞれのNodeに1ずつ合計10個のPodが生成される。
このように、それぞれのNodeにインストールをしなければならServiceが下記のように3つあります。
性能収集
各Nodeの性能状態はすべて監視対象になる。
Prometheusのようなagentがインストールされていると全てのNodeの性能状態をモニタリングシステムに送信することができる。
Log収集
特定のNodeに障害が発生した場合は問題を把握するためにLogを分析する必要があるがfluentdのようなサービスが各NodeのLog情報を収集してくれる。
Storage活用
NodeをStorageに活用することができ、GlusterFSのようなサービスをそれぞれのNodeにインストールするとNodeのresourceを使ってネットワークファイルシステムを構築できる。
※Kubernetesもネットワーク管理をするために、各NodeにDaemonSetでProxyの役割をするPodを作成する。
###Job&CronJob
上の図のようにPodを直接作成する場合もあるし、ReplicaSetを使って作成したPodもあるし、Jobを使って作成したPodもある。
全て同じPodだが直接作成したかそれともControllerで作成したかによってPodの違いを説明すると
Podを直接作成した場合は、Node1がダウンされた場合はサービスの運用ができなくなる。(Service Down)
PodをController(ReplicaSet、Job)で作成した場合は、Controllerが障害を検知すると、他のNodeに再生成するので
サービスを引き続き提供できる。
ReplicaSetで作成されたPodは仕事をしないとPodをrestartさせるから、このPodのサービスは、何が起きてもサービスを維持する目的で使わなければならない。
※recreate:Podを再作成するので、Pod name、IP addressが変更される。
※restart:Podは変更せずいにPod内のContainerだけ再起動させる。
Jobで作成されたPodは、プロセスが動いてないとPodは終了となる。
終了の意味はPodが削除されるのではなく、resourceを使用していない即ち止まっている状態である。この状態でもPodの中に入ってLogを確認することができる。
このようにPodを作成する主体によって状況に応じてPodの動作が異なるので、よく知って使う必要がある。
CronJobはJobを定期的に生成する。
殆どJobを1つの単位としては使わずにCronJobを作成して特定の時間に繰り返して実行する目的で使う。
複数のユースケースがありますが
毎日のデータのバックアップとか定期的なアップデートの確認、予約メールやSMSのメッセージを送信などの作業にも使える。