VT2020-Peloton-Demo
Créer et démarrer un minicluster en local
Un minicluster peut être lancé localement sur une machine. Il se compose de composants Peloton ainsi que de dépendances comme Zookeeper, Cassandra, Mesos master et agents. Un minicluster lance tous ces composants via un Docker Engine qui doit être installé au préalable.
Pour lancer un minicluster il suffit de suivre les étapes suivantes :
- Installer docker engine (version 1.12.1 minimum)
- Installer le package python
docker-py
:
$ pip install docker-py
- Récupérer la dernière image Peloton de docker-hub :
$ docker pull uber/peloton
- Lancer le minicluster localement :
$ PELOTON=app make minicluster
Installer Peloton CLI
Le package Peloton CLI n'étant pas disponible, il faut build peloton localement. Pour savoir comment configurer l'environnement et construire le binaire Peloton CLI, suivre les instructions se trouvant dans Peloton Developer Guide.
$ make
Peloton CLI est disponible ici :
$ {$home}/bin/peloton
Example HelloWorld
Créer un pool de ressources
Il est nécessaire de disposer d'un pool de ressources avant de commencer à travailler dans un cluster Peloton. Chaque pool de ressources spécifie la réservation, la limite et les parts des ressources pour une organisation ou une équipe. Voici un exemple de spécification pour un pool de ressources qui réserve 12 cœurs de CPU, 4 Go de mémoire et 2 GPU :
name: HelloWorldPool owningteam: MyTeam ldapgroups: - MyGroup description: "My first resource pool on Peloton" resources: - kind: cpu reservation: 12 limit: 24 - kind: memory reservation: 4096 limit: 8192 share: 1 - kind: gpu reservation: 2 limit: 4 share: 1
Pour créer un pool de ressources :
$ bin/peloton respool create /HelloWorldPool example/helloworld_pool.yaml Resource Pool fa651fc9-086d-4e8f-a823-d6bf6f144481 created at /HelloWorldPool
Créer un job
Un job est un ensemble d'instances dans Peloton. Pour en créer un, il faut disposer d'un pool de ressources et d'une spécification. Le pool de ressources spécifie où les ressources sont comptabilisées pour le programme à exécuter. La spécification du programme décrit sa configuration détaillée, comme les limites des ressources, l'image du conteneur, etc.
Voici un exemple de spécification de programme avec 10 instances. On commence par spécifier le pool de ressources et la spec du programme :
$ bin/peloton job create /HelloWorldPool example/helloworld_job.yaml Job 3a6d6cfe-4b25-4137-af65-61d3070d4ac3 created
Chaque instance affiche un message et se met ensuite en veille pendant 1 minute
name: HelloWorld owningteam: MyTeam ldapgroups: - MyGroup description: "A Hello World batch job on Peloton" instancecount: 10 defaultconfig: resource: cpulimit: 1 memlimitmb: 1024 disklimitmb: 1024 fdlimit: 10 container: type: 1 docker: image: "debian" parameters: - key: env value: MESSAGE=HelloWorld - key: env value: SLEEP_SECONDS=300 volumes: - containerpath: /tmp hostpath: /tmp mode: 1 command: shell: true value: 'echo $MESSAGE && sleep $SLEEP_SECONDS'
Vérifier l'état
Il suffit de lancer la commande suivante :
$ bin/peloton job status 3a6d6cfe-4b25-4137-af65-61d3070d4ac3 creationTime: 2019-02-09T02:32:17.3281139Z desiredStateVersion: "1" goalState: SUCCEEDED startTime: 2019-02-09T02:32:24.448294878Z state: RUNNING stateVersion: "1" taskStats: DELETED: 0 FAILED: 0 INITIALIZED: 0 KILLED: 0 KILLING: 0 LAUNCHED: 0 LAUNCHING: 0 LOST: 0 PENDING: 8 PLACED: 0 PLACING: 0 PREEMPTING: 0 READY: 0 RUNNING: 2 STARTING: 0 SUCCEEDED: 0 UNKNOWN: 0
Lister les instances
$ bin/peloton task list 3a6d6cfe-4b25-4137-af65-61d3070d4ac3 Instance| Name| State| Healthy| Start Time| Run Time| Host| Message| Reason| 0| | RUNNING| DISABLED| 2019-02-09T02:32:27Z| 00:00:11| peloton-mesos-agent2| | | 1| | RUNNING| DISABLED| 2019-02-09T02:32:27Z| 00:00:11| peloton-mesos-agent2| | | 2| | PENDING| DISABLED| | | | Task sent for placement| | 3| | PENDING| DISABLED| | | | Task sent for placement| | 4| | PENDING| DISABLED| | | | Task sent for placement| | 5| | PENDING| DISABLED| | | | Task sent for placement| | 6| | PENDING| DISABLED| | | | Task sent for placement| | 7| | PENDING| DISABLED| | | | Task sent for placement| | 8| | PENDING| DISABLED| | | | Task sent for placement| | 9| | PENDING| DISABLED| | | | Task sent for placement| |