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 @@ ...@@ -31,30 +31,126 @@
--- ---
# ComputeOps # 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 - Participants IN2P3 : APC, LAL, LPNHE, LLR, IPHC
- Partenaires extérieurs : - Partenaires extérieurs :
- Groupe de travail Aristote sur la virtualisation légère. - Groupe de travail Aristote sur la virtualisation légère.
- Ecole Centrale de Nantes - Ecole Centrale de Nantes
- IAS - IAS
- INRA - INRA
- Intel
- Sylabs
.right[![](images/logo-computeops-web.png)] .right[![](images/logo-computeops-web.png)]
--- ---
# Architecture HPC # 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 # Problématiques software HPC
--- ---
# Les conteneurs # Les conteneurs
- Technologie apparue dans Solaris via les jails - Technologie apparue dans Solaris via les jails
- Basé sur les namespaces (kernel 2.4.19) et les cgroups (kernel 2.6.24) - Basé sur les kernel namespaces (kernel 2.4.19) et les cgroups (kernel 2.6.24)
- LXC en 2008, Docker en 2013, 2015 : Docker top 15 GitHub - 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
- Runtime : chargé d'executer le conteneur - Au repos, un conteneur est un fichier (ou un ensemble de fichiers) qui est enregistré sur un disque.
- Image : contient les fichiers du conteneurs - 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.
- Manifeste : Fichier texte servant à construire le conteneur - 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)
*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 ? # En quoi les conteneurs peuvent nous aider dans le contexte scientifique ?
...@@ -63,19 +159,15 @@ ...@@ -63,19 +159,15 @@
- Portabilité des logiciels - Portabilité des logiciels
- Technologie simple à mettre en œuvre - Technologie simple à mettre en œuvre
- Rapidité de mise œuvre - Rapidité de mise œuvre
* Répétabilité .red[*] * Répétabilité .red[*]
- Assurance de répétabilité - Assurance de répétabilité
- Assurance de retrouver le même environnement - Assurance de retrouver le même environnement
- Assurance de retrouver les même résultats - Assurance de retrouver les même résultats
* Simplicité
* Autres
- Solution identique du laptop au meso-centre - Solution identique du laptop au meso-centre
- Interface graphique - Interface graphique
.footnote[.red[*] pas de reproductibilité avec les conteneurs mais de la répétabilité !] .footnote[.red[*] pas de reproductibilité avec les conteneurs mais de la répétabilité !]
--- ---
# Cas d'usage pratique dans la science # Cas d'usage pratique dans la science
...@@ -83,13 +175,37 @@ ...@@ -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 * 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 * 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é # Répétabilité
* Le journal [Rescience](http://rescience.github.io/) offre la possibilité de soumettre des articles scientifiques qui se doivent d'être reproductible. * 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é * Figer l'environnement d'execution dans un conteneur et le joindre à une publication garantit la répétabilité, parfois la reproductibilité
* Voir le TP de Loic Gouarin : https://github.com/gouarin/container_precis2017 * 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) background-image: url(images/docker.png)
# Docker et le calcul # Docker et le calcul
...@@ -104,72 +220,14 @@ ...@@ -104,72 +220,14 @@
.right[![](images/docker-filesystems-multilayer.png)] .right[![](images/docker-filesystems-multilayer.png)]
--- ---
# Orchestrateur vs Job Scheduler # Conteneurs orientés calcul
## 4 Conteneurs usermode compatibles HPC
- Approche microservice vs Job (avec heure de début - fin) - [Charlie-cloud](https://github.com/hpc/charliecloud) (dernière release 18/12/2020)
- 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. - [Singularity](https://github.com/hpcng/singularity) (12/01/2021)
- Intégration dans l’environnement cluster existant - [Shifter](https://github.com/NERSC/shifter) (01/04/2018)
- Kubernetes & Nomad - [Nvidia enroot](https://github.com/NVIDIA/enroot) (02/12/2020)
---
# 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
- Runtimes :
- 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) background-image: url(images/charlie.png)
# Charlie-cloud # Charlie-cloud
...@@ -177,13 +235,12 @@ ...@@ -177,13 +235,12 @@
- Développé à Los Alamos - Développé à Los Alamos
- Univers docker - Univers docker
- nécessite de modifier la configuration kernel (user.max_user_namespaces, namespace.unpriv_enable=1) - 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 - conteneurs utilisables sans droits root
- un conteneur = un répertoire - un conteneur = un répertoire
- Support GPU avec drivers dans le conteneur - Support GPU avec drivers dans le conteneur
- Pas de gestion integrée du réseau - Pas de gestion integrée du réseau
- Ecrit en C - Ecrit en C, peu de ligne de code (autour de 1000)
- Documentation sommaire
- Libre et gratuit - Libre et gratuit
--- ---
...@@ -201,6 +258,8 @@ ...@@ -201,6 +258,8 @@
- Ecrit en C - Ecrit en C
- Libre et gratuit - Libre et gratuit
---
# Singularity
--- ---
background-image: url(images/singu.png) background-image: url(images/singu.png)
# Singularity # Singularity
...@@ -235,104 +294,70 @@ ...@@ -235,104 +294,70 @@
- Intégration dans Kubernetes - Intégration dans Kubernetes
--- ---
background-image: url(images/singu.png) # Orchestrateur de conteneur
# Création d'un conteneur Singularity
## Avant de commencer *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 "sandbox" - 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
* Pour le déveleppement, tests - Deux acteurs : [Kubernetes](https://kubernetes.io/) (The Linux Foundation) et [Nomad](https://www.nomadproject.io/) (Hashicorp)
* Possibilité de modifier le conteneur au fur et a mesure
* 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) # Kubernetes
# Commandes de bases
* Kubernetes est orienté microservice et web
* build: Create the container * Pas de support natif d'accélérateurs (framework device plugins)
* exec: Execute a command to your container * Basé sur Docker, ouvert aux runtime CRI (containerd, CRI-O, Singularity)
* inspect: See labels, run and test scripts, and environment variables * Pas de gestion de batch dans Kubernetes, ce qui s'en rapproche le plus est la notion de Job
* pull: pull an image from Docker or Singularity Hub * 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.
* run: Run your image as an executable * Le job lance un nouveau pod si un pod échoue ou est supprimé.
* shell: Shell into your image * Possibilité de lancer plusieurs pods en parallèle (mais pas avec MPI).
* apps : list apps * 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/)
* help : help me !
<img style="width:30%;float:right" src="images/kubernetes_icons.svg" >
```bash
singularity help example.img
Help me. I'm in the container.
```
--- ---
background-image: url(images/singu.png) # Nomad
# Création d'un conteneur
* Création du conteneur depuis un fichier de "recette" * Scheduler Hybride et multi cloud
```bash * Déployer facilement des applications conteneurisées ou pas
singularity build example.img example.def * Infrastructure as cloud déclaratif
``` * Binaire multi plateforme
* Import depuis *Docker* * Version 0.10, déja en production
```bash * Compatible GPU, FPGA, TPUs...
singularity import example.img docker://sysmso/openmpi * Uniquement de la gestion de cluster et scheduling
``` * Supporte Spark
* Execution d'un code dans un conteneur (compilation)
```bash <img style="width:30%;float:right" src="images/nomad.svg" >
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
```
--- ---
background-image: url(images/singu.png) # Intérêt de Nomad vs Kubernetes pour le calcul
# Bootstrap file
* Auto rescheduling
```bash * Fédération native d'orchestrateur multi-region et multi-datacenter
Bootstrap: docker * Intégration parfaite avec la stack HashiCorp (Vault, Consul et Terraform...)
From: ubuntu:latest * Intégration automatique des GPU/TPU/FPGA
%labels * Pas orienté conteneur uniquement (possibilité d'orchestrer des VMs ou des applications batchs)
AUTHOR souchal@apc.in2p3.fr * 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.
version 1.0 * Entièrement et uniquement développé par des employés d'HashiCorp, en open source.
%post * Compatible Linux, MacOs et Windows (Kubernetes n'est supporté que sur Linux)
apt-get update * Binaire de 75Mb (pour client et serveur).
apt-get -y install python
exit 0 <img style="width:30%;float:right" src="images/nomad.svg" >
%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
```
--- ---
background-image: url(images/singu.png) # Désavantages de Nomad :
# Singularity apps
## Nouveauté de la version 2.4 * 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.
- un conteneur, plusieurs applications avec des environnements différents * Définition des ressources manuelle
- pratique pour les workflow partageant les mêmes dépendances * Auto scaling pas encore disponible
* Développement très rapide, avec une certaine tendance à la dépréciation sauvage et sans préavis
```bash * Un certains nombre de fonctionnalités payantes
%apprun foo
exec echo "RUNNING FOO" <img style="width:30%;float:right" src="images/nomad.svg" >
%applabels foo ---
BESTAPP=FOO # Job scheduler
export BESTAPP
%appinstall foo - Approche Job avec heure de début - fin, ressources à utiliser
touch foo.exec - 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.
%appenv foo - Intégration dans l’environnement cluster existant
SOFTWARE=foo
export SOFTWARE
%apphelp foo
This is the help for foo.
%appfiles foo
avocados.txt
```
--- ---
# Questions # 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