がじぇ

お金と家電とプログラミングのブログ

KubernetesのJobとDaemonSetについて

こんにちわ

がじぇったー (@hackmylife7) | Twitter


です。ガジェット情報をいち早くツイートすることを生きがいにしているのでよかったらフォローください。



今日はJobとDaemonSetについてです。


f:id:gadgeterkun:20190728180134j:plain

TL;DR(要約)

  • JobはKubernetesクラスタ上で実行されるバッチのイメージ
  • DaemonSetはDatadogやFluentdなどどのNodeでも動かしたい用途で使うCotroller機能

Job

いわゆるk8sクラスタ上でバッチ処理を実行したいときに用いるCotrollerサービスがJobになります。

1つ以上のPodを作成し、指定された数のPodが正常に終了するように管理します。

例えば、顧客から受け取ったメールを3時間間隔でs3にあげたり、外部のAPIを一定の間隔で叩きたいときに使えます。

考え方はVMのCronjobと何ら考えは変わりません。

Jobには以下の種類があります

  • Non-parallel jobs
  • Parallel jobs with a fixed completion count
  • Parallel jobs with a work queue
  • Cron jobs

Non-parallel jobs

非並列的なジョブであり、1つのPodのみを作成し(Podが正常に終了しなかった場合は再作成され)、Podが正常に終了したときに完了するジョブ。

Parallel jobs with a fixed completion count

完了したPodをカウントする並列ジョブで、一定数のPodが正常に終了したときに完了するジョブ。
Completionsの項目数をマニフェストファイルで使用して使用します

Parallel jobs with a work queue

複数の並列JobをQueueで実行します

図解


上記3つの種類を下手くそな絵で表現するとこんな感じ


f:id:gadgeterkun:20190728174852p:plain


Cronjob

前述の3つの種類はJobの実行の仕方、という点で3つにわかれていたが、Cronjobは
時間指定で動かすことができる前述のJobとは少し異なる


前述の画像に書き出すとCronJobのイメージはこんなかんじ
f:id:gadgeterkun:20190728175105p:plain


Cronjobが時間指定でJobを動かすイメージ
繰り返すことも可能


マニフェストファイルのイメージはこんな感じ

# cronjob.yaml
apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: hello
spec:
  schedule: "*/1 * * * *"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: hello
            image: busybox
            args:
            - /bin/sh
            - -c
            - date; echo "Hello, World!"
          restartPolicy: OnFailure


DaemonSet

どのNodeでも動かしたいPodがいる際に使う。

具体的なMWをイメージするとわかりやすいが、DatadogやFluentd等などのモニタリング、ログ収集サービスで使われる






参考(Kubernetesの最強参考書)

Kubernetes完全ガイド (impress top gear)

Kubernetes完全ガイド (impress top gear)


Kubernetesの他の記事へは下記の一覧から飛べるようにしているので参照ください。

gadgeterkun.hatenablog.com