SchedulerX を使用すると、プログラムの定期的なスケジューリングを実行したり、さまざまなプログラミング言語でスクリプトを実行したり、HTTP 操作を呼び出したりできます。 SchedulerX は、ネイティブの Kubernetes ジョブとポッドのスケジューリングもサポートしています。 このトピックでは、Kubernetes クラスターに SchedulerX をデプロイする方法について説明します。
シナリオ
SchedulerX を使用して Kubernetes ジョブをスケジュールすると、SchedulerX には次の利点があります。
ポッドモードでのオンラインスクリプト編集
ほとんどの場合、Kubernetes ジョブは、スクリプトに基づいてデータ処理と O&M シナリオで実行されます。 SchedulerX を使用して Kubernetes ジョブをスケジュールしない場合は、ジョブのスクリプトをイメージにパッケージ化し、YAML ファイルでスクリプトコマンドを構成する必要があります。 スクリプトを変更する場合は、新しいイメージをビルドして再公開する必要があります。 次のサンプルコードは例を示しています。
SchedulerX を使用して Kubernetes ジョブをスケジュールする場合、新しいイメージをビルドしたり、YAML ファイルでスクリプトコマンドを構成したりする必要はありません。 SchedulerX コンソールでスクリプトを編集するだけで済みます。 Shell、Python、PHP、Node.js などのプログラミング言語のスクリプトがサポートされています。 その後、SchedulerX はポッドモードでスクリプトを自動的に実行します。 スクリプトを変更する場合は、SchedulerX コンソールでスクリプトを再編集するだけで済みます。 変更は、次回 Kubernetes ジョブをスケジュールするときに自動的に有効になります。 これにより、Kubernetes ジョブを開発する効率が向上します。 さらに、SchedulerX を使用して Kubernetes ジョブをスケジュールする場合、コンテナーに対する操作はユーザーには認識されません。 これにより、コンテナーの基本的な概念に慣れていないユーザーでも、Kubernetes ジョブを簡単にスケジュールできます。
視覚化されたジョブオーケストレーション
Argo Workflows は、Kubernetes 上のジョブのワークフローを調整するための主流のソリューションです。 サンプルコード:
SchedulerX は、ドラッグアンドドロップ操作を実行することで Kubernetes ジョブを調整できる GUI を提供します。 コードベースのワークフローオーケストレーションの主流ソリューションである Argo Workflows と比較して、SchedulerX はより便利性を提供します。 ジョブの実行中に、SchedulerX はジョブのワークフローを視覚化する有向非循環グラフ(DAG)を表示し、ブロックされたジョブの問題のトラブルシューティングと O&M 効率の向上に役立てます。
監視とアラート
SchedulerX を使用してポッドまたはジョブをスケジュールする場合、SchedulerX の監視およびアラート機能を使用できます。
アラート方法:SchedulerX は、ショートメッセージ、電話、メール、DingTalk チャットボット、WeCom ボット、Lark ボットの Webhook URL を使用してアラート通知を送信します。
アラートポリシー:SchedulerX は、ジョブが実行に失敗した場合、またはジョブの実行がタイムアウトした場合にアラートをトリガーします。
ログ収集
SchedulerX を使用してポッドまたはジョブをスケジュールする場合、SchedulerX はポッドまたはジョブの操作ログを自動的に収集します。 ポッドが実行に失敗した場合、SchedulerX コンソールのログに基づいて問題のトラブルシューティングを行うことができます。
監視ダッシュボード
SchedulerX コンソールの [概要] ページで、ジョブをリアルタイムで表示できます。
オンラインジョブとオフラインジョブの混在デプロイ
SchedulerX を使用すると、Java タイプと Kubernetes タイプのオンラインおよびオフラインの定期ジョブを混在させてデプロイおよびスケジュールできます。 ビジネスアプリケーションには、複数の定期ジョブが含まれる場合があります。 定期ジョブを頻繁にスケジュールする場合は、ビジネスアプリケーションと同じプロセスにデプロイできます。 この場合、アプリケーションの CPU リソースとメモリが消費されます。 定期ジョブは、オンラインビジネスから分離されていません。 大量の リソース を消費し、1 時間に 1 回または 1 日に 1 回など、低い頻度でスケジュールされる定期ジョブの場合は、ジョブを実行するポッドを作成できます。 これにより、ジョブはオンラインビジネスとは異なるプロセスで実行できます。
方法 1(推奨):Deployment を使用した SchedulerX のデプロイ
Java 以外のアプリケーションの場合は、Deployment を使用して schedulerx-agent.yaml をデプロイできます。 この方法では、SchedulerX は別のポッドとしてデプロイされます。 次の図は、この場合の SchedulerX の動作を示しています。
前提条件
Container Service for Kubernetes(ACK)クラスターまたは自己管理型 Kubernetes クラスターが作成されていること。 詳細については、「ACK マネージドクラスターの作成」をご参照ください。
SchedulerX がアクティブ化されていること。
SchedulerX コンソールで Kubernetes アプリケーションが作成されていること。 詳細については、「アプリケーションの作成」をご参照ください。
手順 1:サービスアカウントを構成する
サービスアカウントは、SchedulerX を使用して Kubernetes ジョブがスケジュールされるときに、検証と承認のための ID を提供します。 デフォルトでは、Kubernetes ジョブが属する名前空間のサービスアカウントが使用されます。
Kubernetes クラスターの必要な名前空間で schedulerx-serviceaccount.yaml を 1 回だけ実行する必要があります。 現在の名前空間に属するポッドまたはジョブのみをスケジュールする場合は、次の YAML コードを実行します。
名前空間をまたがってジョブをスケジュールする場合は、ClusterRole および ClusterRoleBinding API 操作を呼び出す必要があります。
手順 2:SchedulerX エージェントをインストールする
次のサンプルコードは、schedulerx-agent.yaml の構成を示しています。
次の表は、image の有効な値を示しています。
チップアーキテクチャ | ロケーション | 説明 |
X86_64 | 中国のリージョンとゾーン | registry.cn-hangzhou.aliyuncs.com/schedulerx/agent:latest-amd64 |
中国以外のリージョンとゾーン | schedulerx-registry.ap-southeast-1.cr.aliyuncs.com/schedulerx/agent:latest-amd64 | |
ARM64 | 中国のリージョンとゾーン | registry.cn-hangzhou.aliyuncs.com/schedulerx/agent:latest-arm64 |
中国以外のリージョンとゾーン | schedulerx-registry.ap-southeast-1.cr.aliyuncs.com/schedulerx/agent:latest-arm64 |
次の表は、env に含まれる変数について説明しています。
パラメーター | 説明 |
${SCHEDULERX_ENDPOINT} | ENDPOINT は、アプリケーションがデプロイされているリージョンと一致するエンドポイントを指定します。 例:addr-sh-internal.edas.aliyun.com。 詳細については、「エンドポイント」をご参照ください。 |
${SCHEDULERX_NAMESPACE} | NAMESPACE は、アプリケーションが属する名前空間の ID を指定します。 名前空間 ID は、SchedulerX コンソールの [名前空間] ページで確認できます。 |
${SCHEDULERX_GROUPID} | GROUPID は、アプリケーション ID を指定します。 アプリケーション ID は、SchedulerX コンソールの [アプリケーション管理] ページで確認できます。 |
${SCHEDULERX_APPKEY} | APPKEY は、アプリケーションキーを指定します。 アプリケーションキーは、SchedulerX コンソールの [アプリケーション管理] ページで確認できます。 |
Deployment をデプロイした後、SchedulerX コンソールの [アプリケーション管理] ページでインスタンスが使用可能かどうかを確認できます。 インスタンスが使用可能な場合、SchedulerX エージェントは Kubernetes クラスターに接続されています。
方法 2:Helm パッケージを使用した SchedulerX のデプロイ
前提条件
ACK クラスターまたは自己管理型 Kubernetes クラスターが作成されていること。 詳細については、「ACK マネージドクラスターの作成」をご参照ください。
SchedulerX がアクティブ化されていること。
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 パッケージをインストールする
SchedulerX コンソールでアプリケーションのアクセス パラメーター を取得します。
SchedulerX コンソール にログインします。
上部のナビゲーションバーで、リージョンを選択します。
左側のナビゲーションウィンドウで、[アプリケーション管理] をクリックします。
[アプリケーション管理] ページで、アクセス構成[操作] 列の アクセス構成k8s をクリックします。 パネルの左上隅にあるドロップダウンリストから、 を選択します。
次のインストールコマンドを実行します。
説明コマンド内のアクセス パラメーター を、スケジュールするアプリケーションのアクセス パラメーター に置き換えます。
デフォルトでは、アクセス構成のイメージアドレスは、インターネット上の AMD アーキテクチャのイメージのアドレスです。 マシンが存在するリージョンとマシンのアーキテクチャに基づいて、イメージアドレスを指定します。
helm install schedulerxchart schedulerxchart-2.0.0.tgz \ --set SCHEDULERX_ENDPOINT=acm.aliyun.com\ ,SCHEDULERX_NAMESPACE=f856c3f8-a15c-4a7e-9b4e-f812a9f8****\ ,SCHEDULERX_GROUPID=k8s-test3\ ,SCHEDULERX_APPKEY=****\ ,SCHEDULERX_AGENT_IMAGE=registry.cn-hangzhou.aliyuncs.com/schedulerx/agent:latest-amd64
次の図は、インストールプロセスを示しています。
次の表は、image の有効な値を示しています。
チップアーキテクチャ
ロケーション
説明
x86_64
中国のリージョンとゾーン
registry.cn-hangzhou.aliyuncs.com/schedulerx/agent:latest-amd64
中国以外のリージョンとゾーン
schedulerx-registry.ap-southeast-1.cr.aliyuncs.com/schedulerx/agent:latest-amd64
arm64
中国のリージョンとゾーン
registry.cn-hangzhou.aliyuncs.com/schedulerx/agent:latest-arm64
中国以外のリージョンとゾーン
schedulerx-registry.ap-southeast-1.cr.aliyuncs.com/schedulerx/agent:latest-arm64
次の表は、env に含まれる変数について説明しています。
パラメーター
説明
${SCHEDULERX_ENDPOINT}
ENDPOINT は、アプリケーションがデプロイされているリージョンと一致するエンドポイントを指定します。 例:addr-sh-internal.edas.aliyun.com。 詳細については、「エンドポイント」をご参照ください。
${SCHEDULERX_NAMESPACE}
NAMESPACE は、アプリケーションが属する名前空間の ID を指定します。 名前空間 ID は、SchedulerX コンソールの [名前空間] ページで確認できます。
${SCHEDULERX_GROUPID}
GROUPID は、アプリケーション ID を指定します。 アプリケーション ID は、SchedulerX コンソールの [アプリケーション管理] ページで確認できます。
${SCHEDULERX_APPKEY}
APPKEY は、アプリケーションキーを指定します。 アプリケーションキーは、SchedulerX コンソールの [アプリケーション管理] ページで確認できます。
SCHEDULERX_AGENT_IMAGE
イメージの URL。
パッケージをインストールした後、SchedulerX コンソールでインスタンスを表示できます。
方法 3:Java 用 SchedulerX SDK を使用した SchedulerX のデプロイ
Java アプリケーションの場合、Kubernetes ジョブと Java プログラムの両方をスケジュールできます。 この場合、Java 用 SchedulerX SDK を使用して SchedulerX をデプロイできます。 SchedulerX とオンラインビジネスは同じプロセスを共有します。 次の図は、ワークフローを示しています。
前提条件
ACK クラスターまたは自己管理型 Kubernetes クラスターが作成されていること。 詳細については、「ACK マネージドクラスターの作成」をご参照ください。
SchedulerX コンソールで Kubernetes アプリケーションが作成されていること。 詳細については、「アプリケーションの作成」をご参照ください。
アプリケーションを SchedulerX に接続する
Java 用 SchedulerX SDK を使用して、アプリケーションを SchedulerX に接続します。 詳細については、「Spring Boot アプリケーションを SchedulerX に接続する」をご参照ください。
schedulerx-plugin-kubernetes
依存関係を追加して、Kubernetes ジョブのスケジューリングを有効にします。 サンプルコード:
schedulerx2.version を SchedulerX エージェントの最新バージョンに置き換えます。 詳細については、「リリースノート」をご参照ください。
<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>
Kubernetes ジョブの作成
次のいずれかのスクリプトを実行する前に、[タスク管理] ページの [タスクの作成] パネルで Kubernetes ジョブを作成します。 詳細については、「ジョブ管理」をご参照ください。
Shell スクリプトの実行
ポッドモードでシェルスクリプトを実行する場合は、次の操作を実行して Kubernetes ジョブを作成します。[タスク管理] ページの [タスクの作成] パネルで、[タスクの種類] ドロップダウンリストから [K8s] を選択し、[リソース] ドロップダウンリストから [Shell-Script] を選択し、[busybox] デフォルトイメージを使用するか、カスタムイメージを指定します。
ジョブを作成した後、[1 回実行] をクリックします。 Kubernetes クラスターで schedulerx-shell-{JobId} という名前のポッドが起動されていることを確認できます。
SchedulerX コンソールの [タスク管理] ページで、ジョブの履歴実行レコードとポッドの操作ログを表示できます。
Python スクリプトの実行
ポッドモードで Python スクリプトを実行する場合は、次の操作を実行して Kubernetes ジョブを作成します。 [タスク管理] ページの [タスクの作成] パネルで、[タスクの種類] ドロップダウンリストから [K8s] を選択し、[リソース] ドロップダウンリストから [Python-Script] を選択し、python デフォルトイメージを使用するか、カスタムイメージを指定します。
ジョブを作成した後、[1 回実行] をクリックします。 Kubernetes クラスターで schedulerx-python-{JobId} という名前のポッドが起動されていることを確認できます。
SchedulerX コンソールの [タスク管理] ページで、ジョブの履歴実行レコードとポッドの操作ログを表示できます。
PHP スクリプトの実行
ポッドモードで PHP スクリプトを実行する場合は、次の操作を実行して Kubernetes ジョブを作成します。 [タスク管理] ページの [タスクの作成] パネルで、[タスクの種類] ドロップダウンリストから [K8s] を選択し、[リソース] ドロップダウンリストから [Php-Script] を選択し、php:7.4-cli
デフォルトイメージを使用するか、カスタムイメージを指定します。
ジョブを作成した後、[1 回実行] をクリックします。 Kubernetes クラスターで schedulerx-php-{JobId} という名前のポッドが起動されていることを確認できます。
SchedulerX コンソールの [タスク管理] ページで、ジョブの履歴実行レコードとポッドの操作ログを表示できます。
Node.js スクリプトの実行
ポッドモードで Node.js スクリプトを実行する場合は、次の操作を実行して Kubernetes ジョブを作成します。 [タスク管理] ページの [タスクの作成] パネルで、[タスクの種類] ドロップダウンリストから [K8s] を選択し、[リソース] ドロップダウンリストから [Nodejs-Script] を選択し、node:16
デフォルトイメージを使用するか、カスタムイメージを指定します。
ジョブを作成した後、[1 回実行] をクリックします。 Kubernetes クラスターで schedulerx-node-{JobId} という名前のポッドが起動されていることを確認できます。
SchedulerX コンソールの [タスク管理] ページで、ジョブの履歴実行レコードとポッドの操作ログを表示できます。
Job-YAML
SchedulerX を使用してネイティブの Kubernetes ジョブを実行できます。 Kubernetes ジョブを作成するには、次の操作を実行します。 [タスク管理] ページの [タスクの作成] パネルで、[タスクの種類] ドロップダウンリストから [K8s] を選択し、[リソース] ドロップダウンリストから [Job-YAML] を選択します。
ジョブを作成した後、[1 回実行] をクリックします。 Kubernetes クラスターでジョブとポッドが起動されていることを確認できます。
SchedulerX コンソールの [タスク管理] ページで、ジョブの履歴実行レコードとポッドの操作ログを表示できます。
CronJob-YAML
SchedulerX を使用してネイティブの Kubernetes cron ジョブを実行できます。 Kubernetes ジョブを作成するには、次の操作を実行します。 [タスク管理] ページの [タスクの作成] パネルで、[タスクの種類] ドロップダウンリストから [K8s] を選択し、[リソース] ドロップダウンリストから [CronJob-YAML] を選択します。
ジョブを作成した後、[1 回実行] をクリックします。 ジョブの [操作] 列で、[詳細] > [履歴レコード] を選択します。 その後、[タスクインスタンスレコード] パネルでポッドが起動されていることを確認できます。
SchedulerX コンソールの [タスク管理] ページで、ポッドの実行履歴をクエリしたり、ポッドの操作ログを表示したりすることもできます。
Pod-YAML
SchedulerX を使用してネイティブの Kubernetes ポッドを実行できます。 Kubernetes ジョブを作成するには、次の操作を実行します。 [タスク管理] ページの [タスクの作成] パネルで、[タスクの種類] ドロップダウンリストから [K8s] を選択し、[リソース] ドロップダウンリストから [Pod-YAML] を選択します。
ジョブを作成した後、[1 回実行] をクリックします。 Kubernetes クラスターでポッドが起動されていることを確認できます。
SchedulerX コンソールの [タスク管理] ページで、ジョブの履歴実行レコードとポッドの操作ログを表示できます。
SchedulerX を使用して Kubernetes ポッドを実行する場合は、次の点に注意してください。
Web アプリケーションのポッドなど、実行サイクルの長いポッドは使用しないことをお勧めします。 ポッドが起動されると、ポッドの実行は終了しません。
ポッドの再起動を無効にすることをお勧めします。 そうしないと、ポッドが繰り返し再起動されます。