Sur ACK Serverless, déployez Fluid pour mettre en cache localement les données OSS afin que les lectures répétées par les Jobs s'achèvent en moins d'une seconde. Le contrôleur Fluid, le système de cache et les pods applicatifs peuvent tous s'exécuter dans l'environnement Serverless.
Déployez Fluid, configurez un Dataset et un JindoRuntime adossés à un compartiment OSS, puis exécutez un Job qui lit les données mises en cache.
Prérequis
Assurez-vous de disposer des éléments suivants :
Un cluster ACK Serverless exécutant Kubernetes 1.18 ou une version ultérieure avec CoreDNS.
kubectl configuré pour se connecter au cluster.
Une instance OSS activée avec un compartiment prêt à l'emploi.
Limites
Fluid entre en conflit avec la fonctionnalité de planification des nœuds virtuels des clusters ACK Serverless ; vous ne pouvez pas utiliser les deux simultanément. Consultez la rubrique Activer la politique de planification des nœuds virtuels pour un cluster.
Pour éviter ce problème, tous les pods de travail du cache JindoRuntime et les pods applicatifs doivent inclure l'annotation alibabacloud.com/burst-resource: eci_only. Cette annotation figure dans les exemples YAML ci-dessous.
Déployer le plan de contrôle Fluid
Si Fluid open source est installé, désinstallez-le avant de déployer ack-fluid.
Dans la console ACK, cliquez sur Clusters dans le volet de navigation.
Cliquez sur le nom du cluster. Dans le volet de navigation, cliquez sur Applications > Helm.
Sur la page Helm, cliquez sur Deploy.
-
Dans la section Basic Information, définissez les paramètres suivants, puis cliquez sur Next.
Le nom de version par défaut est
ack-fluidet l'espace de noms estfluid-system. Si vous les modifiez, une boîte de dialogue Confirm s'affiche ; cliquez sur Yes pour revenir aux valeurs par défaut.Parameter Value Source Marketplace Chart Recherchez et sélectionnez ack-fluid Dans la section Parameters, cliquez sur OK.
-
Vérifiez que le plan de contrôle Fluid est en cours d'exécution :
Dataset Controller — gère les cycles de vie des ressources personnalisées (CR) Dataset.
Fluid Webhook — injecte un sidecar de mise en cache dans les pods applicatifs pour un accès transparent aux données dans les scénarios Serverless. — injecte un sidecar de mise en cache dans les pods applicatifs pour un accès transparent aux données.
Le plan de contrôle Fluid comprend également des contrôleurs pour JindoFS, JuiceFS et Alluxio. Ceux-ci montent en puissance à la demande lorsque vous configurez chaque système de mise en cache.
kubectl get pod -n fluid-systemSortie attendue :
NAME READY STATUS RESTARTS AGE dataset-controller-d99998f79-dgkmh 1/1 Running 0 2m48s fluid-webhook-55c6d9d497-dmrzb 1/1 Running 0 2m49sCes deux composants remplissent des rôles distincts :
Accélérer l'accès aux données
Charger des données de test dans OSS
Créez un fichier de test de 2 Go, tel que cet exemple de jeu de données.
Chargez le fichier dans votre compartiment OSS à l'aide de ossutil.
Créer les ressources Dataset et JindoRuntime
Cet exemple utilise JindoFS comme backend de cache (JindoRuntime). Fluid représente les sources de données sous forme de deux ressources personnalisées (CR) :
Dataset — pointe vers les données dans le système de stockage externe.
JindoRuntime — définit la configuration du système de mise en cache.
Fluid utilise le chargement différé : le premier accès récupère les données depuis OSS vers le cache local ; les lectures suivantes proviennent du cache. Pour éliminer la latence lors de la première exécution, préchauffez le cache avant de soumettre votre Job.
-
Créez un Secret pour stocker les identifiants OSS :
kubectl create secret generic oss-access-key \ --from-literal=fs.oss.accessKeyId=<access_key_id> \ --from-literal=fs.oss.accessKeySecret=<access_key_secret> -
Créez un fichier nommé
dataset.yaml:Parameter Description mountPointChemin de montage OSS au format oss://<bucket_name>/<bucket_path>. Définissezpathsur/pour un point de montage unique.fs.oss.endpointEndpoint du compartiment OSS. Utilisez un endpoint interne (par exemple, oss-cn-hangzhou-internal.aliyuncs.com) pour un accès dans la même région ; utilisez un endpoint public (par exemple,oss-cn-hangzhou.aliyuncs.com) dans le cas contraire.replicasNombre de pods de travail du cache. Détermine la capacité totale du cache. alibabacloud.com/burst-resource: eci_onlyDésactive la planification des nœuds virtuels sur les pods de travail du cache. Obligatoire, car Fluid entre en conflit avec la planification des nœuds virtuels (voir la section Limites). k8s.aliyun.com/eci-use-specsSpécification de l'instance ECI pour chaque pod de travail du cache. k8s.aliyun.com/eci-image-cacheActive le cache d'image d'instance pour accélérer le démarrage des pods. tieredstore.levels.mediumtypeSupport de cache. Valeurs valides : MEM(mémoire),SSD,HDD. Consultez la rubrique Sélectionner un support de cache.tieredstore.levels.volumeTypeType de volume. Utilisez emptyDirpour la mémoire ou le disque système (évite que le cache résiduel n'affecte la disponibilité du nœud). UtilisezhostPathpour les disques de données et définissezpathsur le point de montage. Par défaut :hostPath.tieredstore.levels.pathChemin du cache. Un seul chemin est pris en charge. tieredstore.levels.quotaCapacité maximale du cache par travailleur, par exemple 10Gi.tieredstore.levels.high/lowSeuils haut et bas pour l'éviction du cache. apiVersion: data.fluid.io/v1alpha1 kind: Dataset metadata: name: demo-dataset spec: mounts: - mountPoint: oss://<bucket_name>/<bucket_path> name: demo path: / options: fs.oss.endpoint: oss-<region>.aliyuncs.com encryptOptions: - name: fs.oss.accessKeyId valueFrom: secretKeyRef: name: oss-access-key key: fs.oss.accessKeyId - name: fs.oss.accessKeySecret valueFrom: secretKeyRef: name: oss-access-key key: fs.oss.accessKeySecret --- apiVersion: data.fluid.io/v1alpha1 kind: JindoRuntime metadata: name: demo-dataset spec: # Number of cache worker nodes replicas: 2 worker: podMetadata: annotations: # Required: disable virtual node scheduling (conflicts with Fluid — see Limitations) alibabacloud.com/burst-resource: eci_only # ECI instance spec for the JindoFS cache worker pod k8s.aliyun.com/eci-use-specs: <eci_instance_spec> # Enable instance image cache to speed up pod startup k8s.aliyun.com/eci-image-cache: "true" tieredstore: levels: # 10 GiB of memory cache per worker node - mediumtype: MEM volumeType: emptyDir path: /dev/shm quota: 10Gi high: "0.99" low: "0.99"Paramètres clés :
-
Appliquez le manifeste :
kubectl create -f dataset.yaml -
Attendez une à deux minutes que le système de mise en cache soit déployé, puis vérifiez l'état du Dataset :
Si
PHASEindiqueNotBound, le système de mise en cache est toujours en cours d'initialisation. Attendez une à deux minutes et vérifiez à nouveau.kubectl get dataset demo-datasetSortie attendue :
NAME UFS TOTAL SIZE CACHED CACHE CAPACITY CACHED PERCENTAGE PHASE AGE demo-dataset 1.16GiB 0.00B 20.00GiB 0.0% Bound 2m58sPHASE: Boundconfirme le déploiement réussi. Les autres colonnes indiquent la taille des données OSS, la quantité mise en cache et la capacité totale du cache.
Préchauffer le cache (facultatif)
Fluid utilise le chargement différé, de sorte que la première exécution du Job récupère les données depuis OSS et peut prendre plusieurs dizaines de secondes pour les grands jeux de données. Préchauffez le cache pour éliminer la latence lors de la première exécution.
-
Créez un fichier nommé
dataload.yaml:apiVersion: data.fluid.io/v1alpha1 kind: DataLoad metadata: name: data-warmup spec: dataset: name: demo-dataset namespace: default loadMetadata: true -
Démarrez la tâche de préchauffage :
kubectl create -f dataload.yamlAttendez que l'état affiche
Complete:NAME DATASET PHASE AGE DURATION data-warmup demo-dataset Complete 99s 58sLe préchauffage du cache s'est achevé en environ
58s.
Créer une application Job
Utilisez des conteneurs applicatifs ou des jobs de machine learning pour accéder aux données accélérées via JindoFS. Cet exemple crée un Job qui lit les données OSS. Le PVC demo-dataset lit automatiquement depuis le cache JindoFS, sans modification du code. L'étiquette alibabacloud.com/fluid-sidecar-target: eci déclenche l'injection du sidecar de mise en cache par Fluid Webhook.
-
Créez un fichier nommé
job.yaml:apiVersion: batch/v1 kind: Job metadata: name: demo-app spec: template: metadata: labels: alibabacloud.com/fluid-sidecar-target: eci annotations: # Required: disable virtual node scheduling (conflicts with Fluid — see Limitations) alibabacloud.com/burst-resource: eci_only # ECI instance spec for the application pod k8s.aliyun.com/eci-use-specs: ecs.g7.4xlarge spec: containers: - name: demo image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6 command: - /bin/bash args: - -c - du -sh /data && time cp -r /data/ /tmp volumeMounts: - mountPath: /data name: demo restartPolicy: Never volumes: - name: demo persistentVolumeClaim: claimName: demo-dataset backoffLimit: 4 -
Soumettez le Job :
kubectl create -f job.yaml -
Consultez les journaux du Job une fois celui-ci terminé :
kubectl logs demo-app-jwktf -c demoSortie attendue :
1.2G /data real 0m0.992s user 0m0.004s sys 0m0.674sLe temps
realpour la copie du fichier est de0m0.992s.
Nettoyer les ressources
Nettoyez les ressources pour éviter des frais inutiles.
-
Supprimez le Job :
kubectl delete job demo-app -
Supprimez le Dataset. Cela supprime également les composants associés du système de mise en cache :
ImportantLe nettoyage prend environ une minute. Attendez que tous les pods de mise en cache soient supprimés avant de continuer.
kubectl delete dataset demo-dataset -
Réduisez le plan de contrôle Fluid :
kubectl get deployments.apps -n fluid-system | awk 'NR>1 {print $1}' | xargs kubectl scale deployments -n fluid-system --replicas=0Pour réactiver l'accès aux données, augmentez à nouveau le nombre de réplicas du plan de contrôle avant de créer de nouvelles ressources Dataset et JindoRuntime :
kubectl scale -n fluid-system deployment dataset-controller --replicas=1 kubectl scale -n fluid-system deployment fluid-webhook --replicas=1