Commit 1fb0f274 authored by Martin Souchal's avatar Martin Souchal
Browse files

update

parent cea16a87
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 68 66"><defs><style>.cls-1{fill:#316ce6;}</style></defs><title>kubernetes_icons</title><path class="cls-1" d="M62.94206,39.30176c-.14868-.03428-.361-.09292-.50677-.11977a14.71841,14.71841,0,0,0-1.67107-.13464,16.2992,16.2992,0,0,1-3.12656-.513,1.9597,1.9597,0,0,1-.75169-.75665l-.70378-.20486A22.64869,22.64869,0,0,0,52.55176,21.8852c.18008-.16356.52123-.46547.61746-.55427a1.3787,1.3787,0,0,1,.32711-.98712,16.31266,16.31266,0,0,1,2.59252-1.82141,14.49625,14.49625,0,0,0,1.44845-.845c.11234-.08343.266-.2156.3837-.30977a1.752,1.752,0,1,0-2.17083-2.72592c-.11894.09376-.28085.21684-.38658.30853a14.45744,14.45744,0,0,0-1.15191,1.2184,16.32712,16.32712,0,0,1-2.35008,2.12622,1.937,1.937,0,0,1-1.05732.11482l-.66331.47373a22.84364,22.84364,0,0,0-14.46885-6.99116c-.01611-.2317-.03594-.65133-.04213-.77812a1.38116,1.38116,0,0,1-.56873-.87147,16.32741,16.32741,0,0,1,.19743-3.16207,14.50184,14.50184,0,0,0,.23748-1.657c.00537-.14043-.00289-.34446-.00289-.496a1.752,1.752,0,1,0-3.48629.00165c0,.01652.00372.03221.00413.04873-.00165.14456-.00867.31968-.00413.44607a14.652,14.652,0,0,0,.2379,1.65826,16.30436,16.30436,0,0,1,.19412,3.16124,1.90033,1.90033,0,0,1-.56584.90121l-.0413.73765a22.73722,22.73722,0,0,0-3.15133.48447A22.42237,22.42237,0,0,0,17.292,18.87347q-.318-.21931-.63027-.44689a1.37655,1.37655,0,0,1-1.035-.10036,16.2653,16.2653,0,0,1-2.35008-2.12332,14.55977,14.55977,0,0,0-1.147-1.21841c-.10614-.09086-.26846-.21476-.38741-.30976a2.07752,2.07752,0,0,0-1.2151-.45845,1.67933,1.67933,0,0,0-1.389.6154,1.84744,1.84744,0,0,0,.42871,2.5698l.02685.019c.114.09334.25442.21271.36015.28994a14.56165,14.56165,0,0,0,1.44515.84586,16.25954,16.25954,0,0,1,2.5921,1.82224,1.937,1.937,0,0,1,.35066,1.00529l.558.49892a22.5562,22.5562,0,0,0-3.5565,15.72485l-.7298.21229a2.41,2.41,0,0,1-.74921.75458,16.26839,16.26839,0,0,1-3.12449.515,14.56589,14.56589,0,0,0-1.67231.13464c-.13382.02478-.31967.07187-.46547.10821l-.01528.00331-.02478.00743a1.74955,1.74955,0,1,0,.77441,3.39667l.026-.00413c.01156-.00248.02147-.00826.033-.01032.14373-.03305.32463-.06732.451-.10161a14.69936,14.69936,0,0,0,1.56368-.59929,16.32534,16.32534,0,0,1,3.039-.89418,1.933,1.933,0,0,1,1.002.354l.76-.1301A22.68377,22.68377,0,0,0,22.26389,53.90444l-.31761.76a1.72965,1.72965,0,0,1,.15571.98587,17.02778,17.02778,0,0,1-1.57773,2.83495,14.53108,14.53108,0,0,0-.93466,1.3927c-.06939.13134-.15736.33248-.22386.47a1.75037,1.75037,0,1,0,3.14762,1.49348l.00289-.00331V61.834c.06608-.1363.15984-.31514.2156-.44276a14.4168,14.4168,0,0,0,.503-1.59755,12.191,12.191,0,0,1,1.34975-3.13151,1.4167,1.4167,0,0,1,.75128-.36676l.39525-.71452a22.55783,22.55783,0,0,0,16.08541.04089c.11069.19742.3172.57492.37171.67033a1.37739,1.37739,0,0,1,.89006.54105,16.23426,16.23426,0,0,1,1.19692,2.93078,14.5697,14.5697,0,0,0,.50595,1.59755c.05658.12886.14869.30976.2156.44688a1.75119,1.75119,0,1,0,3.15133-1.48975c-.0665-.13753-.15819-.33868-.22716-.46919A14.48039,14.48039,0,0,0,46.98634,58.46a16.26143,16.26143,0,0,1-1.54552-2.76722,1.36873,1.36873,0,0,1,.13382-1.02842,5.99541,5.99541,0,0,1-.29035-.70337A22.683,22.683,0,0,0,55.3322,41.3206c.22551.03593.61828.10449.74591.13051a1.37823,1.37823,0,0,1,.97472-.36222,16.30543,16.30543,0,0,1,3.03981.89418,14.511,14.511,0,0,0,1.56452.60384c.126.033.30563.06443.45018.09623.012.00331.02272.00826.03428.01157l.02478.00372a1.74955,1.74955,0,1,0,.77565-3.39667ZM46.38,21.54735l-7.44961,5.28126-.026-.01239a1.53767,1.53767,0,0,1-2.44218-1.17214L36.454,25.64,35.93645,16.511a18.11083,18.11083,0,0,1,10.44317,5.03634ZM32.3465,31.554h2.80357L36.893,33.733l-.6249,2.71766-2.51776,1.21179-2.52519-1.21427-.62614-2.7189ZM29.709,16.83068a18.45074,18.45074,0,0,1,1.85982-.31967l-.51833,9.143-.038.01817A1.53643,1.53643,0,0,1,28.574,26.85009l-.01446.00826L21.0616,21.542A17.95264,17.95264,0,0,1,29.709,16.83068ZM18.3427,24.95888l6.84536,6.12258-.00743.03717a1.53642,1.53642,0,0,1-.60383,2.64125l-.007.02974-8.77458,2.5318a17.9473,17.9473,0,0,1,2.5475-11.36213ZM27.508,41.22354,24.0217,49.64787A18.04728,18.04728,0,0,1,16.779,40.58295l8.99677-1.52817.01529.02024a1.5097,1.5097,0,0,1,.3015-.02685A1.53642,1.53642,0,0,1,27.482,41.18968ZM37.79875,52.057a18.02283,18.02283,0,0,1-9.836-.50512l4.42466-8.001h.00744a1.53849,1.53849,0,0,1,2.70816-.00247h.033l4.43582,8.0142q-.86362.28828-1.77309.49521Zm5.71659-2.37527-3.52222-8.51024.01073-.01528a1.5385,1.5385,0,0,1,.74467-1.992,1.522,1.522,0,0,1,.58856-.15282,1.48213,1.48213,0,0,1,.35312.026l.01529-.019,9.0769,1.53395a17.97868,17.97868,0,0,1-7.267,9.12977Zm8.2203-13.39005-8.81877-2.54006-.00826-.03717a1.53849,1.53849,0,0,1-.603-2.64125l-.0033-.01776L49.10966,24.963A18.288,18.288,0,0,1,51.73521,36.2921Z"/></svg>
\ No newline at end of file
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 207 60" class="logo" height="120"><g fill="none"><path class="top" fill="#25BA81" d="M26.03.01L0 15.05l17.56 10.32 3.56-2.17 8.63 4.82v-10l8.27-4.97v10.02l14.48-8.02v-.04"/><path class="left" fill="#25BA81" d="M22.75 32.03v9.99l-7.88 5v-20l2.99-1.83L.15 15.05H0v29.96l26.25 15V34.03"/><path class="right" fill="#1F9967" d="M38.02 23.07v9.95l-6.93 4.01-4.84-3v25.98h.14l26.11-15V15.05l-.49-.01"/><path class="text" fill="#000" d="M78.49 21.83v24.24h-5.9v-32h8.06l12.14 24.32V14.1h5.9v32h-8.06m22.46.45c-8 0-10.18-4.42-10.18-9.22v-5.9c0-4.8 2.16-9.22 10.18-9.22s10.18 4.42 10.18 9.22v5.91c0 4.79-2.16 9.21-10.18 9.21zm0-19.35c-3.12 0-4.32 1.39-4.32 4v6.29c0 2.64 1.2 4 4.32 4s4.32-1.39 4.32-4v-6.25c0-2.64-1.2-4.04-4.32-4.04zm27.99 18.87V29.75c0-1.25-.53-1.87-1.87-1.87a16.16 16.16 0 00-6.1 2v16.19h-5.86V22.69h4.46l.58 2a23.424 23.424 0 019.36-2.45 4.438 4.438 0 014.42 2.5 22.996 22.996 0 019.41-2.5c3.89 0 5.28 2.74 5.28 6.91v16.92h-5.86V29.75c0-1.25-.53-1.87-1.87-1.87-2.15.234-4.23.915-6.1 2v16.19h-5.85zm41.81 0h-4.8l-.43-1.58a12.785 12.785 0 01-7 2.06c-4.27 0-6.1-2.93-6.1-7 0-4.75 2.06-6.58 6.82-6.58H177v-2.41c0-2.59-.72-3.5-4.46-3.5-2.18.024-4.35.265-6.48.72l-.72-4.46a30.462 30.462 0 018-1.1c7.34 0 9.5 2.59 9.5 8.45l.05 15.4zM177 37.24h-4.32c-1.92 0-2.45.53-2.45 2.3 0 1.77.53 2.35 2.35 2.35a9.198 9.198 0 004.42-1.2v-3.45zm9.48-6.77c0-5.18 2.3-8.26 7.73-8.26 2.097.02 4.187.244 6.24.67v-9.74l5.86-.82v33.75h-4.66l-.58-2a12.308 12.308 0 01-7.39 2.45c-4.7 0-7.2-2.79-7.2-8.11v-7.94zm14-2.64a25.956 25.956 0 00-5.18-.62c-2.11 0-2.93 1-2.93 3.12v8.26c0 1.92.72 3 2.88 3a8.28 8.28 0 005.23-2.11V27.83zM77 7.86V4.63h-3v3.23h-1.42V.11h1.51v3.25h3V.11h1.51v7.75H77zm7 0h-1.2l-.11-.38A3.275 3.275 0 0181 8c-1.06 0-1.52-.7-1.52-1.66 0-1.14.51-1.57 1.7-1.57h1.4v-.62c0-.62-.18-.84-1.11-.84-.54.005-1.08.062-1.61.17l-.18-1.07a7.852 7.852 0 012-.26c1.83 0 2.37.62 2.37 2L84 7.86zm-1.39-2.11h-1.07c-.48 0-.61.13-.61.55 0 .42.13.56.59.56a2.366 2.366 0 001.1-.29l-.01-.82zM87.13 8a7.134 7.134 0 01-2-.32l.2-1.07a6.786 6.786 0 001.73.24c.65 0 .74-.14.74-.56 0-.42-.07-.52-1-.73-1.42-.33-1.59-.68-1.59-1.76s.51-1.62 2.18-1.62c.59.002 1.176.07 1.75.2L89 3.46a10.617 10.617 0 00-1.6-.16c-.63 0-.74.14-.74.48 0 .34 0 .48.82.68 1.63.41 1.78.62 1.78 1.77S88.88 8 87.13 8zm6.68-.11V4c0-.3-.13-.45-.47-.45-.53.05-1.047.203-1.52.45v3.86h-1.46V0l1.46.22v2.47a5.312 5.312 0 012.13-.54c1 0 1.32.65 1.32 1.65v4.06l-1.46.03zm2.68-6.38V.11h1.46v1.37l-1.46.03zm0 6.38V2.27h1.46v5.59l-1.46.03zm2.62-5.54c0-1.4.85-2.22 2.83-2.22.727 0 1.452.083 2.16.25l-.17 1.25a12.05 12.05 0 00-1.95-.2c-1 0-1.37.34-1.37 1.16V5.5c0 .81.33 1.16 1.37 1.16a12.05 12.05 0 001.95-.2l.17 1.25a9.408 9.408 0 01-2.16.25c-2 0-2.83-.81-2.83-2.22V2.35zM107.33 8c-2 0-2.53-1.06-2.53-2.2V4.36c0-1.15.54-2.2 2.53-2.2 1.99 0 2.53 1.06 2.53 2.2v1.41c0 1.15-.54 2.23-2.53 2.23zm0-4.63c-.78 0-1.08.33-1.08 1v1.5c0 .63.3 1 1.08 1s1.08-.33 1.08-1V4.31c-.01-.63-.3-.96-1.08-.96v.02zm6.64.09a11.47 11.47 0 00-1.54.81v3.6H111v-5.6h1.23l.1.62c.477-.308.99-.553 1.53-.73l.11 1.3zM119.8 6a1.72 1.72 0 01-.46 1.48 1.724 1.724 0 01-1.46.52 8.49 8.49 0 01-1.55-.16v2.26l-1.46.22v-8H116l.14.47a3.159 3.159 0 011.86-.64c1.17 0 1.79.67 1.79 1.94L119.8 6zm-3.48.63c.424.092.856.142 1.29.15.53 0 .73-.24.73-.75v-2c0-.46-.18-.71-.72-.71-.48.018-.937.197-1.3.51v2.8z"/></g></svg>
\ No newline at end of file
......@@ -31,30 +31,126 @@
---
# ComputeOps
- Le projet ComputeOps a pour objectif d'étudier les avantages des conteneurs pour les applications de type HPC. Lancé en 2018, le projet est financé par le master project DecaLog de l'IN2P3 dans le cadre du programme de R&D transverse.
- Le projet [ComputeOps](https://gitlab.in2p3.fr/CodeursIntensifs/DecaLog/-/wikis/ComputeOps) a pour objectif d'étudier les avantages des conteneurs pour les applications de type HPC. Lancé en 2018, le projet est financé par le master project DecaLog de l'IN2P3 dans le cadre du programme de R&D transverse.
- Participants IN2P3 : APC, LAL, LPNHE, LLR, IPHC
- Partenaires extérieurs :
- Groupe de travail Aristote sur la virtualisation légère.
- Ecole Centrale de Nantes
- IAS
- INRA
- Intel
- Sylabs
.right[![](images/logo-computeops-web.png)]
---
# Architecture HPC
### High Performance Computing
- Cluster de calcul
- Utilisation d'accélérateurs (GPUs, TPUs...)
- Calcul parrallèle avec mémoire partagée (MPI)
- Spark, hadoop...
- Scheduler (Univa, SGE, Slurm, etc...)
=> Une technologie de conteneur doit s'intégrer dans cet environnement
---
# Problématiques software HPC
---
# Les conteneurs
- Technologie apparue dans Solaris via les jails
- Basé sur les namespaces (kernel 2.4.19) et les cgroups (kernel 2.6.24)
- LXC en 2008, Docker en 2013, 2015 : Docker top 15 GitHub
- Basé sur les kernel namespaces (kernel 2.4.19) et les cgroups (kernel 2.6.24)
- LXC/LXD en 2008, Docker en 2013
- Kubernetes en 2014 chez Google
- 2015 : Docker top 15 GitHub, création de l'[Open Container Initiative](https://opencontainers.org/) (OCI)
---
# Les conteneurs
### Principe de base
- Au repos, un conteneur est un fichier (ou un ensemble de fichiers) qui est enregistré sur un disque.
- Au démarage du conteneur, le moteur décompresse les fichiers et les méta-données nécessaires, puis les transmet au noyau Linux, comme un processus normal.
- Au démarage du conteneur un appel API au noyau déclenche une isolation supplémentaire (si nécessaire) et monte une copie des fichiers de l'image du conteneur.
- Une fois lancés, les conteneurs ne sont un processus Linux comme un autre.
---
# Open Container initiative (OCI)
- Runtime : chargé d'executer le conteneur
- Image : contient les fichiers du conteneurs
- Manifeste : Fichier texte servant à construire le conteneur
*Le processus de démarrage des conteneurs, ainsi que le format de l'image sur le disque, sont définis et régis par des normes.*
- Gouvernance ouverte chapeautée par la Linux Foundation
- Standard pour les runtimes et les images de conteneurs (pas les manifestes !)
- Ligne de commande unifiée
```bash
docker run example.com/org/app:v1.0.0
alias docker=podman
alias docker=singularity
...
```
---
# Vocabulaire
- Runtime : moteur chargé d'executer le conteneur
- Image : fichier (ou un ensemble de fichiers) enregistré sur un disque
- Manifeste : Fichier texte, "recette" du conteneur
- Registre : un serveur abritant des images de conteneurs
- Repository : ensemble de registres
<img style="width:60%;" src="images/Containers-scheme.png" >
.footnote[Source : Manage Docker containers, by Bachir Chihani and Rafael Benevides]
---
# Manifeste
- Plusieurs formats de manifestes : Dockerfile, Singularity...
- Un manifeste est transformé en image via un mécanisme de build (intégré ou non)
- Un conteneur peut être construit "from scratch" ou a partir d'une autre image
```yaml
FROM python:3
RUN mkdir /code
RUN apt-get update -q && apt-get install graphviz libgraphviz-dev libldap2-dev libsasl2-dev -yqq
WORKDIR /code
COPY requirements.txt /code/
RUN pip install -r requirements.txt
COPY . /code/
```
```bash
docker build Dockerfile
```
---
# Runtimes
- Runtimes bas niveau : runc (docker), LXC/LXD, crun, conmon (RedHat)
- Runtimes haut niveau : Docker, Singularity, Podman (RedHat), containerd (Docker), CR-IO (Kubernetes)
- MicroVms : KataContainer (INTEL), Firecracker (AWS), gVisor (google)
- Image builder : buildah, img, orca-build...
<img style="width:30%;" src="images/runtime-architecture.png" >
<img style="width:20%;" src="images/docker-runtime.png" >
.footnote[Source : [Alterway](https://blog.alterway.fr/le-point-sur-les-container-runtimes.html), [XataZ](https://catlife.drycat.fr/~/XataZ/la-jungle-des-conteneurs)]
---
# Registres publics
### Ou trouver des images de conteneurs prêtes à l'emploi ?
* Images vérifées
- [NVIDIA NGC](https://ngc.nvidia.com) - images orientées GPU
- [Docker Hub](https://hub.docker.com/) - images officielles
* Libres
- [Docker Hub](https://hub.docker.com/)
- [Singularity Hub](https://singularity-hub.org/)
- [Sylabs cloud](https://cloud.sylabs.io/) - images signées
- [Quay.io](https://quay.io/) (scan de sécurité)
---
# Registres privés
### Comment partager ses applications conteneurisées ?
- Gitlab
- Harbor
- Singularity Hub
- Azure, AWS, etc...
---
# En quoi les conteneurs peuvent nous aider dans le contexte scientifique ?
......@@ -63,19 +159,15 @@
- Portabilité des logiciels
- Technologie simple à mettre en œuvre
- Rapidité de mise œuvre
* Répétabilité .red[*]
- Assurance de répétabilité
- Assurance de retrouver le même environnement
- Assurance de retrouver les même résultats
* Autres
* Simplicité
- Solution identique du laptop au meso-centre
- Interface graphique
.footnote[.red[*] pas de reproductibilité avec les conteneurs mais de la répétabilité !]
---
# Cas d'usage pratique dans la science
......@@ -83,13 +175,37 @@
* Les données restent dans les espaces de travail et n'ont pas besoin d'être intégrées au conteneur
* Tout ça de manière sécurisée sans avoir besoin d'être root
---
# Workflow HPC
- Build de l'image du conteneur sur le poste de travail, ou en CI
- Test en local
- Mise a disposition dans un catalogue
- Execution dans un environnement HPC
---
# Répétabilité
* Le journal [Rescience](http://rescience.github.io/) offre la possibilité de soumettre des articles scientifiques qui se doivent d'être reproductible.
* Figer l'environnement d'execution dans un conteneur et le joindre à une publication garantit la reproductibilité
* Voir le TP de Loic Gouarin : https://github.com/gouarin/container_precis2017
* Figer l'environnement d'execution dans un conteneur et le joindre à une publication garantit la répétabilité, parfois la reproductibilité
* La reproductibilité en informatique nécessite de partager un environnement logiciel *exactement identique*, mais aussi un hardware *exactement identique*....
* Executer un environnement logiciel exactement identique n'est pas garanti par l'utilisation de conteneurs.
- bonnes pratiques à respecter
- transparence totale
- rigueur
.right[![rescience](images/rescience.png)]
---
# Bonnes pratiques
- Partager le manifeste du conteneur avec le conteneur
- Utiliser l'intégration continue pour la génération de conteneurs
- Spécifier toutes les versions exactes des OS et des logiciels dans les manifestes (conda env export, pip freeze, etc....)
- Taguer les images des conteneurs
- Signer les conteneurs diffusés à l'aide de clés
- Préferer les catalogues d'images vérifiées, ou au moins ceux qui scannent les failles de sécurité
---
# Sécurité
---
background-image: url(images/docker.png)
# Docker et le calcul
......@@ -104,72 +220,14 @@
.right[![](images/docker-filesystems-multilayer.png)]
---
# Orchestrateur vs Job Scheduler
- Approche microservice vs Job (avec heure de début - fin)
- Job Scheduler plus avancé sur : mécanismes de files d’attente/de mises en attente ou pause (checkpointing), de priorités / Fair sharing, droits/accès et partages des ressources physiques.
- Intégration dans l’environnement cluster existant
- Kubernetes & Nomad
---
# Open Container initiative (OCI)
- Gouvernance ouverte chapeautée par la Linux Foundation
- Standard pour les runtimes et les images de conteneurs
- Ligne de commande unifiée
```bash
docker run example.com/org/app:v1.0.0
alias docker=podman
```
---
# Panorama des technologies de conteneurs
# Conteneurs orientés calcul
## 4 Conteneurs usermode compatibles HPC
- Runtimes :
- [Charlie-cloud](https://github.com/hpc/charliecloud) (dernière release 18/12/2020)
- [Singularity](https://github.com/hpcng/singularity) (12/01/2021)
- [Shifter](https://github.com/NERSC/shifter) (01/04/2018)
- [Nvidia enroot](https://github.com/NVIDIA/enroot) (02/12/2020)
- MicroVms :
- Podman (RedHat)
- CR-IO
- Docker
- KataContainer (Intel)
- Firecracker (AWS - microVM)
- gVisor (Google)
- runc
---
# Panorama conteneurs orientés calcul
## 4 Conteneurs usermode compatibles openMPI et GPU
- Charlie-cloud
- Singularity
- Shifter
- Nvidia enroot
---
# Workflow
- Build de l'image du conteneur sur le poste de travail, ou en CI
- Test en local
- Mise a disposition dans un catalogue
- Execution dans un environnement HPC
---
# Catalogues de conteneurs publics
### Ou trouver des conteneurs prêts à l'emploi ?
- NVIDIA NGC
- Docker Hub
- Singularity Hub
- Sylabs cloud
- Quay.io
---
# Partage de conteneurs
### Comment partager ses applications conteneurisées ?
- Gitlab
- Harbor
- Singularity Hub
---
# Sécurité
---
# Bonnes pratiques
---
background-image: url(images/charlie.png)
# Charlie-cloud
......@@ -177,13 +235,12 @@
- Développé à Los Alamos
- Univers docker
- nécessite de modifier la configuration kernel (user.max_user_namespaces, namespace.unpriv_enable=1)
- nécessite docker installé pour créer un conteneur
- Runtime uniquement (pas de construction d'image)
- conteneurs utilisables sans droits root
- un conteneur = un répertoire
- Support GPU avec drivers dans le conteneur
- Pas de gestion integrée du réseau
- Ecrit en C
- Documentation sommaire
- Ecrit en C, peu de ligne de code (autour de 1000)
- Libre et gratuit
---
......@@ -201,6 +258,8 @@
- Ecrit en C
- Libre et gratuit
---
# Singularity
---
background-image: url(images/singu.png)
# Singularity
......@@ -235,104 +294,70 @@
- Intégration dans Kubernetes
---
background-image: url(images/singu.png)
# Création d'un conteneur Singularity
## Avant de commencer
# Orchestrateur de conteneur
* Conteneur en mode "sandbox"
* Pour le déveleppement, tests
* Possibilité de modifier le conteneur au fur et a mesure
*Un Orchestrateur est un système permettant d'automatiser le déploiement, la mise à l'échelle et la gestion des applications conteneurisées*
* Conteneur en mode distribution (par défaut)
* Il n'est plus modifiable une fois construit
* Assurance que le destinataire du conteneur ne puisse pas altérer son contenu
* Pour mettre à jour le conteneur, il faut l'incrémenter
---
background-image: url(images/singu.png)
# Commandes de bases
* build: Create the container
* exec: Execute a command to your container
* inspect: See labels, run and test scripts, and environment variables
* pull: pull an image from Docker or Singularity Hub
* run: Run your image as an executable
* shell: Shell into your image
* apps : list apps
* help : help me !
- Approche microservice : les conteneurs qui composent une application sont regroupés dans des unités logiques (pods) pour en faciliter la gestion et la découverte
- Deux acteurs : [Kubernetes](https://kubernetes.io/) (The Linux Foundation) et [Nomad](https://www.nomadproject.io/) (Hashicorp)
```bash
singularity help example.img
Help me. I'm in the container.
```
---
background-image: url(images/singu.png)
# Création d'un conteneur
* Création du conteneur depuis un fichier de "recette"
```bash
singularity build example.img example.def
```
* Import depuis *Docker*
```bash
singularity import example.img docker://sysmso/openmpi
```
* Execution d'un code dans un conteneur (compilation)
```bash
singularity exec example.img mpicc mpi-ping.c -o ./mpi-ping
```
* Execution d'un programme *OpenMPI*
```bash
mpirun -np 20 singularity exec example.img ./mpi-ping
```
# Kubernetes
* Kubernetes est orienté microservice et web
* Pas de support natif d'accélérateurs (framework device plugins)
* Basé sur Docker, ouvert aux runtime CRI (containerd, CRI-O, Singularity)
* Pas de gestion de batch dans Kubernetes, ce qui s'en rapproche le plus est la notion de Job
* Un job crée un ou plusieurs pods et s'assure qu'ils se terminent bien. Lorsqu'un pod se termine avec succès le Job l'enregistre. Quand tous les pods sont terminés, le Job est complet. Supprimer un job supprime le Pod qu'il a crée.
* Le job lance un nouveau pod si un pod échoue ou est supprimé.
* Possibilité de lancer plusieurs pods en parallèle (mais pas avec MPI).
* Singularity-CRI est fourni avec le support natif des GPU NVIDIA en [device plugin](https://kubernetes.io/docs/concepts/extend-kubernetes/compute-storage-net/device-plugins/)
<img style="width:30%;float:right" src="images/kubernetes_icons.svg" >
---
background-image: url(images/singu.png)
# Bootstrap file
```bash
Bootstrap: docker
From: ubuntu:latest
%labels
AUTHOR souchal@apc.in2p3.fr
version 1.0
%post
apt-get update
apt-get -y install python
exit 0
%help
Help me. Im in the container.
%files
pymultinest_demo_minimal.py /pymultinest_demo_minimal.py
%environment
LD_LIBRARY_PATH=/usr/local/lib/
export LD_LIBRARY_PATH
%runscript
python /pymultinest_demo_minimal.py
```
# Nomad
* Scheduler Hybride et multi cloud
* Déployer facilement des applications conteneurisées ou pas
* Infrastructure as cloud déclaratif
* Binaire multi plateforme
* Version 0.10, déja en production
* Compatible GPU, FPGA, TPUs...
* Uniquement de la gestion de cluster et scheduling
* Supporte Spark
<img style="width:30%;float:right" src="images/nomad.svg" >
---
background-image: url(images/singu.png)
# Singularity apps
## Nouveauté de la version 2.4
# Intérêt de Nomad vs Kubernetes pour le calcul
* Auto rescheduling
* Fédération native d'orchestrateur multi-region et multi-datacenter
* Intégration parfaite avec la stack HashiCorp (Vault, Consul et Terraform...)
* Intégration automatique des GPU/TPU/FPGA
* Pas orienté conteneur uniquement (possibilité d'orchestrer des VMs ou des applications batchs)
* Scalabilité : Kubernetes est limité a 5000 nœuds et a 100 pods par nœuds. Instances de Nomad de plus de 10 000 nœuds en production.
* Entièrement et uniquement développé par des employés d'HashiCorp, en open source.
* Compatible Linux, MacOs et Windows (Kubernetes n'est supporté que sur Linux)
* Binaire de 75Mb (pour client et serveur).
<img style="width:30%;float:right" src="images/nomad.svg" >
---
# Désavantages de Nomad :
- un conteneur, plusieurs applications avec des environnements différents
- pratique pour les workflow partageant les mêmes dépendances
* Kubernetes fournit tous les services necessaires pour faire tourner des conteneurs Docker or Rkt-based (cluster management, scheduling, service discovery, monitoring, secrets management, ...).
* Nomad est développé par une seule entité, HashiCorp et n'a pas de support communautaire.
* Définition des ressources manuelle
* Auto scaling pas encore disponible
* Développement très rapide, avec une certaine tendance à la dépréciation sauvage et sans préavis
* Un certains nombre de fonctionnalités payantes
```bash
%apprun foo
exec echo "RUNNING FOO"
%applabels foo
BESTAPP=FOO
export BESTAPP
%appinstall foo
touch foo.exec
%appenv foo
SOFTWARE=foo
export SOFTWARE
%apphelp foo
This is the help for foo.
%appfiles foo
avocados.txt
```
<img style="width:30%;float:right" src="images/nomad.svg" >
---
# Job scheduler
- Approche Job avec heure de début - fin, ressources à utiliser
- mécanismes de files d’attente/de mises en attente ou pause (checkpointing), de priorités / Fair sharing, droits/accès et partages des ressources physiques.
- Intégration dans l’environnement cluster existant
---
# Questions
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment