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

次の表は、さまざまなシナリオにおける Kubernetes ジョブとスクリプトジョブを比較したものです。
シナリオ | スクリプトジョブ | Kubernetes ジョブ |
スクリプトのスケジューリングはまれであり、実行中に大量のリソースを消費します。 | 推奨されません。子プロセスがスクリプトを実行するためにフォークされるたびに、エージェントのホストマシン上のリソースが消費され、システム負荷が最大になるリスクがあります。 | 推奨されます。 Kubernetes の負荷分散ポリシーを活用することで、各スクリプトは動的にプロビジョニングされたポッドで実行され、高い安定性が確保されます。 |
スクリプトは頻繁に実行され、少量のリソースを消費します。 | 推奨されます。子プロセスをフォークしてスクリプトを実行すると、高速実行と高いリソース使用率が実現します。 | 推奨されません。イメージのプルとポッドの起動は比較的遅くなります。さらに、ポッドまたはジョブのスケジューリングのために API サーバーを頻繁に呼び出すと、API サーバーの速度制限が発生する可能性があります。 |
依存関係を構築します。 | 事前に 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 ジョブの Actions 列にある [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 アプリケーションを実行するポッドなど、ライフサイクルが長く、起動したら停止しないポッドは起動しないことをお勧めします。ポッドが繰り返し再起動されないようにするには、再起動ポリシーを 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 ファイルでスクリプトコマンドを構成する必要があります。そのため、スクリプトを変更するたびに、イメージを再構築してリリースする必要があり、これは面倒なプロセスです。例:
/* ネイティブ 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 は一般的なワークフローオーケストレーションツールです。例:
/* 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 ジョブを効果的にオーケストレートするための直感的なビジュアルインターフェイスを提供します。
Argo と比較して、SchedulerX はより優れたユーザーエクスペリエンスを提供します。使いやすく、ジョブワークフローを視覚化します。これにより、次の図に示すように、ジョブの進捗状況を簡単に追跡し、ジョブがブロックされているステップを特定し、問題のトラブルシューティングを行うことができます。

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

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

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