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

Container Service for Kubernetes:Rayオートスケーラーに基づくElastic Container InstanceノードのElasticスケーリング

最終更新日:Jan 07, 2025

Rayオートスケーラーと統合することで、Container Service for Kubernetes (ACK) クラスターにRayクラスターを作成し、Rayクラスター内のElastic Container Instanceノードを自動的にスケールするように設定できます。 これにより、メンテナンス不要で分離された、迅速な起動が可能なコンテナーランタイム環境の恩恵を受けることができます。 Elastic Container Instanceを使用すると、基盤となるElastic Compute Service( ECS) インスタンスを購入または管理することなく、コンテナを実行できます。 基盤となるインフラストラクチャのメンテナンスではなく、コンテナ化されたアプリケーションに集中できます。 コンテナで使用されているリソースに対してのみ課金されます。

前提条件

のクラスタアーキテクチャの例

image.png

手順

  1. 次のコマンドを実行してノードを照会し、virtual-kubelet仮想ノードが追加されているかどうかを確認します。

    kubectl getノード

    期待される出力:

    名ステータスROLES年齢バージョン
    cn-hangzhou.172.XX.XX.20準備 <none> 19h v1.26.3-aliyun.1
    cn-hangzhou.172.XX.XX.236準備 <none> 82m v1.26.3-aliyun.1
    cn-hangzhou.172.XX.XX.41準備 <none> 19h v1.26.3-aliyun.1
    virtual-kubelet-cn-hangzhou-kレディエージェント16m v1.26.3-aliyun.1 
  2. 次のコマンドを実行して、values.yamlという名前のファイルを作成します。

    cat > values.yaml <<EOF
    ワーカー:
      groupName: workergroup
      ラベル:
        alibabacloud.com/eci: "true"
    EOF 
  3. 次のコマンドを実行して、Elastic Container InstanceをサポートするRayクラスターをデプロイします。

    helm uninstall ${RAY_CLUSTER_NAME} -n ${RAY_CLUSTER_NS}
    helm install ${RAY_CLUSTER_NAME} aliyunhub/ack-ray-cluster -n ${RAY_CLUSTER_NS} -f values.yaml 
  4. 次のコマンドを実行して、Rayクラスターのポッドが正常に実行されるかどうかを確認します。

    kubectl getポッド

    期待される出力:

    NAME READY STATUS RESTARTS AGE IPノードNOMINATED NOMINATED NODE READINESS GATES
    myfirst-ray-cluster-head-7fgp4 2/2実行0 7m2s 172.16.0.241 cn-hangzhou.172.16.0.240 <none> <none> 
  5. 次のコマンドを実行して、ヘッドノードにログインします。

    値をRayクラスターの実際のポッド名に置き換えます。

    kubectl -n ${RAY_CLUSTER_NS} exec -it myfirst-ray-cluster-head-7fgp4 -- bash
  6. RayクラスターでPythonジョブを送信して実行します。

    次のコードは2つのタスクを開始し、それぞれに1つのvCPUが必要です。 既定では、先頭ポッドの -- num-cpusの値は0です。つまり、タスクのスケジューリングは許可されていません。 ワーカーポッドのCPUとメモリは、デフォルトで1 vCPUと1 GBに設定されています。 そのため、Rayクラスターは自動的に2つのElastic Container Instanceワーカーポッドを作成します。

    インポート時間
    レイのインポート
    インポートソケット
    
    ray.init()
    
    @ ray.remote(num_cpus=1)
    def get_task_hostname():
        time.sleep(120)
        host = socket.gethostbyname(socket.gethostname())
        ホストを返す
    
    object_refs = []
    _in range(2) の場合:
        object_refs.append(get_task_hostname.remote())
    
    ray.wait(object_refs)
    
    object_refsのtの場合:
        print(ray.get(t)) 
  7. 次のコマンドを実行して、ポッドが期待どおりに実行されるかどうかを確認します。

    kubectl pod -oワイド
    # 期待される出力:
    NAME READY STATUS RESTARTS AGE IPノードNOMINATED NOMINATED NODE READINESS GATES
    myfirst-ray-cluster-head-7fgp4 2/2実行中0 4m56s 172.16.0.241 cn-hangzhou.172.16.0.240 <none> <none>
    myfirst-ray-cluster-worker-workergroup-6s2cl 0/1 Init:0/1 0 4m5s 172.16.0.17 virtual-kubelet-cn-hangzhou-k <none> <none>
    myfirst-ray-cluster-worker-workergroup-l9qgb 1/1実行中0 4m5s 172.16.0.16 virtual-kubelet-cn-hangzhou-k <none> 

関連ドキュメント