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

SchedulerX:Kubernetes ジョブ

最終更新日:Apr 26, 2025

このトピックでは、kubernetesschedulerx-agent をインストールして、ネイティブ Kubernetes ポッドまたはジョブのスケジュールされたスケジューリング(ステータス監視、エラー報告、ログ収集、診断など)を有効にする方法について説明します。

概要

次の図は、Kubernetes ジョブのジョブスケジューリングの動作原理を示しています。

image

次の表は、さまざまなシナリオにおける Kubernetes ジョブとスクリプトジョブを比較したものです。

シナリオ

スクリプトジョブ

Kubernetes ジョブ

スクリプトのスケジューリングはまれであり、実行中に大量のリソースを消費します。

推奨されません。子プロセスがスクリプトを実行するためにフォークされるたびに、エージェントのホストマシン上のリソースが消費され、システム負荷が最大になるリスクがあります。

推奨されます。 Kubernetes の負荷分散ポリシーを活用することで、各スクリプトは動的にプロビジョニングされたポッドで実行され、高い安定性が確保されます。

スクリプトは頻繁に実行され、少量のリソースを消費します。

推奨されます。子プロセスをフォークしてスクリプトを実行すると、高速実行と高いリソース使用率が実現します。

推奨されません。イメージのプルとポッドの起動は比較的遅くなります。さらに、ポッドまたはジョブのスケジューリングのために API サーバーを頻繁に呼び出すと、API サーバーの速度制限が発生する可能性があります。

依存関係を構築します。

事前に 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 ジョブの Actions 列にある [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 アプリケーションを実行するポッドなど、ライフサイクルが長く、起動したら停止しないポッドは起動しないことをお勧めします。ポッドが繰り返し再起動されないようにするには、再起動ポリシーを 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 ファイルでスクリプトコマンドを構成する必要があります。そのため、スクリプトを変更するたびに、イメージを再構築してリリースする必要があり、これは面倒なプロセスです。例:

/* ネイティブ 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 は一般的なワークフローオーケストレーションツールです。例:

/* Argo ワークフローの YAML ファイルの例 */
# 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 ジョブをサポートし、オンラインジョブとオフラインジョブの混在デプロイとスケジューリングを可能にし、多様なビジネス要件を満たす柔軟なソリューションを提供します。