すべてのプロダクト
Search
ドキュメントセンター

Microservices Engine:Kubernetes ジョブ

最終更新日:May 10, 2025

このトピックでは、Kubernetes クラスタに SchedulerX エージェントをデプロイして、Kubernetes ネイティブのポッドまたはジョブを定期的にスケジュールし、ステータス監視、アラート、ログ収集、および診断を実行する方法について説明します。

概要

次の図は、Kubernetes ジョブを実行するワークフローを示しています。

image

次の表は、シナリオの観点から、Kubernetes ジョブとスクリプトジョブを比較しています。

シナリオ

スクリプトジョブ

Kubernetes ジョブ

スクリプトはまれにスケジュールされ、大量のリソースが消費されます。

推奨されません。SchedulerX エージェントが子プロセスをフォークしてスクリプトを実行するたびに、エージェントがデプロイされているマシンのリソースが占有され、マシンが過負荷になる可能性があります。

推奨されます。Kubernetes 環境のロードバランシングポリシーに基づいて、SchedulerX エージェントがスクリプトを実行するたびにポッドが追加されます。これにより、高い安定性が確保されます。

スクリプトは頻繁にスケジュールされ、少量のリソースが消費されます。

推奨されます。SchedulerX エージェントは、子プロセスをフォークしてスクリプトを実行します。これにより、実行プロセスが高速化され、リソース使用率が向上します。

推奨されません。イメージをダウンロードしてイメージを使用してポッドを起動するプロセスには時間がかかります。API サーバーを頻繁に呼び出してポッドまたはジョブをスケジュールすると、API サーバーのトラフィックがスロットルされる可能性があります。

依存関係をデプロイする必要があります。

依存関係は、事前に Elastic Compute Service(ECS)インスタンスに手動でデプロイされます。

基本イメージがビルドされます。依存関係が変更された場合は、基本イメージを再ビルドする必要があります。

前提条件

SchedulerX が目的の Kubernetes クラスタに接続されていること。詳細については、「Kubernetes クラスタに SchedulerX をデプロイする」をご参照ください。

Kubernetes ジョブを作成する

Shell スクリプト

ポッドで Shell スクリプトを実行する場合、イメージを手動でビルドする必要はありません。SchedulerX の [タスク管理] モジュールを使用して Kubernetes ジョブを作成するだけで済みます。Kubernetes ジョブを作成するときは、[タスクの種類] パラメーターを [K8s] に設定し、[リソース] パラメーターを [Shell-Script] に設定する必要があります。Kubernetes ジョブのデフォルトイメージは busybox です。イメージを変更することもできます。

1

構成が完了したら、[タスク管理] ページの Kubernetes ジョブの [アクション] 列にある [1 回実行] をクリックできます。その後、次の図に示すように、schedulerx-shell-{JobId} という名前のポッドが目的のクラスタで起動します。7

[タスク管理] ページに移動し、Kubernetes ジョブの [アクション] 列にある [履歴レコード] をクリックして、ポッドの操作ログを表示できます。7

Python スクリプト

ポッドで Python スクリプトを実行する場合、イメージを手動でビルドする必要はありません。SchedulerX の [タスク管理] モジュールを使用して Kubernetes ジョブを作成するだけで済みます。Kubernetes ジョブを作成するときは、[タスクの種類] パラメーターを [K8s] に設定し、[リソース] パラメーターを [Python-Script] に設定する必要があります。Kubernetes ジョブのデフォルトイメージは Python です。イメージを変更することもできます。

2

構成が完了したら、[タスク管理] ページの Kubernetes ジョブの [アクション] 列にある [1 回実行] をクリックできます。その後、次の図に示すように、schedulerx-python-{JobId} という名前のポッドが目的のクラスタで起動します。7

[タスク管理] ページに移動し、Kubernetes ジョブの [アクション] 列にある [履歴レコード] をクリックして、ポッドの操作ログを表示できます。8

PHP スクリプト

ポッドで PHP スクリプトを実行する場合、イメージを手動でビルドする必要はありません。SchedulerX の [タスク管理] モジュールを使用して Kubernetes ジョブを作成するだけで済みます。Kubernetes ジョブを作成するときは、[タスクの種類] パラメーターを [K8s] に設定し、[リソース] パラメーターを [Php-Script] に設定する必要があります。Kubernetes ジョブのデフォルトイメージは php:7.4-cli です。イメージを変更することもできます。

3

構成が完了したら、[タスク管理] ページの Kubernetes ジョブの アクション列にある [1 回実行] をクリックできます。その後、次の図に示すように、schedulerx-php-{JobId} という名前のポッドが目的のクラスタで起動します。12

[タスク管理] ページに移動し、Kubernetes ジョブの [アクション] 列にある [履歴レコード] をクリックして、ポッドの操作ログを表示できます。8

Node.js スクリプト

ポッドで Node.js スクリプトを実行する場合、イメージを手動で作成する必要はありません。SchedulerX の [タスク管理] モジュールを使用して Kubernetes ジョブを作成するだけで済みます。Kubernetes ジョブを作成するときは、[タスクの種類][K8s] に設定し、[リソース] パラメーターを [Node.js-Script] に設定する必要があります。Kubernetes ジョブのデフォルトイメージは node:16 です。イメージを変更することもできます。

4

構成が完了したら、[タスク管理] ページの Kubernetes ジョブの [アクション] 列にある [1 回実行] をクリックできます。その後、次の図に示すように、schedulerx-node-{JobId} という名前のポッドが目的のクラスタで起動します。8

[タスク管理] ページに移動し、Kubernetes ジョブの [アクション] 列にある [履歴レコード] をクリックして、ポッドの操作ログを表示できます。8

Job-YAML

SchedulerX は、ネイティブの Kubernetes ジョブもサポートしています。ネイティブ Kubernetes ジョブを作成する場合は、[タスクの種類] パラメーターを [K8s] に設定し、[リソース] パラメーターを [Job-YAML] に設定する必要があります。

5

構成が完了したら、[タスク管理] ページの Kubernetes ジョブの [アクション] 列にある [1 回実行] をクリックできます。その後、次の図に示すように、ポッドとジョブが目的のクラスタで起動します。8

[タスク管理] ページに移動し、Kubernetes ジョブの [アクション] 列にある [履歴レコード] をクリックして、ポッドの操作ログを表示できます。8

重要

SchedulerX を使用して Kubernetes ジョブを作成する場合、[リソース] パラメーターを [CronJob-YAML] に設定しないことをお勧めします。ポッドの履歴レコードと操作ログを収集する場合は、SchedulerX を使用してジョブをスケジュールする必要があります。

Pod-YAML

SchedulerX は、ネイティブの Kubernetes ポッドもサポートしています。SchedulerX を使用してネイティブ Kubernetes ポッドに Kubernetes ジョブを作成する場合は、[タスクの種類] パラメーターを [K8s] に設定し、[リソース] パラメーターを [Pod-YAML] に設定する必要があります。

6

構成が完了したら、[タスク管理] ページの Kubernetes ジョブの [アクション] 列にある [1 回実行] をクリックできます。その後、次の図に示すように、ネイティブ Kubernetes ポッドが目的の Kubernetes クラスタで起動します。9

[タスク管理] ページに移動し、Kubernetes ジョブの [アクション] 列にある [履歴レコード] をクリックして、ポッドの操作ログを表示できます。9

重要

Web アプリケーションを実行するポッドなど、起動したら停止することのない、ライフサイクルの長い Kubernetes ポッドは起動しないことをお勧めします。ポッドが繰り返し再起動されないようにするには、再起動ポリシーを Never に設定する必要があります。

環境変数に基づいてジョブパラメーターを取得する

SchedulerX は、環境変数に事前構成されたジョブパラメーターをサポートしています。この場合、スクリプトジョブ、ポッド、ネイティブ Kubernetes ジョブのいずれであっても、SchedulerX は環境変数からジョブパラメーターを読み取ることができ、ジョブの作成が簡素化されます。

説明

Schedulerx-Agent のバージョンは 1.10.14 以降である必要があります。

キー

説明

SCHEDULERX_JOB_NAME

ジョブの名前。

SCHEDULERX_SCHEDULE_TIMESTAMP

ジョブがスケジュールされたときのタイムスタンプ。

SCHEDULERX_DATA_TIMESTAMP

ジョブデータが処理されたときのタイムスタンプ。

SCHEDULERX_WORKFLOW_INSTANCE_ID

ワークフローの ID。

SCHEDULERX_JOB_PARAMETERS

ジョブのパラメーター。

SCHEDULERX_INSTANCE_PARAMETERS

ジョブインスタンスのパラメーター。

SCHEDULERX_JOB_SHARDING_PARAMETER

ジョブのシャーディングパラメーター。

次の図は、SchedulerX によって読み取られたジョブパラメーターのサンプルを示しています。

image

メリット

ネイティブの Kubernetes ジョブと比較して、SchedulerX を使用して作成された Kubernetes ジョブには、次のメリットがあります。

オンラインスクリプト編集

ほとんどの場合、Kubernetes ジョブは、データ処理と O&M に使用されるスクリプトジョブです。ネイティブの Kubernetes ジョブでは、スクリプトをイメージにパッケージ化し、YAML ファイルでスクリプトコマンドを構成する必要があります。したがって、スクリプトを変更するたびに、イメージを再ビルドしてリリースする必要があり、これは面倒なプロセスです。例:

apiVersion: batch/v1
kind: Job
metadata:
  name: hello
spec:
  template:
    spec:
      containers:
      - name: hello
        image: busybox
        command: ["sh",  "/root/hello.sh"] // シェルコマンド
      restartPolicy: Never
  backoffLimit: 4

SchedulerX を使用して Kubernetes ジョブを管理する場合、イメージを再ビルドしたり、YAML ファイルでスクリプトをコンパイルしたりする必要はありません。SchedulerX コンソールは、Shell、Python、PHP、および Node.js プログラミング言語でのスクリプトのオンライン編集をサポートしています。編集後、SchedulerX はポッドモードで新しいバージョンのスクリプトを自動的に実行します。スクリプトを更新する場合は、SchedulerX コンソールでスクリプトを変更して保存するだけで済みます。次回 SchedulerX が Kubernetes ジョブをスケジュールすると、変更が自動的に有効になります。これにより、Kubernetes ジョブの開発と管理の効率が大幅に向上します。さらに、SchedulerX によって提供される Kubernetes ジョブ機能は、コンテナの詳細を完全に隠します。コンテナサービスに慣れていない開発者にとって、この機能は間違いなく開発効率を向上させ、大きな利便性をもたらします。

例:

image

視覚的なジョブオーケストレーション

Kubernetes エコシステムでは、Argo は一般的なワークフローオーケストレーションツールです。例:

# The following workflow executes a diamond workflow
# 
#   A
#  / \
# B   C
#  \ /
#   D
apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
  generateName: dag-diamond-
spec:
  entrypoint: diamond
  templates:
  - name: diamond
    dag:
      tasks:
      - name: A
        template: echo
        arguments:
          parameters: [{name: message, value: A}]
      - name: B
        depends: "A"
        template: echo
        arguments:
          parameters: [{name: message, value: B}]
      - name: C
        depends: "A"
        template: echo
        arguments:
          parameters: [{name: message, value: C}]
      - name: D
        depends: "B && C"
        template: echo
        arguments:
          parameters: [{name: message, value: D}]

  - name: echo
    inputs:
      parameters:
      - name: message
    container:
      image: alpine:3.7
      command: [echo, "{{inputs.parameters.message}}"] // シェルコマンド

SchedulerX のワークフロー機能は、次の図に示すように、ドラッグアンドドロップによって Kubernetes ジョブを効果的にオーケストレートするための直感的なビジュアルインターフェイスを提供します。

imageArgo と比較して、SchedulerX はより優れたユーザーエクスペリエンスを提供します。使いやすく、ジョブワークフローを視覚化します。これにより、次の図に示すように、ジョブの進捗状況を簡単に追跡し、ジョブがブロックされているステップを特定し、問題のトラブルシューティングを行うことができます。

image

アラートと監視

SchedulerX を使用してポッドとジョブをスケジュールする場合、組み込みのアラートと監視メカニズムをフルに活用できます。これにより、ジョブステータスを効果的に追跡し、例外をアラートできます。

  • SchedulerX は、ショートメッセージ、電話、メール、Webhook(DingTalk、WeCom、Lark)など、次のアラート通知方法をサポートしています。

  • SchedulerX は、障害時のアラートと実行タイムアウト時のアラートなど、次のアラートポリシーをサポートしています。

ロギング

SchedulerX を使用してポッドとジョブをスケジュールする場合、Simple Log Service などのログサービスを個別にアクティブ化する必要はありません。SchedulerX は、ポッドの操作ログを自動的に収集します。ポッドの実行に失敗した場合、SchedulerX コンソールに移動して障害の詳細を表示および分析し、問題を効果的にトラブルシューティングし、ポッドをデバッグできます。

image

監視ダッシュボード

SchedulerX を使用してポッドとジョブをスケジュールする場合、Managed Service for Prometheus を個別にアクティブ化する必要なく、組み込みのジョブ監視機能を表示できます。

image

オンラインジョブとオフラインジョブの混在デプロイ

注文処理ジョブなど、高いリアルタイムパフォーマンスを必要とするオンラインスケジュールジョブがある場合は、他のオンラインジョブと同じプロセスでメソッドを呼び出して、ジョブを効果的に処理できます。これにより、オンラインスケジュールジョブをオンラインビジネスにシームレスに統合できます。財務レポート生成ジョブなど、リアルタイムパフォーマンスは低いが大量のリソースを消費するオフラインスケジュールジョブがある場合は、スクリプトをコンパイルし、個別のポッドを起動してジョブを実行できます。SchedulerX は Java ジョブと Kubernetes ジョブをサポートし、オンラインジョブとオフラインジョブの混在デプロイとスケジューリングを可能にし、多様なビジネス要件を満たす柔軟なソリューションを提供します。