IBM Cloud Blog

第17回『Kubernetesで業務ジョブどう管理していますか? Kubernetes Jobもあわせて管理IBM Workload Scheduler 』

記事をシェアする:

こんにちは。IBM Automation Technical Sales AIOps Evangelist岩品です。
ただ今回のトピックは AIOpsは関係ありません。もっと身近なKubernetes 環境でのジョブのお話をしたいと思います。

Kubernetes 環境における ジョブ

Kubernetes環境におけるジョブは、v1.8のリリース以来 長い間ベータのステータスにありましたが、2021年4月にリリースされた v1.21 でGAに昇格し、現在は 本番環境で活用できる段階にあります。OpenShiftですとv4.8のリリースからです。
長い間 Kubernetesでは提供されていた(いつもそこにいた)ので、ベータだったということに気づいていなかったかもしれないですね(私はそうでした)。
Kubernetes環境のジョブでは、 Job と CronJob が定義されています。

Job

Jobは DaemonSetや StatefulSetのようなコントローラーの一種です。
Job を定義すると、指定されたイメージからPodが作成され、指定された個数のPodの処理が正常終了するまで、処理を実行します。指定された個数のPodが終了する前に Podに問題が発生した場合には、Podが再作成され実行されます。
実行されるべき処理の数(.spec.completions) と、並行稼働が許される数(.spec.parallelism)を指定できますので、柔軟に並行処理を組むことが可能です。

Job 定義のサンプル

apiVersion: batch/v1
kind: Job
metadata:
  name: jobtest
spec:
  template:
    spec:
      containers:
      - name: jobtest
        image: perl:5.34.0
        command: ["perl",  "-Mbignum=bpi", "-wle", "print bpi(2000)"]
      restartPolicy: Never
  completions: 5
  parallelism: 3

上記 jobtestジョブの実行結果(並行度に従い 3つのPodが先に実行され、その後2つのPodが実行されている。5つのPodの処理が完了しJobが終了している)。

~ $ kubectl get job
NAME      COMPLETIONS   DURATION   AGE
jobtest   0/5           11s        11s
~ $ kubectl get pods
NAME            READY   STATUS      RESTARTS   AGE
jobtest-9k4kp   0/1     Completed   0          28s
jobtest-h4hjc   0/1     Completed   0          42s
jobtest-lw764   0/1     Completed   0          42s
jobtest-psx28   0/1     Completed   0          22s
jobtest-rvbkc   0/1     Completed   0          42s
~ $ kubectl get job -n jobtest
NAME      COMPLETIONS   DURATION   AGE
jobtest   5/5           31s        50s

CronJob

定期的に実行したいジョブのためには、CronJobが定義されています。名前の通り、cron の形式で指定した時間に Job定義が作成され、Jobを実行することが可能です。バックアップの実行や、メールの通知など定期的に実行が必要な処理を実装することに利用可能です。

5分ごとに実行されるCronjob 定義のサンプル

apiVersion: batch/v1
kind: CronJob
metadata:
  name: cronjobtest
spec:
  schedule: "*/5 * * * *"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: jobtest
            image: perl:5.34.0
            command: ["perl",  "-Mbignum=bpi", "-wle", "print bpi(2000)"]
          restartPolicy: OnFailure

上記crojobtestの実行結果(生成された Job のネーミングルールからも 5分おきに実行されていることが分かる)

~ $ kubectl get cronjob
NAME          SCHEDULE      SUSPEND   ACTIVE   LAST SCHEDULE   AGE
cronjobtest   */5 * * * *   False     0        2m55s           16m
~ $ kubectl get job
NAME                   COMPLETIONS   DURATION   AGE
cronjobtest-27719015   1/1           9s         13m
cronjobtest-27719020   1/1           9s         8m
cronjobtest-27719025   1/1           8s         3m

ジョブと業務カレンダー

KubernetesのJobやCronJobは、Kubernetes v1.8 の時代から beta ステータスとはいえ、長い間存在していますので、すでに活用されている方も多いのではないでしょうか?週末日曜のみに実行すべきジョブ、平日のみに実行すべきジョブなど、CronJobを利用すれば管理できますよね。
ただ、Kubernetesの世界では提供されないものがあります。業務カレンダーの概念です。
Kubernetes上で基幹的なアプリケーションも稼働するようになり、業務カレンダーとあわせてジョブを管理しないといけない業務もでてきています。平日(但し、祝日は除く)に実行すべきジョブであったり、月末締め日のタイミングで実行すべき業務ジョブもありますよね。
これらの業務カレンダーの概念に沿ってのジョブ実行は、従来型の環境ではジョブ・スケジューラーによって管理されてきました。
これらジョブ・スケジューラーが Kubernetes環境に対応していない場合には、シェルなどで Kubernetes Jobを投入 し、実行結果をポーリングするといった形で、対応してきた方もいるのではないでしょうか?

IBM Workload Scheduler

IBMにも IBM Workload Scheduler (IWS, 旧称 Tivoli Workload Scheduler, TWS) というジョブ・スケジューラー製品があります。30年以上の歴史を持ち、金融機関などミッション・クリティカルな環境においても十分な実績を持つ製品です。
IBM Workload Schedulerは、従来型のオンプレミスの環境をはじめ、クラウド環境などハイブリッド環境で稼働します。近年でも継続的に進化を続けており、Automation Hub https://www.yourautomationhub.io において、様々なクラウド製品との連携機能、統合機能も提供しています。
最新リリースは、2022年3月にリリースされた10.1 ですが、2019年3月にリリースされた1つ前のリリース IBM Workload Scheduler v9.5から Kubernetes Job管理の機能も提供を開始しています。

IBM Workload Scheduler のアーキテクチャ

IBM Workload Scheduler の基本的なアーキテクチャを見てみましょう。
ジョブの情報を集中管理するIBM Workload Scheduler Serverがあります。これは従来の基幹システムを管理しているものと同じです。ジョブの情報を保管する IWS DB、ユーザー向けに情報を提供する Dynamic Workload Console 、各ジョブの実行を管理する Master Domain Managerです。
従来型のVM環境ではジョブを実行するために、各OS内に IWS Agentが稼働し、Jobの実行を管理していました。
Kubernetes環境では、IBM Workload Schedulerの Master Domain Manager と連携するための IWS Agent Pod を OperatorやHelmでKubernetesクラスターに導入します。このIWS Agent Podが Master Domain Managerと連携し、定義されたタイミングで Kubernetesジョブをキックし実行します。

IBM Workload Scheduler での Kubernetesジョブ定義

IWSが対応可能なジョブ定義の1つとして、Kubernetes バッチ・ジョブがあります。これを利用して Kubernetesのジョブ定義を定義します。
IBM Workload Scheduler の定義には、Kubernetesジョブそのものの定義以外に、どのクラスター環境でジョブを実行するか、ジョブが失敗した場合にジョブの再実行をどうするか、ジョブ・ストリームの実行をどうするかなどについて、定義可能です。
また、ジョブの実行は、従来と同様、営業日カレンダーや 業務カレンダーに基づいて、スケジュールすることが可能です。

IBM Workload Scheduler で Kubernetesジョブを管理するメリット

IBM Workload Scheduler で Kubernetes ジョブを管理するメリットはなんでしょうか?
まず、Kubernetes外の他のジョブと合わせ、実行結果を管理・把握することが可能ですし、必要に応じてリカバリー処理を行うなど、IWSが提供する 高度なジョブ管理機能も利用可能になります。
また、従来のジョブ・スケジューラーで実装してきたような 複雑な依存関係を持つジョブを Kubernetesでも組むことが可能になります。IBM Workload Schedulerは、ハイブリッド環境で稼働しますので Kubernetes外のデータベース処理などと連動したジョブを組むといったことも可能です。
諸々の業務バッチ処理が、Kubernetesも含め、一元管理できるという点が なにより一番のメリットかもしれません。

IBM Workload Scheduler をすでにご利用のお客様は、ぜひ、クラウド・ネイティブ環境においても、継続的に進化し続けている IBM Workload Schedulerを活用してジョブ管理を検討いただければと思います。
ライセンス体系も進化し、従来の管理対象数のライセンス体系に加え、ジョブの実行数に応じたライセンス体系もご提供可能となっています。
これまで利用してきたジョブ・スケジューラーが Kubernetesに対応しそうもないなどお悩みの方は、新規環境から IBM Workload Schedulerの適用も検討してみてはいかがでしょうか?

<参考資料>

岩品 友徳

岩品 友徳
日本アイ・ビー・エム株式会社
テクノロジー事業本部
オートメーション・テクニカル・セールス
AIOpsエバンジェリスト

江川 聡子

江川 聡子
日本アイ・ビー・エム株式会社
テクノロジー事業本部
オートメーション・テクニカル・セールス

 

More IBM Cloud Blog stories

第20回『デジタルサービス・プラットフォーム(DSP)におけるDevSecOpsの価値』

IBM Cloud Blog, IBM Cloud News, IBM Partner Ecosystem

こんにちは。日本IBMでアプリケーション・アーキテクトをしている土井です。 今回は、OpenShiftを使ってアプリケーションのためのプラットフォームを作るとはどういうことか?とOpenShiftプラットフォーム機能の一 ...続きを読む


クラウドネィティブにおけるサービスメッシュとカオスエンジニアリングについて

IBM Cloud Blog, IBM Cloud News, IBM Partner Ecosystem

こんにちは。IBM Cloud Platform Technical Sales坂田です。 クラウドネィティブ時代のシステム信頼性を向上させる新しい手法であるカオスエンジニアリング及びマイクロサービスの連携管理基盤である ...続きを読む


店舗のDX・集客強化に最適。テイクアウトと来店予約アプリ「ec-design」のご紹介

IBM Cloud Blog, IBM Partner Ecosystem, 顧客体験の最適化

昨今、新型コロナウィルスの感染拡大にともなう外食自粛傾向から、飲食店の料理や食品スーパーの総菜を購入し自宅で食べる「中食」や、テイクアウトや宅配サービスへのニーズが高まっています。 今回は、飲食店様向けにテイクアウト機能 ...続きを読む