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

Container Service for Kubernetes:RayオートスケーラーとACKオートスケーラーに基づくエラスティックスケーリング

最終更新日:Jan 07, 2025

RayはRayオートスケーラーを提供します。これにより、ワークロードに基づいてRayクラスターのコンピューティングリソースを動的に調整できます。 Container Service for Kubernetes (ACK) は、自動スケーリングを実装するためのACKオートスケーラーも提供します。 このコンポーネントは、クラスター内のワークロードに基づいてノード数を自動的に調整できます。 RayオートスケーラーとACKオートスケーラーに基づく自動スケーリング機能は、クラウドコンピューティングの柔軟性機能を完全に活用し、コンピューティングリソースの効率と費用対効果を向上させます。

前提条件

RayオートスケーラーとACKオートスケーラーに基づくエラスティックスケーリング

  1. 次のコマンドを実行して、ACKクラスターでHelmを使用してRayクラスターをデプロイします。

    helm uninstall ${RAY_CLUSTER_NAME} -n ${RAY_CLUSTER_NS}
    helm install ${RAY_CLUSTER_NAME} aliyunhub/ack-ray-cluster -n ${RAY_CLUSTER_NS} 
  2. 次のコマンドを実行して、Rayクラスターのリソースのステータスを表示します。

    kubectl get pod -n ${RAY_CLUSTER_NS}
    名前準備ができているステータスの履歴書
    myfirst-ray-cluster-head-kvvdf 2/2実行中0 22m 
  3. 次のコマンドを実行して、ヘッドノードにログインし、クラスターのステータスを表示します。

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

    kubectl -n ${RAY_CLUSTER_NS} exec -it myfirst-ray-cluster-head-kvvdf -- bash
    (base) ray @ myfirst-ray-cluster-head-kvvdf:~$ ray status 

    期待される出力:

    ========= オートスケーラーステータス: 2024-01-25 00:00:19.879963 =======
    ノードのステータス
    ---------------------------------------------------------------
    健康:
     1ヘッドグループ
    保留中:
     (保留ノードなし)
    最近の失敗:
     (失敗なし)
    
    リソース
    ---------------------------------------------------------------
    使用法:
     0B/1.86GiBメモリ
     0B/452.00MiB object_store_memory
    
    要求:
     (リソース要求なし) 
  4. Rayクラスターで次のジョブを送信して実行します。

    次のコードは15のタスクを開始し、それぞれに1つのvCPUが必要です。 既定では、先頭ポッドの -- num-cpusの値は0です。つまり、タスクのスケジューリングは許可されていません。 ワーカーポッドのCPUとメモリは、デフォルトで1 vCPUと1 GBに設定されています。 したがって、Rayクラスターは自動的に15個のワーカーポッドを作成します。 ACKクラスターのノードリソースが不十分なため、保留状態のポッドは自動的にノード自動スケーリング機能をトリガーします。

    インポート時間
    レイのインポート
    インポートソケット
    
    ray.init()
    
    @ ray.remote(num_cpus=1)
    def get_task_hostname():
        time.sleep(120)
        host = socket.gethostbyname(socket.gethostname())
        ホストを返す
    
    object_refs = []
    範囲内の_の場合 (15):
        object_refs.append(get_task_hostname.remote())
    
    ray.wait(object_refs)
    
    object_refsのtの場合:
        print(ray.get(t)) 
  5. 次のコマンドを実行して、Rayクラスター内のポッドのステータスを照会します。

    kubectl get pod -n ${RAY_CLUSTER_NS} -w
    # 期待される出力:
    名前準備ができているステータスの履歴書
    myfirst-ray-cluster-head-kvvdf 2/2実行中0 47m
    myfirst-ray-cluster-worker-workergroup-btgmm 1/1実行0 30s
    myfirst-ray-cluster-worker-workergroup-c2lmq 0/1保留中0 30秒
    myfirst-ray-cluster-worker-workergroup-gstcc 0/1保留中0 30秒
    myfirst-ray-cluster-worker-workergroup-hfshs 0/1保留中0 30秒
    myfirst-ray-cluster-worker-workergroup-nrfh8 1/1ランニング0 30s
    myfirst-ray-cluster-worker-workergroup-pjbdw 0/1保留中0 29s
    myfirst-ray-cluster-worker-workergroup-qxq7v 0/1保留中0 30秒
    myfirst-ray-cluster-worker-workergroup-sm8mt 1/1ランニング0 30s
    myfirst-ray-cluster-worker-workergroup-wr87d 0/1保留中0 30秒
    myfirst-ray-cluster-worker-workergroup-xc4kn 1/1ランニング0 30s
    ... 
  6. 次のコマンドを実行して、ノードのステータスを照会します。

    kubectl get node -w
    # 期待される出力:
    cn-hangzhou.172.16.0.204準備 <none> 44h v1.24.6-aliyun.1
    cn-hangzhou.172.16.0.17 NotReady <none> 0s v1.24.6-aliyun.1
    cn-hangzhou.172.16.0.17 NotReady <none> 0s v1.24.6-aliyun.1
    cn-hangzhou.172.16.0.17 NotReady <none> 0s v1.24.6-aliyun.1
    cn-hangzhou.172.16.0.17 NotReady <none> 1s v1.24.6-aliyun.1
    cn-hangzhou.172.16.0.17 NotReady <none> 11s v1.24.6-aliyun.1
    cn-hangzhou.172.16.0.16 NotReady <none> 10s v1.24.6-aliyun.1
    cn-hangzhou.172.16.0.16 NotReady <none> 14s v1.24.6-aliyun.1
    cn-hangzhou.172.16.0.17 NotReady <none> 31s v1.24.6-aliyun.1
    cn-hangzhou.172.16.0.17 NotReady <none> 60s v1.24.6-aliyun.1
    cn-hangzhou.172.16.0.17準備 <none> 61s v1.24.6-aliyun.1
    cn-hangzhou.172.16.0.16準備 <none> 64s v1.24.6-aliyun.1
    ... 

関連ドキュメント