SchedulerX は、定期タスク、マルチ言語スクリプト、HTTP API をサポートします。また、ネイティブな Kubernetes ジョブおよび Pod のスケジューリングもサポートしています。本トピックでは、Kubernetes 環境に SchedulerX をデプロイする方法について説明します。
ユースケース
SchedulerX を使用して Kubernetes ジョブをスケジューリングすると、以下のメリットがあります。
スクリプト Pod のオンライン編集
Kubernetes ジョブは、データ処理や O&M シナリオでよく使用され、通常はスクリプトとして実装されます。ネイティブな方法では、スクリプトをイメージにパッケージ化し、YAML ファイルにスクリプトコマンドを設定する必要があります。スクリプトを変更するには、イメージを再ビルドして再デプロイしなければなりません。以下に例を示します。
SchedulerX を使用すると、イメージのビルドや YAML ファイルの記述が不要になり、開発効率が向上します。MSE SchedulerX コンソールで直接スクリプト(Shell、Python、PHP、Node.js)を編集でき、SchedulerX が自動的にそれらを Pod として実行します。スクリプトの変更は、次のスケジュール実行時に反映されます。また、K8s タスクを使用することで、コンテナ技術の詳細を理解しなくても利用できます。
ビジュアルワークフローのオーケストレーション
Kubernetes でのワークフローオーケストレーションには、一般的に Argo が使用されます。以下の例をご参照ください。
SchedulerX を使用すると、ドラッグ&ドロップによるビジュアル UI で K8s タスクのオーケストレーションが可能となり、従来のコードベースのソリューションよりも便利です。ビジュアルワークフローグラフにより、ランタイムのボトルネックを迅速に特定でき、O&M 効率を向上させることができます。
アラートとモニタリング
SchedulerX で Pod やジョブをスケジューリングする際、組み込みのモニタリングとアラート機能を利用できます。
-
サポートされるアラートチャンネル:SMS、電話、メール、Webhook(DingTalk、WeCom、Lark)
-
サポートされるアラートポリシー:失敗時のアラート、実行タイムアウト時のアラート
ログサービス
SchedulerX は、スケジューリングした Pod およびジョブのログを自動収集するため、別途ログサービスを用意する必要がありません。Pod の実行に失敗した場合は、MSE SchedulerX コンソールで直接トラブルシューティングが可能です。
モニタリングダッシュボード
SchedulerX の組み込みモニタリングダッシュボードにより、タスクのリアルタイムモニタリングが可能です。
オンライン・オフラインタスクのハイブリッドデプロイ
SchedulerX は、Java および K8s タスクタイプの両方において、オンラインおよびオフラインの定期タスクをハイブリッドでデプロイおよびスケジューリングできます。ビジネスアプリケーションには通常、複数の定期タスクが含まれます。頻繁に実行される定期タスクの場合は、ビジネスアプリケーションと同じプロセスで実行できます。ただし、インプロセスでタスクを実行すると、オンラインアプリケーションの CPU やメモリを消費し、オンラインワークロードとの隔離が困難になります。そのため、リソースを多く消費するが実行頻度が低いタスク(たとえば、1 時間に 1 回または 1 日に 1 回など)の場合は、別途 Pod を追加してタスクを実行することを推奨します。これにより、元のオンラインアプリケーションとは異なるプロセスでタスクを実行できます。
方法 1:デプロイメントを使用したデプロイ
Java 以外のアプリケーションの場合、schedulerx-agent.yaml ファイルをデプロイメントとしてデプロイできます。エージェントはスタンドアロンの Pod として実行されます。ワークフローとアーキテクチャを次の図に示します。

前提条件
-
Container Service for Kubernetes (ACK) クラスターまたは自己管理型 Kubernetes クラスターを作成済みである必要があります。詳細については、「Kubernetes クラスターの作成」をご参照ください。
-
[タスクスケジューリング] を有効化しました。
-
MSE SchedulerX コンソール で Kubernetes アプリケーションを作成済みである必要があります。詳細については、「アプリケーションの作成」をご参照ください。
アプリケーションの作成 ダイアログボックスで、アプリケーションタイプ を Kubernetes アプリケーション に設定し、バージョン を Professional Edition に設定します。
ステップ 1:サービスアカウントの構成
SchedulerX K8s タスクでは、認証および権限付与のためにサービスアカウントが必要です。デフォルトでは、タスクは対象名前空間内の schedulerx サービスアカウントで実行されます。
Kubernetes クラスター内で、Pod またはジョブをスケジューリングする各名前空間に対して、schedulerx-serviceaccount.yaml 構成を適用する必要があります。以下のサンプル YAML には、必要なロールおよびバインディングが含まれています。
複数の名前空間にわたってタスクをスケジューリングする必要がある場合は、ClusterRole および ClusterRoleBinding を使用します。
ステップ 2:schedulerx-agent.yaml のインストール
以下は schedulerx-agent.yaml ファイルの構成です。
SchedulerX エージェントイメージの変数
|
アーキテクチャ |
リージョン |
説明 |
|
X86_64 |
中国本土 |
schedulerx-registry.cn-hangzhou.cr.aliyuncs.com/schedulerx2/agent:latest-amd64 |
|
中国本土外 |
schedulerx-registry.ap-southeast-1.cr.aliyuncs.com/schedulerx2/agent:latest-amd64 |
|
|
ARM64 |
中国本土 |
schedulerx-registry.cn-hangzhou.cr.aliyuncs.com/schedulerx2/agent:latest-arm64 |
|
中国本土外 |
schedulerx-registry.ap-southeast-1.cr.aliyuncs.com/schedulerx2/agent:latest-arm64 |
SchedulerX エージェント環境変数
|
パラメーター |
説明 |
|
${SCHEDULERX_ENDPOINT} |
アプリケーションがデプロイされているリージョンに対応するエンドポイント。例:addr-sh-internal.edas.aliyun.com。詳細については、「エンドポイント一覧」をご参照ください。 |
|
${SCHEDULERX_NAMESPACE} |
名前空間 ID。MSE SchedulerX コンソールの Namespaces ページで確認できます。 |
|
${SCHEDULERX_GROUPID} |
GroupId(アプリケーション ID)。MSE SchedulerX コンソールの アプリケーション管理 ページで確認できます。 |
|
${SCHEDULERX_APPKEY} |
AppKey(アプリケーションキー)。MSE SchedulerX コンソールの アプリケーション管理 ページで確認できます。 |
デプロイメントが完了すると、MSE SchedulerX コンソールの アプリケーション管理 ページでインスタンスを確認できます。インスタンスが表示されている場合、エージェントが正常に接続されたことを示します。
方法 2:Helm チャートを使用した SchedulerX のデプロイ
前提条件
-
Container Service for Kubernetes (ACK) クラスターまたは自己管理型 Kubernetes クラスターを作成済みである必要があります。詳細については、「Kubernetes クラスターの作成」をご参照ください。
-
タスクスケジューリングを有効化しました。
-
MSE SchedulerX コンソール で Kubernetes アプリケーション タイプのアプリケーションを作成済みである必要があります。詳細については、「アプリケーションの作成」をご参照ください。
-
Helm をインストール 済みである必要があります。
ステップ 1:SchedulerX Helm チャートのダウンロード
次のコマンドを実行して、SchedulerX Helm チャートをダウンロードします。
wget https://schedulerx2.oss-cn-hangzhou.aliyuncs.com/helm/schedulerxchart-2.0.0.tgz
ステップ 2:SchedulerX Helm チャートのインストール
-
タスクスケジューリングからアプリケーションアクセスパラメーターを取得します。
-
MSE SchedulerX コンソール にログインします。
-
上部ナビゲーションバーでリージョンを選択します。
-
(このステップは次のステップに統合されています。)
-
アプリケーション管理 ページで、Actions 列の アクセス構成 をクリックします。アクセス構成 ページの左上隅で、k8s を選択します。
-
-
次のインストールコマンドを実行します。
説明-
インストールコマンド内のアクセスパラメーターを、ご利用のアプリケーションのものに置き換えてください。
-
アクセス構成のイメージアドレスは、デフォルトで公開 X86_64 イメージです。クラスターノードのリージョンおよびアーキテクチャに一致するイメージアドレスを選択してください。
helm install schedulerxchart schedulerxchart-2.0.0.tgz \ --set SCHEDULERX_ENDPOINT=<your_endpoint>\ ,SCHEDULERX_NAMESPACE=<your_namespace_id>\ ,SCHEDULERX_GROUPID=<your_group_id>\ ,SCHEDULERX_APPKEY=****\ ,SCHEDULERX_AGENT_IMAGE=schedulerx-registry.cn-hangzhou.cr.aliyuncs.com/schedulerx2/agent:latest-amd64インストール後、次の出力が表示されます。
NAME: schedulerxchart LAST DEPLOYED: xxx NAMESPACE: default STATUS: deployed REVISION: 1 TEST SUITE: NoneSchedulerX エージェントイメージの変数
アーキテクチャ
リージョン
説明
X86_64
中国本土
schedulerx-registry.cn-hangzhou.cr.aliyuncs.com/schedulerx2/agent:latest-amd64
中国本土外
schedulerx-registry.ap-southeast-1.cr.aliyuncs.com/schedulerx2/agent:latest-amd64
ARM64
中国本土
schedulerx-registry.cn-hangzhou.cr.aliyuncs.com/schedulerx2/agent:latest-arm64
中国本土外
schedulerx-registry.ap-southeast-1.cr.aliyuncs.com/schedulerx2/agent:latest-arm64
SchedulerX エージェント環境変数
パラメーター
説明
${SCHEDULERX_ENDPOINT}
アプリケーションがデプロイされているリージョンに対応するエンドポイント。例:addr-sh-internal.edas.aliyun.com。詳細については、「エンドポイント一覧」をご参照ください。
${SCHEDULERX_NAMESPACE}
名前空間 ID。MSE SchedulerX コンソールの Namespaces ページで確認できます。
${SCHEDULERX_GROUPID}
GroupId(アプリケーション ID)。MSE SchedulerX コンソールの アプリケーション管理 ページで確認できます。
${SCHEDULERX_APPKEY}
AppKey(アプリケーションキー)。MSE SchedulerX コンソールの アプリケーション管理 ページで確認できます。
SCHEDULERX_AGENT_IMAGE
イメージアドレス。
インストールが完了すると、MSE SchedulerX コンソールでインスタンスを確認できます。
-
方法 3:Java SDK を使用した SchedulerX のデプロイ
アプリケーションが Java アプリケーションであり、K8s タスクに加えて Java プログラムもスケジューリングする必要がある場合は、Java SDK を使用してデプロイします。SchedulerX は、ご利用のオンラインアプリケーションと同じプロセスで実行されます。ワークフローとアーキテクチャを次の図に示します。
前提条件
-
Kubernetes クラスター (Container Service for Kubernetes (ACK) クラスターまたは自己管理型 Kubernetes クラスター) を作成します。詳細については、「Kubernetes クラスターを作成する」をご参照ください。
-
タスクスケジューリングを有効化しました。
-
MSE SchedulerX コンソールで、Kubernetes アプリケーションタイプのアプリケーションを作成します。詳細については、「アプリケーションを作成する」をご参照ください。
SchedulerX への接続
SDK 統合の詳細については、「Spring Boot アプリケーションを SchedulerX に接続する」をご参照ください。
K8s タスクを使用するには、以下の例のように schedulerx-plugin-kubernetes 依存関係を追加する必要があります。
schedulerx2.version には最新のクライアントバージョンを使用してください。詳細については、「リリースノート」をご参照ください。
<dependency>
<groupId>com.aliyun.schedulerx</groupId>
<artifactId>schedulerx2-spring-boot-starter</artifactId>
<version>${schedulerx2.version}</version>
</dependency>
<dependency>
<groupId>com.aliyun.schedulerx</groupId>
<artifactId>schedulerx2-plugin-kubernetes</artifactId>
<version>${schedulerx2-plugin-kubernetes.version}</version>
</dependency>
次のステップ:K8s タスクの作成
以下のスクリプトを実行するには、タスク管理ページで K8s タスクを作成します。詳細については、「タスク管理」をご参照ください。
Shell スクリプト
Pod 内で Shell スクリプトを実行するには、タスク管理 ページで K8s タスクを作成します。リソースタイプ を Shell-Script に設定し、デフォルトの busybox イメージを使用するか、カスタムイメージを指定します。スクリプトエディタで、echo "Hello, World!" のように直接 Shell コマンドを記述できます。
[一度だけ実行] をクリックします。Kubernetes クラスター内で、schedulerx-shell-{JobId} という名前の Pod が起動します。
# kubectl get pod | grep schedulerx
schedulerx-agent-xxx 1/1 Running 0 19h
schedulerx-shell-xxx 0/1 Completed 0 9s
# kubectl logs schedulerx-shell-xxx
Hello, World!
hello schedulerx!
MSE SchedulerX コンソールの タスク管理 ページで、履歴レコードを照会し、実行中の Pod のログを確認できます。
Python スクリプト
Pod 内で Python スクリプトを実行するには、タスク管理 ページで K8s タスク を作成します。リソースタイプ を Python-Script に設定し、デフォルトの Python イメージを使用するか、カスタムイメージを指定します。スクリプトエディタで直接 Python コードを記述できます。
[一度だけ実行] をクリックします。Kubernetes クラスター内で、schedulerx-python-{JobId} という名前の Pod が起動します。
# kubectl get pod | grep schedulerx
schedulerx-agent-xxx 1/1 Running 0 19h
schedulerx-python-xxx 0/1 Completed 0 xxx
# kubectl logs schedulerx-python-xxx
Hello, World!
hello schedulerx!
MSE SchedulerX コンソールの タスク管理 ページで、履歴レコードを照会し、実行中の Pod のログを確認できます。
PHP スクリプト
Pod 内で PHP スクリプトを実行するには、タスク管理 ページで K8s タスク を作成します。リソースタイプ を PHP-Script に設定し、デフォルトの php:7.4-cli イメージを使用するか、カスタムイメージを指定します。スクリプトエディタで直接 PHP コードを記述できます。
[一度だけ実行] をクリックします。Kubernetes クラスター内で、schedulerx-php-{JobId} という名前の Pod が起動します。
# kubectl get pod | grep schedulerx
schedulerx-agent-xxx 1/1 Running 0 19h
schedulerx-php-xxx 0/1 Completed 0 xxx
schedulerx-python-xxx 0/1 Completed 0 xxx
schedulerx-shell-xxx 0/1 Completed 0 xxx
# kubectl logs schedulerx-php-xxx
Hello, World!
hello schedulerx!
MSE SchedulerX コンソールの タスク管理 ページで、履歴レコードを照会し、実行中の Pod のログを確認できます。
Node.js スクリプト
Pod 内で Node.js スクリプトを実行するには、タスク管理 ページで K8s タスク を作成します。リソースタイプ を Nodejs-Script に設定し、デフォルトの node:16 イメージを使用するか、カスタムイメージを指定します。スクリプトエディタで直接 Node.js コードを記述できます。
[一度だけ実行] をクリックします。Kubernetes クラスター内で、schedulerx-node-{JobId} という名前の Pod が起動します。
# kubectl get pod | grep schedulerx
schedulerx-agent-xxx 1/1 Running 0 19h
schedulerx-node-xxx 0/1 Completed 0 23s
schedulerx-php-xxx 0/1 Completed 0 xxx
schedulerx-python-xxx 0/1 Completed 0 xxx
schedulerx-shell-xxx 0/1 Completed 0 xxx
# kubectl logs schedulerx-node-xxx
Hello, World!
MSE SchedulerX コンソールの タスク管理 ページで、履歴レコードを照会し、実行中の Pod のログを確認できます。
Job-YAML
ネイティブな Kubernetes ジョブを SchedulerX で実行することもできます。タスク管理 ページで K8s タスクを作成し、リソースタイプ を Job-YAML に設定します。エディタに、円周率を計算するサンプルタスクなどのジョブ定義を YAML 形式で入力します。
[一度だけ実行] をクリックします。Kubernetes クラスター内で、ジョブとその Pod が正常に起動します。
# kubectl get job
NAME COMPLETIONS DURATION AGE
pi 1/1 17s 6m5s
# kubectl get pod
NAME READY STATUS RESTARTS AGE
hello 0/1 Completed 0 6m8s
pi--1-jgck5 0/1 Completed 0 xxx
schedulerx-agent-xxx 1/1 Running 0 19h
schedulerx-node-xxx 0/1 Completed 0 14m
schedulerx-php-xxx 0/1 Completed 0 19m
schedulerx-python-xxx 0/1 Completed 0 46m
schedulerx-shell-xxx 0/1 Completed 0 56m
# kubectl logs pi--1-jgck5
3.14159265358979323846264338327950288419716939937510582097494459230781640628620899862803482534211706...
MSE SchedulerX コンソールの タスク管理 ページで、履歴レコードを照会し、実行中の Pod のログを確認できます。
Cronjob-YAML
ネイティブな Kubernetes cronjobs を SchedulerX で実行することもできます。タスク管理 ページで K8s タスクを作成し、リソースタイプ を CronJob-YAML に設定します。
エディタに、schedule や jobTemplate などの設定を含む cronjob の YAML 定義を入力します。
[一度だけ実行] をクリックします。タスクインスタンスレコード ページで、Pod が正常に起動していることを確認できます。
MSE SchedulerX コンソールの タスク管理 ページで、履歴レコードを照会し、実行中の Pod のログを確認できます。
Pod-YAML
ネイティブな Kubernetes Pod を SchedulerX で実行することもできます。タスク管理 ページで K8s タスクを作成し、リソースタイプ を Pod-YAML に設定します。エディタに、busybox イメージを使用して hello world を出力するサンプルなどの Pod 定義を YAML 形式で入力します。
[一度だけ実行] をクリックします。Kubernetes クラスター内で、Pod が正常に起動します。
# kubectl get pod
NAME READY STATUS RESTARTS AGE
hello 0/1 Completed 0 2m39s
pi--1-jgck5 0/1 Completed 0 49m
schedulerx-agent-xxx 1/1 Running 0 20h
schedulerx-node-xxx 0/1 Completed 0 58m
schedulerx-php-xxx 0/1 Completed 0 62m
schedulerx-python-xxx 0/1 Completed 0 90m
schedulerx-shell-xxx 0/1 Completed 0 100m
# kubectl logs hello
hello world
MSE SchedulerX コンソールの タスク管理 ページで、履歴レコードを照会し、実行中の Pod のログを確認できます。
SchedulerX を使用して Kubernetes Pod を実行する際は、以下の点にご注意ください。
-
Web アプリケーションなど、長時間実行される Pod は避けてください。これらの Pod は完了状態になりません。
-
再起動ポリシーを Never に設定してください。