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 コンソール にログインします。
Enterprise Distributed Application Service (EDAS) コンソール にログインします。
上部のナビゲーションバーで、リージョンを選択します。
左側のナビゲーションペインで、[アプリケーション管理] をクリックします。
左側のナビゲーションペインで、[タスクスケジューリング (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 スクリプトの実行
ポッドモードで Shell スクリプトを実行する場合は、[タスク管理] ページの [タスクの作成] パネルで、[タスクの種類] ドロップダウンリストから [K8s] を選択し、[リソース] ドロップダウンリストから [shell-script] を選択して、busybox デフォルトイメージを使用するか、カスタムイメージを指定します。
ジョブを作成した後、[1 回実行] をクリックします。 schedulerx-shell-{JobId} という名前のポッドが Kubernetes クラスターで開始されていることを確認できます。
SchedulerX コンソールの [タスク管理] ページで、ジョブの履歴実行レコードとポッドの操作ログを表示できます。
Python スクリプトの実行
ポッドモードで Python スクリプトを実行する場合は、[タスク管理] ページの [タスクの作成] パネルで、[タスクの種類] ドロップダウンリストから [k8s] を選択し、[リソース] ドロップダウンリストから [python-script] を選択して、python デフォルトイメージを使用するか、カスタムイメージを指定します。
ジョブを作成した後、[1 回実行] をクリックします。 schedulerx-python-{JobId} という名前のポッドが Kubernetes クラスターで開始されていることを確認できます。
SchedulerX コンソールの [タスク管理] ページで、ジョブの履歴実行レコードとポッドの操作ログを表示できます。
PHP スクリプトの実行
ポッドモードで PHP スクリプトを実行する場合は、[タスク管理] ページの [タスクの作成] パネルで、[タスクの種類] ドロップダウンリストから [k8s] を選択し、[リソース] ドロップダウンリストから [php-script] を選択して、php:7.4-cli
デフォルトイメージを使用するか、カスタムイメージを指定します。
ジョブを作成した後、[1 回実行] をクリックします。 schedulerx-php-{JobId} という名前のポッドが Kubernetes クラスターで開始されていることを確認できます。
SchedulerX コンソールの [タスク管理] ページで、ジョブの履歴実行レコードとポッドの操作ログを表示できます。
Node.js スクリプトの実行
ポッドモードで Node.js スクリプトを実行する場合は、[タスク管理] ページの [タスクの作成] パネルで、[タスクの種類] ドロップダウンリストから [k8s] を選択し、[リソース] ドロップダウンリストから [nodejs-script] を選択して、node:16
デフォルトイメージを使用するか、カスタムイメージを指定します。
ジョブを作成した後、[1 回実行] をクリックします。 schedulerx-node-{JobId} という名前のポッドが Kubernetes クラスターで開始されていることを確認できます。
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 アプリケーションのポッドなど、実行サイクルの長いポッドは使用しないことをお勧めします。ポッドが開始されると、ポッドの実行は終了しません。
ポッドの再起動を無効にすることをお勧めします。そうしないと、ポッドが繰り返し再起動されます。