Utilisez l'opérateur KubeRay pour déployer et gérer des clusters Ray destinés aux charges de travail d'IA distribuée sur ACK.
Prérequis
Vérifiez les points suivants :
Un cluster managé Pro ACK exécutant Kubernetes v1.24 ou version ultérieure (créer | mettre à niveau).
Au moins un nœud disposant de 8 vCPU et de 32 Go de mémoire (test). Adaptez la taille à votre charge de travail en production. Pour les charges de travail GPU, utilisez des familles d'instances Elastic Compute Service (ECS) prises en charge.
kubectl est installé et connecté à votre cluster.
(Facultatif) Une instance ApsaraDB for Tair pour la tolérance aux pannes du Global Control Store (GCS).
(Facultatif) Configurer la tolérance aux pannes du GCS
Créez une instance ApsaraDB for Tair (compatible Redis) :
Dans la même région et le même Virtual Private Cloud (VPC) que votre cluster ACK (créer une instance).
Une liste d'autorisation autorisant l'accès depuis le bloc CIDR du VPC.
Un endpoint VPC (recommandé). Afficher les adresses de connexion.
Le mot de passe de l'instance (modifier ou réinitialiser).
Installer l'opérateur KubeRay
Connectez-vous à la console ACK.
Dans le volet de navigation de gauche, cliquez sur Clusters. Cliquez sur le nom de votre cluster.
Accédez à Operations > Add-ons > Manage Applications.
Sous Kuberay-Operator, cliquez sur Install.

Déployer le cluster Ray
Cet exemple utilise rayproject/ray:2.36.1 de Docker Hub. Si le téléchargement échoue, utilisez l'une des alternatives suivantes :
Répliquez l'image via Container Registry depuis l'extérieur de la Chine continentale (s'abonner aux images hors de Chine).
Créez une instance Global Accelerator pour télécharger des images depuis l'étranger.
Créez un cluster Ray nommé myfirst-ray-cluster :
Le manifeste configure les éléments suivants :
| Composant | Paramètre | Notes |
|---|---|---|
| Nœud principal | num-cpus: "0" |
Réserve le nœud principal pour la gestion du cluster |
Groupe de workers work1 |
1 réplica, extensible jusqu'à 1 000 | Ajustez replicas en fonction de votre charge de travail |
| Mise à l'échelle automatique | Désactivée (enableInTreeAutoscaling: false) |
Activez cette option après avoir analysé les modèles de ressources de votre charge de travail |
Manifeste complet
cat <<EOF | kubectl apply -f -
apiVersion: ray.io/v1
kind: RayCluster
metadata:
name: myfirst-ray-cluster
namespace: default
spec:
suspend: false
autoscalerOptions:
env: []
envFrom: []
idleTimeoutSeconds: 60
imagePullPolicy: Always
resources:
limits:
cpu: 2000m
memory: 2024Mi
requests:
cpu: 2000m
memory: 2024Mi
securityContext: {}
upscalingMode: Default
enableInTreeAutoscaling: false
headGroupSpec:
rayStartParams:
dashboard-host: 0.0.0.0
num-cpus: "0"
serviceType: ClusterIP
template:
spec:
containers:
- image: rayproject/ray:2.36.1
imagePullPolicy: Always
name: ray-head
resources:
limits:
cpu: "4"
memory: 4G
requests:
cpu: "1"
memory: 1G
workerGroupSpecs:
- groupName: work1
maxReplicas: 1000
minReplicas: 0
numOfHosts: 1
rayStartParams: {}
replicas: 1
template:
spec:
containers:
- image: rayproject/ray:2.36.1
imagePullPolicy: Always
name: ray-worker
resources:
limits:
cpu: "4"
memory: 4G
requests:
cpu: "4"
memory: 4G
EOF
Vérifier le déploiement
Confirmez que le cluster est en cours d'exécution :
-
Vérifiez l'état du cluster Ray :
kubectl get rayclusterRésultat attendu :
NAME DESIRED WORKERS AVAILABLE WORKERS CPUS MEMORY GPUS STATUS AGE myfirst-ray-cluster 1 1 5 5G 0 ready 4m19s -
Vérifiez les Pods :
kubectl get podRésultat attendu :
NAME READY STATUS RESTARTS AGE myfirst-ray-cluster-head-5q2hk 1/1 Running 0 4m37s myfirst-ray-cluster-work1-worker-zkjgq 1/1 Running 0 4m31s -
Vérifiez les Services :
kubectl get svcRésultat attendu :
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 192.168.0.1 <none> 443/TCP 21d myfirst-ray-cluster-head-svc ClusterIP None <none> 10001/TCP,8265/TCP,8080/TCP,6379/TCP,8000/TCP 6m57s
Lorsque l'état du cluster Ray est ready et que tous les Pods affichent 1/1 Running, le déploiement est terminé.