LoginSignup
1
1

More than 3 years have passed since last update.

Kubernetes基礎(11):DaemonSet, Job, CronJobの詳細

Posted at

Overview

スクリーンショット 2020-07-14 14.20.44.png

1. DaemonSet

DaemonSet_detail1.png
DaemonSetにはSelectorとTemplateがあって、全てのNodeにTemplateに指定されている設定値通りにPodが作成されて、DaemonSetのSelectorとPodのLabelで接続が可能になる。
もしNodeのOSが違って、上記の図のようにLabelで区分して、ubuntuにはPodを作成したくない場合は
Templateの「nodeSelector:centos」を指定すると、ubuntuにはPodが生成されない。
DaemonSetは1つのNodeに1つを超えるPodを作ることは出来ないが指定したNodeにPodを作らないことはできる。
そして、特定のNodeにアクセスしたとき、そのNodeに繋がっているPodへアクセスする方法を多く使っている。
少しだけ細かく説明すると、NodeタイプのServiceを作成して「externalTrafficPolicy:Local」を指定すると、特定のNodeのPortにアクセスしたらこのtrafficは、Serviceへ行ってServiceが該当NodeのPodに接続させてくれるよく使われている方法であるが、
templateのhostPortを設定するだけでNodeのPortからPodへ直接接続できる方法もある。

【yaml】
templateの中にnodeSelectorを指定するとそのLabelが指定されているNodeのみPodが生成されて、指定しない場合は全てのNodeにPodが生成される。
containerの中のhostPortに18080を設定すると18080に入ってきたtrafficはそのPodの8080 Containerへ接続される。

DamonSet

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: daemonset-1
spec:
  selector:
    matchLabels:
      type: app
  template:
    metadata:
      labels:
        type: app
    spec:
      containers:
      - name: container
        image: <image file>
        ports:
        - containerPort: 8080
          hostPort: 18080

DamonSet-nodeSelector

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: daemonset-2
spec:
  selector:
    matchLabels:
      type: app
  template:
    metadata:
      labels:
        type: app
    spec:
      nodeSelector:
        os: centos
      containers:
      - name: container
        image: <image file>
        ports:
        - containerPort: 8080

2. Job

スクリーンショット 2020-07-14 14.19.15.png
Jobもtemplateとselectorがある。
templateは特定の作業だけ実行して終了となるPodを設定する。
selectorは直接作らなくてもJobが作成する。
templateは一般的に1つのPodを作成し、そのPodがタスクを完了すると、Jobも終了となるが、
上の図のように「Completions:6」を指定すると6つのPodを1つずつ順番に実行させて、全てのタスクが終了したらJobを終了させる方法もある。
そしてparallelismに2を指定すると、2つずつPodが生成され
「activeDeadlineSeconds:30」を指定すると、そのJobは30秒後に機能が停止され、実行されているすべてのPodは削除されて実行されていないPodも今後の実行ができなくなる
もし10秒かかる作業を作ったが、30秒になっても作業が終わらないとsystem hangになっている可能性が高く、その場合はPodを削除してresourceを返却して作業がこれ以上進まないように設定するときにactiveDeadlineSecondsを使う。

【yaml】
restartPolicy:Jobの場合はNaverまたはOnfailerを設定する。(必須)

Job-1

apiVersion: batch/v1
kind: Job
metadata:
  name: job-1
spec:
  template:
    spec:
      restartPolicy: Never
      containers:
      - name: container
        image: <image file>
        command: ["sh", "-c", "echo 'job start';sleep 20; echo 'job end'"]
        terminationGracePeriodSeconds: 0

Job-2

apiVersion: batch/v1
kind: Job
metadata:
  name: job-2
spec:
  completions: 6
  parallelism: 2
  activeDeadlineSeconds: 30
  template:
    spec:
      restartPolicy: Never
      containers:
      - name: container
        image: <image file>
        command: ["sh", "-c", "echo 'job start';sleep 20; echo 'job end'"]
        terminationGracePeriodSeconds: 0

3. CronJob

CronJob_detail.png
JobTemplateの設定通りにJobを作成する。
scheduleの設定通りに時間になったらJobを作成する。
上の図のFormatはよく使っているcron形式で、1分に1つのJobを作成する設定値である。
即ち1分間隔でJobが生成され、JobはPodを作ることになる。
※Suspendは、実行中のJobを一時停止させる機能

【yaml】
schdule와 concurrencyPolicy가 있으며 template은 Job을 만드는 내용을 지정한다

CronJob

apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: cron-job
spec:
  schedule: "*/1 * * * *"
  jobTemplate:
    spec:
      template:
        spec:
          restartPolicy: Never
          containers:
          - name: container
            image: <image file>
            command: ["sh", "-c", "echo 'job start';sleep 20; echo 'job end'"]
            terminationGracePeriodSeconds: 0

CronJob - ConcurrencyPolicy

apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: cron-job-2
spec:
  schedule: "20,21,22 * * * *"
  **concurrencyPolicy: Replace**
  jobTemplate:
    spec:
      template:
        spec:
          restartPolicy: Never
          containers:
          - name: container
            image: <image file>
            command: ["sh", "-c", "echo 'job start';sleep 140; echo 'job end'"]
            terminationGracePeriodSeconds: 0

cronjobDetail2.png
concurencyPolicyという機能があってAllow、Forbid、Replaceの3つのOptionがある。
指定しないとallowがデフォルトになる。
Allow
上の図のように1分間隔にscheduleを指定すると1分間隔でJobが作成されてPodが生成される。
2分になったら前のPodの状態とは関係なく、新しいJobとPodを作成する。
Forbid
上の図のようにForbidは1分のときJobとPodを作成したが、2分になってもPodが終了されていない場合はJobを作成せずにスキップする。
Podが終了するとすぐに次のscheduleのJobが作られる。
replace
replaceは1分のときに作成されたJobとPodが2分になってもPodが実行中であれば、新しいPodを作って既存のJobとつなぐ。
この場合は2分になっても新しいJobは作成されないが、新しいPodが生成されて既存のJobと接続される。
2分のときに作成したPodがschedule通りに終了したら3分の時に新しいJobとPodを作成する。
これらのOptionを使ってCronJobはJobをさらに細かくコントロールができる。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1