Rayオートスケーラーと統合することで、Container Service for Kubernetes (ACK) クラスターにRayクラスターを作成し、Rayクラスター内のElastic Container Instanceノードを自動的にスケールするように設定できます。 これにより、メンテナンス不要で分離された、迅速な起動が可能なコンテナーランタイム環境の恩恵を受けることができます。 Elastic Container Instanceを使用すると、基盤となるElastic Compute Service( ECS) インスタンスを購入または管理することなく、コンテナを実行できます。 基盤となるインフラストラクチャのメンテナンスではなく、コンテナ化されたアプリケーションに集中できます。 コンテナで使用されているリソースに対してのみ課金されます。
前提条件
(オプション) Rayクラスターでジョブを送信する方法を学習しました。 詳細については、「Rayジョブの送信」をご参照ください。
ack-virtual-nodeコンポーネントがデプロイされ、ポッドはElastic Container Instanceノードにスケジュールされます。 詳細については、「仮想ノードを使用してElastic Container Instanceノードで実行するポッドをスケジュールする」をご参照ください。
のクラスタアーキテクチャの例

手順
次のコマンドを実行してノードを照会し、
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次のコマンドを実行して、values.yamlという名前のファイルを作成します。
cat > values.yaml <<EOF ワーカー: groupName: workergroup ラベル: alibabacloud.com/eci: "true" EOF次のコマンドを実行して、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次のコマンドを実行して、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>次のコマンドを実行して、ヘッドノードにログインします。
値をRayクラスターの実際のポッド名に置き換えます。
kubectl -n ${RAY_CLUSTER_NS} exec -it myfirst-ray-cluster-head-7fgp4 -- bashRayクラスターで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))次のコマンドを実行して、ポッドが期待どおりに実行されるかどうかを確認します。
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>
関連ドキュメント
仮想ノードの詳細については、「仮想ノード」をご参照ください。
RayオートスケーラーとACKオートスケーラーに基づくエラスティックスケーリングを参照し、ECSノードのオートスケーリングを設定することもできます。