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

次の表は、シナリオの観点から、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 です。イメージを変更することもできます。

構成が完了したら、[タスク管理] ページの Kubernetes ジョブの [アクション] 列にある [1 回実行] をクリックできます。その後、次の図に示すように、schedulerx-shell-{JobId} という名前のポッドが目的のクラスタで起動します。
[タスク管理] ページに移動し、Kubernetes ジョブの [アクション] 列にある [履歴レコード] をクリックして、ポッドの操作ログを表示できます。
Python スクリプト
ポッドで Python スクリプトを実行する場合、イメージを手動でビルドする必要はありません。SchedulerX の [タスク管理] モジュールを使用して Kubernetes ジョブを作成するだけで済みます。Kubernetes ジョブを作成するときは、[タスクの種類] パラメーターを [K8s] に設定し、[リソース] パラメーターを [Python-Script] に設定する必要があります。Kubernetes ジョブのデフォルトイメージは Python です。イメージを変更することもできます。

構成が完了したら、[タスク管理] ページの Kubernetes ジョブの [アクション] 列にある [1 回実行] をクリックできます。その後、次の図に示すように、schedulerx-python-{JobId} という名前のポッドが目的のクラスタで起動します。
[タスク管理] ページに移動し、Kubernetes ジョブの [アクション] 列にある [履歴レコード] をクリックして、ポッドの操作ログを表示できます。
PHP スクリプト
ポッドで PHP スクリプトを実行する場合、イメージを手動でビルドする必要はありません。SchedulerX の [タスク管理] モジュールを使用して Kubernetes ジョブを作成するだけで済みます。Kubernetes ジョブを作成するときは、[タスクの種類] パラメーターを [K8s] に設定し、[リソース] パラメーターを [Php-Script] に設定する必要があります。Kubernetes ジョブのデフォルトイメージは php:7.4-cli です。イメージを変更することもできます。

構成が完了したら、[タスク管理] ページの Kubernetes ジョブの アクション列にある [1 回実行] をクリックできます。その後、次の図に示すように、schedulerx-php-{JobId} という名前のポッドが目的のクラスタで起動します。
[タスク管理] ページに移動し、Kubernetes ジョブの [アクション] 列にある [履歴レコード] をクリックして、ポッドの操作ログを表示できます。
Node.js スクリプト
ポッドで Node.js スクリプトを実行する場合、イメージを手動で作成する必要はありません。SchedulerX の [タスク管理] モジュールを使用して Kubernetes ジョブを作成するだけで済みます。Kubernetes ジョブを作成するときは、[タスクの種類] を [K8s] に設定し、[リソース] パラメーターを [Node.js-Script] に設定する必要があります。Kubernetes ジョブのデフォルトイメージは node:16 です。イメージを変更することもできます。

構成が完了したら、[タスク管理] ページの Kubernetes ジョブの [アクション] 列にある [1 回実行] をクリックできます。その後、次の図に示すように、schedulerx-node-{JobId} という名前のポッドが目的のクラスタで起動します。
[タスク管理] ページに移動し、Kubernetes ジョブの [アクション] 列にある [履歴レコード] をクリックして、ポッドの操作ログを表示できます。
Job-YAML
SchedulerX は、ネイティブの Kubernetes ジョブもサポートしています。ネイティブ Kubernetes ジョブを作成する場合は、[タスクの種類] パラメーターを [K8s] に設定し、[リソース] パラメーターを [Job-YAML] に設定する必要があります。

構成が完了したら、[タスク管理] ページの Kubernetes ジョブの [アクション] 列にある [1 回実行] をクリックできます。その後、次の図に示すように、ポッドとジョブが目的のクラスタで起動します。
[タスク管理] ページに移動し、Kubernetes ジョブの [アクション] 列にある [履歴レコード] をクリックして、ポッドの操作ログを表示できます。
SchedulerX を使用して Kubernetes ジョブを作成する場合、[リソース] パラメーターを [CronJob-YAML] に設定しないことをお勧めします。ポッドの履歴レコードと操作ログを収集する場合は、SchedulerX を使用してジョブをスケジュールする必要があります。
Pod-YAML
SchedulerX は、ネイティブの Kubernetes ポッドもサポートしています。SchedulerX を使用してネイティブ Kubernetes ポッドに Kubernetes ジョブを作成する場合は、[タスクの種類] パラメーターを [K8s] に設定し、[リソース] パラメーターを [Pod-YAML] に設定する必要があります。

構成が完了したら、[タスク管理] ページの Kubernetes ジョブの [アクション] 列にある [1 回実行] をクリックできます。その後、次の図に示すように、ネイティブ Kubernetes ポッドが目的の Kubernetes クラスタで起動します。
[タスク管理] ページに移動し、Kubernetes ジョブの [アクション] 列にある [履歴レコード] をクリックして、ポッドの操作ログを表示できます。
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 によって読み取られたジョブパラメーターのサンプルを示しています。

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

視覚的なジョブオーケストレーション
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 ジョブを効果的にオーケストレートするための直感的なビジュアルインターフェイスを提供します。
Argo と比較して、SchedulerX はより優れたユーザーエクスペリエンスを提供します。使いやすく、ジョブワークフローを視覚化します。これにより、次の図に示すように、ジョブの進捗状況を簡単に追跡し、ジョブがブロックされているステップを特定し、問題のトラブルシューティングを行うことができます。

アラートと監視
SchedulerX を使用してポッドとジョブをスケジュールする場合、組み込みのアラートと監視メカニズムをフルに活用できます。これにより、ジョブステータスを効果的に追跡し、例外をアラートできます。
SchedulerX は、ショートメッセージ、電話、メール、Webhook(DingTalk、WeCom、Lark)など、次のアラート通知方法をサポートしています。
SchedulerX は、障害時のアラートと実行タイムアウト時のアラートなど、次のアラートポリシーをサポートしています。
ロギング
SchedulerX を使用してポッドとジョブをスケジュールする場合、Simple Log Service などのログサービスを個別にアクティブ化する必要はありません。SchedulerX は、ポッドの操作ログを自動的に収集します。ポッドの実行に失敗した場合、SchedulerX コンソールに移動して障害の詳細を表示および分析し、問題を効果的にトラブルシューティングし、ポッドをデバッグできます。

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

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