すべてのプロダクト
Search
ドキュメントセンター

Microservices Engine:Kubernetes クラスタに SchedulerX をデプロイする

最終更新日:Jul 26, 2025

SchedulerX を使用すると、プログラムの定期的なスケジューリングを実行したり、さまざまなプログラミング言語でスクリプトを実行したり、HTTP 操作を呼び出したりできます。 SchedulerX は、ネイティブの Kubernetes ジョブとポッドのスケジューリングもサポートしています。 このトピックでは、Kubernetes クラスタに SchedulerX をデプロイする方法について説明します。

シナリオ

SchedulerX を使用して Kubernetes ジョブをスケジュールすると、SchedulerX には次の利点があります。

オンライン スクリプト編集(ポッドモード)

ほとんどの場合、Kubernetes ジョブは、スクリプトに基づいてデータ処理と O&M のシナリオで実行されます。 SchedulerX を使用して Kubernetes ジョブをスケジュールしない場合は、ジョブのスクリプトをイメージにパッケージ化し、YAML ファイルでスクリプトコマンドを構成する必要があります。 スクリプトを変更する場合は、新しいイメージをビルドして再公開する必要があります。 次のサンプルコードは例を示しています。

[コードを表示]

apiVersion: batch/v1
kind: Job
metadata:
  name: hello
spec:
  template:
    spec:
      containers:
      - name: hello
        image: registry.cn-hangzhou.aliyuncs.com/test/hello:1.0.0
        command: ["sh",  "/root/hello.sh"]
      restartPolicy: Never
  backoffLimit: 4

SchedulerX を使用して Kubernetes ジョブをスケジュールする場合、新しいイメージをビルドしたり、YAML ファイルでスクリプトコマンドを構成したりする必要はありません。 SchedulerX コンソールでスクリプトを編集するだけで済みます。 Shell、Python、PHP、Node.js などのプログラミング言語のスクリプトがサポートされています。 その後、SchedulerX はポッドモードでスクリプトを自動的に実行します。 スクリプトを変更する場合は、SchedulerX コンソールでスクリプトを再編集するだけで済みます。 変更は、次回 Kubernetes ジョブをスケジュールするときに自動的に有効になります。 これにより、Kubernetes ジョブを開発する効率が向上します。 さらに、SchedulerX を使用して Kubernetes ジョブをスケジュールする場合、コンテナでの操作はユーザーには認識されません。 これにより、コンテナの基本的な概念に慣れていないユーザーでも、Kubernetes ジョブを簡単にスケジュールできます。

ジョブ オーケストレーションの視覚化

Argo Workflows は、Kubernetes でのジョブのワークフローを調整するための主流のソリューションです。 サンプルコード:

[コードを表示]

# 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 ジョブを調整できる GUI を提供します。 コードベースのワークフロー オーケストレーションの主流ソリューションである Argo Workflows と比較して、SchedulerX はより便利性を提供します。 ジョブの実行中に、SchedulerX はジョブのワークフローを視覚化する有向非循環グラフ(DAG)を表示し、ブロックされたジョブの問題のトラブルシューティングと O&M 効率の向上に役立ちます。

監視とアラート

SchedulerX を使用してポッドまたはジョブをスケジュールする場合、SchedulerX の監視およびアラート機能を使用できます。

  • アラート方法:SchedulerX は、ショートメッセージ、電話、メール、および DingTalk チャットボット、WeCom ボット、Lark ボットの Webhook URL を使用してアラート通知を送信します。

  • アラートポリシー:SchedulerX は、ジョブが実行に失敗した場合、またはジョブの実行がタイムアウトした場合にアラートをトリガーします。

ログ収集

SchedulerX を使用してポッドまたはジョブをスケジュールする場合、SchedulerX はポッドまたはジョブの操作ログを自動的に収集します。 ポッドが実行に失敗した場合、SchedulerX コンソールのログに基づいて問題のトラブルシューティングを行うことができます。16

監視ダッシュボード

SchedulerX コンソールの概要ページで、ジョブをリアルタイムで表示できます。

オンラインジョブとオフラインジョブの混在デプロイ

SchedulerX を使用すると、Java タイプと Kubernetes タイプのオンラインおよびオフラインの定期ジョブを混在させてデプロイおよびスケジュールできます。 ビジネス アプリケーションには、複数の定期ジョブが含まれる場合があります。 定期ジョブを頻繁にスケジュールする場合は、ビジネス アプリケーションと同じプロセスにデプロイできます。 この場合、アプリケーションの CPU リソースとメモリが消費されます。 定期ジョブはオンライン ビジネスから分離されていません。 大量の risorse を消費し、1 時間に 1 回または 1 日に 1 回など、低い頻度でスケジュールされる定期ジョブの場合は、ジョブを実行するポッドを作成できます。 これにより、ジョブはオンライン ビジネスとは異なるプロセスで実行できます。

方法 1(推奨):Deployment を使用して SchedulerX をデプロイする

Java 以外のアプリケーションの場合は、Deployment を使用して schedulerx-agent.yaml をデプロイできます。 この方法では、SchedulerX は個別のポッドとしてデプロイされます。 次の図は、この場合の SchedulerX の動作を示しています。

p452558.png

前提条件

1

ステップ 1:サービスアカウントを構成する

サービスアカウントは、SchedulerX を使用して Kubernetes ジョブがスケジュールされるときに、検証と承認のための ID を提供します。 デフォルトでは、Kubernetes ジョブが属する名前空間のサービスアカウントが使用されます。

schedulerx-serviceaccount.yaml は、Kubernetes クラスタの必要な名前空間で 1 回だけ実行する必要があります。 現在の名前空間に属するポッドまたはジョブのみをスケジュールする場合は、次の YAML コードを実行します。

[コードを表示]

apiVersion: v1
kind: ServiceAccount
metadata:
  name: schedulerx
---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: schedulerx-role
rules:
  - apiGroups: [""]
    resources: ["pods"]
    verbs: ["create","delete","get","list","patch","update","watch"]
  - apiGroups: [""]
    resources: ["pods/log"]
    verbs: ["get","list","watch"]
  - apiGroups: [""]
    resources: ["configmaps"]
    verbs: ["create","delete","get","list","patch","update"]
  - apiGroups: [""]
    resources: ["events"]
    verbs: ["watch"]
  - apiGroups: ["batch"]
    resources: ["jobs","cronjobs"]
    verbs: ["create","delete","get","list","patch","update","watch"]
---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: schedulerx-binding
subjects:
  - kind: ServiceAccount
    name: schedulerx
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: schedulerx-role

名前空間をまたがってジョブをスケジュールする場合は、ClusterRole および ClusterRoleBinding API 操作を呼び出す必要があります。

[コードを表示]

apiVersion: v1
kind: ServiceAccount
metadata:
  name: schedulerx
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: schedulerx-cluster-role
rules:
  - apiGroups: [""]
    resources: ["pods"]
    verbs: ["create","delete","get","list","patch","update","watch"]
  - apiGroups: [""]
    resources: ["pods/log"]
    verbs: ["get","list","watch"]
  - apiGroups: [""]
    resources: ["configmaps"]
    verbs: ["create","delete","get","list","patch","update"]
  - apiGroups: [""]
    resources: ["events"]
    verbs: ["watch"]
  - apiGroups: ["batch"]
    resources: ["jobs","cronjobs"]
    verbs: ["create","delete","get","list","patch","update","watch"]
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: schedulerx-cluster-binding
subjects:
  - kind: ServiceAccount
    name: schedulerx
    namespace: <NAMESPACE1>
  - kind: ServiceAccount
    name: schedulerx
    namespace: <NAMESPACE2>
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: schedulerx-cluster-role

ステップ 2:SchedulerX エージェントをインストールする

次のサンプルコードは、schedulerx-agent.yaml の構成を示しています。

[コードを表示]

apiVersion: apps/v1
kind: Deployment
metadata:
  name: schedulerx-agent
  labels:
    app: schedulerx-agent
spec:
  replicas: 1
  selector:
    matchLabels:
      app: schedulerx-agent
  template:
    metadata:
      labels:
        app: schedulerx-agent
    spec:
      serviceAccountName: schedulerx
      containers:
      - name: schedulerx-agent
        image: registry.cn-hangzhou.aliyuncs.com/schedulerx/agent:latest-amd64
        imagePullPolicy: Always
        resources:
          limits:
            cpu: 500m
          requests:
            cpu: 500m
        env:
          - name: "SCHEDULERX_ENDPOINT"
            value: "${SCHEDULERX_ENDPOINT}"
          - name: "SCHEDULERX_NAMESPACE"
            value: "${SCHEDULERX_NAMESPACE}"
          - name: "SCHEDULERX_GROUPID"
            value: "${SCHEDULERX_GROUPID}"
          - name: "SCHEDULERX_APPKEY"
            value: "${SCHEDULERX_APPKEY}"
          - name: "SCHEDULERX_STARTER_MODE"
            value: "pod"
        livenessProbe:
          exec:
            command: ["/bin/bash","/root/health.sh"]
          timeoutSeconds: 30
          initialDelaySeconds: 30

次の表は、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 コンソールの [名前空間] ページで確認できます。7

${SCHEDULERX_GROUPID}

GROUPID は、アプリケーション ID を指定します。 アプリケーション ID は、SchedulerX コンソールの [アプリケーション管理] ページで確認できます。

${SCHEDULERX_APPKEY}

APPKEY は、アプリケーションキーを指定します。 アプリケーションキーは、SchedulerX コンソールの [アプリケーション管理] ページで確認できます。

Deployment をデプロイした後、SchedulerX コンソールの [アプリケーション管理] ページでインスタンスが使用可能かどうかを確認できます。 インスタンスが使用可能な場合、SchedulerX エージェントは Kubernetes クラスタに接続されています。

方法 2:Helm パッケージを使用して SchedulerX をデプロイする

前提条件

ステップ 1:SchedulerX Helm パッケージをダウンロードする

次のコマンドを実行して、SchedulerX Helm パッケージをダウンロードします。

wget https://schedulerx2.oss-cn-hangzhou.aliyuncs.com/helm/schedulerxchart-2.0.0.tgz

ステップ 2:SchedulerX Helm パッケージをインストールする

  1. SchedulerX コンソールでアプリケーションのアクセス パラメーターを取得します。

    1. MSE SchedulerX コンソール にログインします。

    2. 上部のナビゲーションバーで、リージョンを選択します。

    3. 左側のナビゲーションウィンドウで、[アプリケーション管理] をクリックします。

    4. [アプリケーション管理] ページで、[操作] 列の [アクセス構成] をクリックします。 [アクセス構成] パネルの左上隅にあるドロップダウンリストから [k8s] を選択します。

  2. 次のインストールコマンドを実行します。

    説明
    • コマンドのアクセス パラメーターを、スケジュールするアプリケーションのアクセス パラメーターに置き換えます。

    • デフォルトでは、アクセス構成のイメージアドレスは、インターネット上の 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

    次の図は、インストールプロセスを示しています。

    1

    次の表は、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 コンソールの [名前空間] ページで確認できます。7

    ${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 とオンライン ビジネスは同じプロセスを共有します。 次の図はワークフローを示しています。66

前提条件

アプリケーションを 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 を選択し、[リソース] ドロップダウンリストから [シェルスクリプト] を選択した後、[busybox] デフォルトイメージを使用するか、カスタムイメージを指定します。

ジョブを作成した後、[1 回実行] をクリックします。 Kubernetes クラスタで schedulerx-shell-{JobId} という名前のポッドが起動されていることを確認できます。7

SchedulerX コンソールの [タスク管理] ページで、ジョブの履歴実行レコードとポッドの操作ログを表示できます。

Python スクリプトを実行する

ポッドモードで Python スクリプトを実行する場合は、次の操作を実行して Kubernetes ジョブを作成します。 [タスク管理] ページの [タスクの作成] パネルで、[タスクの種類] ドロップダウンリストから [K8s] を選択し、[リソース] ドロップダウンリストから [Python-Script] を選択します。 次に、python デフォルトイメージを使用するか、カスタムイメージを指定します。

ジョブを作成した後、[1 回実行] をクリックします。 Kubernetes クラスタで schedulerx-python-{JobId} という名前のポッドが起動されていることを確認できます。7

SchedulerX コンソールの [タスク管理] ページで、ジョブの履歴実行レコードとポッドの操作ログを表示できます。8

PHP スクリプトを実行する

ポッドモードで PHP スクリプトを実行する場合は、次の操作を実行して Kubernetes ジョブを作成します。 [タスク管理] ページの [タスクの作成] パネルで、[タスクの種類] ドロップダウンリストから [K8s] を選択し、[リソース] ドロップダウンリストから [Php-Script] を選択します。 次に、php: 7.4-cli デフォルトイメージを使用するか、カスタムイメージを指定します。a3

ジョブを作成した後、[1 回実行] をクリックします。 Kubernetes クラスタで schedulerx-php-{JobId} という名前のポッドが起動されていることを確認できます。12

SchedulerX コンソールの [タスク管理] ページで、ジョブの履歴実行レコードとポッドの操作ログを表示できます。8

Node.js スクリプトを実行する

ポッドモードで Node.js スクリプトを実行する場合は、次の操作を実行して Kubernetes ジョブを作成します。 [タスク管理] ページの [タスクの作成] パネルで、[タスクの種類] ドロップダウンリストから [K8s] を選択し、[リソース] ドロップダウンリストから [Nodejs-Script] を選択します。 次に、node: 16 デフォルトイメージを使用するか、カスタムイメージを指定します。a4

ジョブを作成した後、[1 回実行] をクリックします。 Kubernetes クラスタで schedulerx-node-{JobId} という名前のポッドが起動されていることを確認できます。8

SchedulerX コンソールの [タスク管理] ページで、ジョブの履歴実行レコードとポッドの操作ログを表示できます。8

Job-YAML

SchedulerX を使用してネイティブの Kubernetes ジョブを実行できます。 Kubernetes ジョブを作成するには、次の操作を実行します。 [タスク管理] ページの [タスクの作成] パネルで、[タスクの種類] ドロップダウンリストから [K8s] を選択し、[リソース] ドロップダウンリストから [Job-YAML] を選択します。a5

ジョブを作成した後、[1 回実行] をクリックします。 Kubernetes クラスタでジョブとポッドが起動されていることを確認できます。8

SchedulerX コンソールの [タスク管理] ページで、ジョブの履歴実行レコードとポッドの操作ログを表示できます。8

CronJob-YAML

SchedulerX を使用してネイティブの Kubernetes cron ジョブを実行できます。 Kubernetes ジョブを作成するには、次の操作を実行します。 [タスク管理] ページの [タスクの作成] パネルで、[タスクの種類] ドロップダウンリストから [K8s] を選択し、[リソース] ドロップダウンリストから [CronJob-YAML] を選択します。

image.png

ジョブを作成した後、[1 回実行] をクリックします。 ジョブの [操作] 列で、[詳細] > [履歴レコード] を選択します。 次に、[タスクインスタンスレコード] パネルでポッドが起動されていることを確認できます。

image.png

SchedulerX コンソールの [タスク管理] ページで、ポッドの実行履歴を照会し、ポッドの操作ログを表示することもできます。

image.png

Pod-YAML

SchedulerX を使用してネイティブの Kubernetes ポッドを実行できます。 Kubernetes ジョブを作成するには、次の操作を実行します。 [タスク管理] ページの [タスクの作成] パネルで、[タスクの種類] ドロップダウンリストから [K8s] を選択し、[リソース] ドロップダウンリストから [Pod-YAML] を選択します。a6

ジョブを作成した後、[1 回実行] をクリックします。 Kubernetes クラスタでポッドが起動されていることを確認できます。9

SchedulerX コンソールの [タスク管理] ページで、ジョブの履歴実行レコードとポッドの操作ログを表示できます。9

説明

SchedulerX を使用して Kubernetes ポッドを実行する場合は、次の項目に注意してください。

  • Web アプリケーションのポッドなど、実行サイクルが長いポッドは使用しないことをお勧めします。 ポッドの起動後、ポッドの実行は終了しません。

  • ポッドの再起動を無効にすることをお勧めします。 そうしないと、ポッドが繰り返し再起動されます。