prez.html 29.5 KB
Newer Older
Martin Souchal's avatar
Martin Souchal committed
1 2
<!DOCTYPE html>
<html>
Martin Souchal's avatar
Martin Souchal committed
3 4

<head>
Martin Souchal's avatar
update  
Martin Souchal committed
5
    <title>Container HPC</title>
Martin Souchal's avatar
Martin Souchal committed
6 7
    <meta charset="utf-8">
    <style>
Martin Souchal's avatar
maj  
Martin Souchal committed
8 9 10 11 12 13 14
      @import url(https://fonts.googleapis.com/css?family=Yanone+Kaffeesatz);
      @import url(https://fonts.googleapis.com/css?family=Droid+Serif:400,700,400italic);
      @import url(https://fonts.googleapis.com/css?family=Ubuntu+Mono:400,700,400italic);
      @import url(https://fonts.googleapis.com/css?family=Droid+Serif);
      @import url(https://fonts.googleapis.com/css?family=Lato&subset=latin,latin-ext);
      @import url('https://fonts.googleapis.com/css?family=Open+Sans&display=swap');
      @import url(style.css);
Martin Souchal's avatar
Martin Souchal committed
15
    </style>
Martin Souchal's avatar
maj  
Martin Souchal committed
16

Martin Souchal's avatar
Martin Souchal committed
17 18 19
</head>

<body>
Martin Souchal's avatar
Martin Souchal committed
20
    <textarea id="source">
Martin Souchal's avatar
maj  
Martin Souchal committed
21 22 23
            name: inverse
            class: center, inverse, middle

Martin Souchal's avatar
Martin Souchal committed
24 25
            # Conteneurs pour le calcul

Martin Souchal's avatar
Martin Souchal committed
26 27 28
            <img style="width:100px;" src="images/logo-calcul.png" >
            <img style="width:100px;" src="images/logo-computeops-web.png" >
            <img style="width:100px;" src="images/licence.png" >
Martin Souchal's avatar
Martin Souchal committed
29
            
Martin Souchal's avatar
maj  
Martin Souchal committed
30
            ###### Martin Souchal 2021 (APC - FACe - ComputeOps)
Martin Souchal's avatar
Martin Souchal committed
31
            
Martin Souchal's avatar
update  
Martin Souchal committed
32 33 34
            ---
            # ComputeOps

Martin Souchal's avatar
update  
Martin Souchal committed
35
            - 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.
Martin Souchal's avatar
update  
Martin Souchal committed
36 37 38 39 40
            - 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
Martin Souchal's avatar
Martin Souchal committed
41
                - INRAE
Martin Souchal's avatar
update  
Martin Souchal committed
42 43
                - Intel
                - Sylabs
Martin Souchal's avatar
update  
Martin Souchal committed
44 45
            
            .right[![](images/logo-computeops-web.png)]
Martin Souchal's avatar
maj  
Martin Souchal committed
46
            ---
Martin Souchal's avatar
reorg  
Martin Souchal committed
47
            # Plan
Martin Souchal's avatar
update  
Martin Souchal committed
48

Martin Souchal's avatar
reorg  
Martin Souchal committed
49 50 51 52 53
            - Les conteneurs : principes généraux
            - Les conteneurs et le HPC
            - Focus sur Singularity
            - Orchestration et Job Scheduling
            - Conclusion
Martin Souchal's avatar
update  
Martin Souchal committed
54 55
            ---
            # Les conteneurs
Martin Souchal's avatar
reorg  
Martin Souchal committed
56
            ### Un peu d'histoire...
Martin Souchal's avatar
update  
Martin Souchal committed
57 58

            - Technologie apparue dans Solaris via les jails
Martin Souchal's avatar
update  
Martin Souchal committed
59 60 61 62
            - 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)
Martin Souchal's avatar
reorg  
Martin Souchal committed
63 64

            <img style="width:60%; float: right;" src="images/landscape.png" >
Martin Souchal's avatar
update  
Martin Souchal committed
65 66 67
            ---
            # Les conteneurs
            ### Principe de base
Martin Souchal's avatar
update  
Martin Souchal committed
68

Martin Souchal's avatar
reorg  
Martin Souchal committed
69
            - A l'arrêt, un conteneur est un fichier (ou un ensemble de fichiers) qui est enregistré sur un disque. 
Martin Souchal's avatar
ortho  
Martin Souchal committed
70
            - Au démarrage 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.
Martin Souchal's avatar
Martin Souchal committed
71 72
            - 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 sont un processus Linux comme un autre.
Martin Souchal's avatar
ortho  
Martin Souchal committed
73
            - Un conteneur est immuable (modifier un conteneur = créer un nouveau)
Martin Souchal's avatar
update  
Martin Souchal committed
74
            
Martin Souchal's avatar
update  
Martin Souchal committed
75 76 77 78 79 80 81 82 83 84 85 86 87 88 89
            ---
            # 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
            ...
            ```
Martin Souchal's avatar
Martin Souchal committed
90 91
            <img style="float:right;" src="images/oci.png" >

Martin Souchal's avatar
update  
Martin Souchal committed
92 93 94 95 96 97 98 99 100
            ---
            # 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

Martin Souchal's avatar
Martin Souchal committed
101
            <img style="width:60%;float: right;" src="images/Containers-scheme.png" >
Martin Souchal's avatar
update  
Martin Souchal committed
102 103 104 105 106 107 108 109

            .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
Martin Souchal's avatar
Martin Souchal committed
110 111
            - La base d'une image est un OS Linux (Alpine Linux, Busybox, Ubuntu, CentOs...)
            - Pas de standards pour les manifestes
Martin Souchal's avatar
update  
Martin Souchal committed
112 113 114 115 116 117 118 119 120 121 122

            ```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
Martin Souchal's avatar
Martin Souchal committed
123 124 125 126 127 128 129
            docker build -f Dockerfile  -t Container .
            ```
            ```bash
            singularity build Container.sif Singularity.def
            ```
            ```bash
            buildah bud -f Dockerfile -t Container .
Martin Souchal's avatar
update  
Martin Souchal committed
130 131 132 133
            ```
            ---
            # Runtimes

Martin Souchal's avatar
reorg  
Martin Souchal committed
134 135
            - Runtimes bas niveau : runc (docker), LXC/LXD, crun, conmon (RedHat), nvidia-docker (Nvidia)
            - Runtimes haut niveau : Docker, Singularity, Podman (RedHat), containerd (Docker), CR-IO (Kubernetes), enroot (Nvidia), SmartOs (Samsung)
Martin Souchal's avatar
update  
Martin Souchal committed
136 137 138 139 140 141 142 143
            - 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)]
            ---
Martin Souchal's avatar
reorg  
Martin Souchal committed
144 145
            # Isolation et performances

Martin Souchal's avatar
Martin Souchal committed
146 147
            <img style="width:45%;float: right;" src="images/vm-container.png" >

Martin Souchal's avatar
reorg  
Martin Souchal committed
148 149 150 151 152 153 154 155 156 157
            - runtimes de bas niveau en user mode (namespaces) :
              - Temps d'instanciation minimal
              - Isolation faible (proche du matériel)
              - Performances optimales

            - runtimes sécurisées (Kata, gVisor) :
              - Isolation forte (équivalent VM)
              - Temps d'instanciation modéré (plus rapide que VMs)
              - Performances dégradées, dépendantes hardware

Martin Souchal's avatar
ortho  
Martin Souchal committed
158
            - Performances liées aux formats d'images 
Martin Souchal's avatar
reorg  
Martin Souchal committed
159
              - Format en couches optimisés pour téléchargement
Martin Souchal's avatar
ortho  
Martin Souchal committed
160
              - Format fichier optimisé pour le stockage
Martin Souchal's avatar
Martin Souchal committed
161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177

            .footnote[Source : Three Easy Ways to Improve a Container’s Performance by Marialena Perpiraki]
            ---
            # Isolation et Sécurité
            ### focus sur seccomp
            - Seccomp est utilisé par Docker et Singularity
            - Permet de filtrer les syscalls depuis les runtimes (liste noire/blanche)

            ```bash
            ~ $ docker info
            ...
            Security Options:
              apparmor
              seccomp
              Profile: default  # default seccomp profile applied by default
            ...
            ```
Martin Souchal's avatar
ortho  
Martin Souchal committed
178
            - En désactivant complètement seccomp, tous les syscalls sont autorisés :
Martin Souchal's avatar
Martin Souchal committed
179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205
            
            ```bash
            # Lancer un conteneur sans seccomp
            ~ $ docker run --rm -it --security-opt seccomp=unconfined alpine sh
            / # reboot  # oops
            # Lancer docker avec le profil seccomp par défaut
            ~ $ docker container run --rm -it alpine sh
            / # reboot  # ouf
            ```
            ---
            # Isolation et Sécurité
            ### focus sur seccomp

            <img style="float: right;" src="images/seccomp.png" >

            - Lancement d'un conteneur avec un profil seccomp personnalisé 

            ```bash
            # Run avec un profil interdisant le chmod
            ~ $ docker container run --rm -it --security-opt seccomp=no-chmod.json alpine sh
            / # whoami
            root
            / # chmod 777 -R /etc
            chmod: /etc: Operation not permitted
            ```

            .footnote[Source : [ITNext](https://itnext.io/hardening-docker-and-kubernetes-with-seccomp-a88b1b4e2111)]
Martin Souchal's avatar
reorg  
Martin Souchal committed
206 207
            ---
            # Sécurité
Martin Souchal's avatar
Martin Souchal committed
208

Martin Souchal's avatar
reorg  
Martin Souchal committed
209
              - Docker : daemon root, possibilité d'être root dans un conteneur
Martin Souchal's avatar
Martin Souchal committed
210
              - Possibilité d'utiliser AppArmor ou seccomp coté admin pour "verrouiller" l'infra 
Martin Souchal's avatar
ortho  
Martin Souchal committed
211
              - Conteneurs dans le namespace "user" : 
Martin Souchal's avatar
reorg  
Martin Souchal committed
212
                - même utilisateur hors du conteneur et dans le conteneur
Martin Souchal's avatar
Martin Souchal committed
213 214 215
                - les problématiques d'élévation de priviléges sont reportées sur le noyau linux
                - Attention au SUID...
              - Isolation plus ou moins forte (de userNS a VM)
Martin Souchal's avatar
ortho  
Martin Souchal committed
216
              - Vecteur de failles de sécurité logicielle important (cf Alpine Linux)
Martin Souchal's avatar
reorg  
Martin Souchal committed
217
              - Vecteur d'attaque pour rootkit (très facile de cacher du code malicieux dans un conteneur)
Martin Souchal's avatar
Martin Souchal committed
218 219 220

              <img style="float: right;" src="images/software-supply-chain.png" >
              .footnote[SetUID : un programme lancé avec le droit “suid” sera exécuté avec les droits du propriétaire du programme et non les droits de l'utilisateur qui l'a lancé]
Martin Souchal's avatar
reorg  
Martin Souchal committed
221
            ---
Martin Souchal's avatar
update  
Martin Souchal committed
222 223
            # Registres publics

Martin Souchal's avatar
ortho  
Martin Souchal committed
224
            * Images vérifiées
Martin Souchal's avatar
update  
Martin Souchal committed
225 226 227 228 229 230 231 232
              - [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é)
Martin Souchal's avatar
Martin Souchal committed
233 234

              <img style="width:200px;float: right;" src="images/csan.png" >
Martin Souchal's avatar
update  
Martin Souchal committed
235 236 237
            ---
            # Registres privés

Martin Souchal's avatar
reorg  
Martin Souchal committed
238 239 240 241 242 243 244 245 246 247 248 249 250 251 252
            - Gitlab (Registre Docker)
            - Harbor (Registre Docker)
            - Singularity Hub (Registre Singularity)
            - Azure, AWS, etc... (OCI)
            - Pour stocker des images OCI dans des registres docker : [ORAS](https://github.com/deislabs/oras/)

            <img style="float: right;" src="images/oras.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 
Martin Souchal's avatar
ortho  
Martin Souchal committed
253
            - Préférer les catalogues d'images vérifiées, ou au moins ceux qui scannent les failles de sécurité
Martin Souchal's avatar
reorg  
Martin Souchal committed
254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281
            ---
            name: inverse
            class: center, inverse, middle

            # Les conteneurs et le HPC
            ---
            # Architecture HPC
            ### High Performance Computing

            <img style="width:40%;float: right;" src="images/HPC-arch.png" >

            - Cluster/grappe de calcul
            - Matériel spécifique :
              - Utilisation d'accélérateurs (GPUs, TPUs...)
              - Réseau Infiniband/Omnipath
            - Calcul parallèle avec mémoire partagée (MPI)
            - Spark, hadoop...
            - Orchestration avec un Job Scheduler (Univa, SGE, Slurm, etc...)
            
            ---
            # Problématiques software HPC

            - Besoin de performances et d’optimisations au plus proche du matériel.
            - Des jobs qui tournent des semaines, voir des mois ; la maintenance doit être planifiée longtemps en avance,
            - Applications scientifiques parfois complexes à compiler, avec de nombreuses dépendances,
            - Des noyaux souvent plus vieux que d’ordinaire (nombreux soucis avec la glibc)...,
            - Environnement cluster = multi-utilisateurs.
            - Support : "J’ai besoin du logiciel X..."
Martin Souchal's avatar
Martin Souchal committed
282 283 284 285 286 287 288 289 290
            ---
            # En quoi les conteneurs peuvent nous aider dans le contexte scientifique ?
            
            * Collaboration
                - Diffusion et partage simple de logiciels
                - Portabilité des logiciels
                - Technologie simple à mettre en œuvre
                - Rapidité de mise œuvre
            * Répétabilité .red[*]
Martin Souchal's avatar
Martin Souchal committed
291 292 293
                - Assurance de répétabilité *
                - Assurance de retrouver le même environnement *
                - Assurance de retrouver les même résultats *
Martin Souchal's avatar
update  
Martin Souchal committed
294
            * Simplicité
Martin Souchal's avatar
Martin Souchal committed
295 296 297
                - Solution identique du laptop au meso-centre
                - Interface graphique
            
Martin Souchal's avatar
Martin Souchal committed
298
            .footnote[.red[*] C'est faux !]
Martin Souchal's avatar
Martin Souchal committed
299 300 301 302 303 304 305
            ---
            # Cas d'usage pratique dans la science
            
            * Environnement de travail python prêt à l'emploi transportable sur n'importe quel cluster de calcul
            * 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
            
Martin Souchal's avatar
update  
Martin Souchal committed
306 307 308 309 310 311 312
            ---
            # 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
Martin Souchal's avatar
Martin Souchal committed
313 314 315 316
            ---
            # Répétabilité
            
            * Le journal [Rescience](http://rescience.github.io/) offre la possibilité de soumettre des articles scientifiques qui se doivent d'être reproductible.
Martin Souchal's avatar
Martin Souchal committed
317
            * Figer l'environnement d'execution dans un conteneur et le joindre à une publication garantit la répétabilité  .red[*], parfois la reproductibilité
Martin Souchal's avatar
update  
Martin Souchal committed
318 319 320 321 322 323
            * 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

Martin Souchal's avatar
Martin Souchal committed
324
            .footnote[.red[*] C'est toujours faux !]
Martin Souchal's avatar
update  
Martin Souchal committed
325 326
            .right[![rescience](images/rescience.png)]
            ---
Martin Souchal's avatar
Martin Souchal committed
327 328
            background-image: url(images/docker.png)
            # Docker et le calcul
Martin Souchal's avatar
ortho  
Martin Souchal committed
329
            ### Un écosystème pas très adapté...
Martin Souchal's avatar
Martin Souchal committed
330
            
Martin Souchal's avatar
Martin Souchal committed
331
            - Docker est adapté pour les micro services (un conteneur, un service), pas très facile de gérer des chaines de calcul
Martin Souchal's avatar
reorg  
Martin Souchal committed
332
            - Network namespace et compatibilité matériel réseau pour cluster (Intel OmniPath, Infiniband...)
Martin Souchal's avatar
ortho  
Martin Souchal committed
333
            - Aucun support MPI
Martin Souchal's avatar
reorg  
Martin Souchal committed
334 335 336 337
            - Image docker : superpositions de couches, pas très portable dans un cluster
            - Sécurité : 
              - daemon root à installer sur tous les noeuds de calculs...
              - des utilisateurs root dans votre cluster...
Martin Souchal's avatar
Martin Souchal committed
338 339 340
            
            .right[![](images/docker-filesystems-multilayer.png)]
            ---
Martin Souchal's avatar
ortho  
Martin Souchal committed
341 342 343 344 345 346 347
            background-image: url(images/docker.png)
            # Docker et le calcul
            ### ... mais néanmoins intéressant

            - pour la gestion de bases de données
            - pour l'optimisation des téléchargements
            - pour la création de stacks logicielles (docker-compose)
Martin Souchal's avatar
Martin Souchal committed
348 349
            - utilisé massivement en Intégration continue
            - pour faire du développement
Martin Souchal's avatar
ortho  
Martin Souchal committed
350
            - trés répandu et portable (tous OS)
Martin Souchal's avatar
Martin Souchal committed
351
            - pour le catalogue existant (docker hub...)
Martin Souchal's avatar
ortho  
Martin Souchal committed
352 353 354
            - sécurisation possible via seccomp
            - pour nvidia-docker...
            ---
Martin Souchal's avatar
reorg  
Martin Souchal committed
355 356 357 358 359 360 361 362 363 364 365
            # Nivida docker

            - Permet d'utiliser des GPUs Nvidia avec Docker
            - Utilisable comme runtime et comme toolkit
            - Prérequis : kernel version > 3.10, Docker >= 19.03, NVIDIA GPU > Fermi, NVIDIA drivers ~= 361.93
        

            <img style="width:40%;float: left;" src="images/nvidia-docker.png" >
            <img style="width:40%;float: right;" src="images/nvidia-docker-arch.png" >
            .footnote[Source [NVIDIA](https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/overview.html)]
            ---
Martin Souchal's avatar
update  
Martin Souchal committed
366
            # Conteneurs orientés calcul
Martin Souchal's avatar
ortho  
Martin Souchal committed
367
            ## 4 Conteneurs compatibles HPC
Martin Souchal's avatar
reorg  
Martin Souchal committed
368 369 370

            <hr />

Martin Souchal's avatar
Martin Souchal committed
371
            Nom  | Dernière Release | Support HW | OCI | ARM | OS | Compatible Scheduler | Contrôle Admin | Privilèges
Martin Souchal's avatar
Martin Souchal committed
372 373
            ------------- | ------------- | ------------- | ------------- | -------------| -------------| -------------| -------------| -------------
            Docker  | 04/01/2021  | GPU Nvidia | Oui | Oui | MacOs - W$ - Linux | Non | Oui | Root daemon
Martin Souchal's avatar
Martin Souchal committed
374
            [Charlie-cloud](https://github.com/hpc/charliecloud)  | 18/12/2020  | MPI  - GPU - IB | Non | Non | Linux | Oui | Non | UserNS
Martin Souchal's avatar
Martin Souchal committed
375
            [Singularity](https://github.com/hpcng/singularity)  | 12/01/2021  | MPI - GPU - IB | Oui | Oui | Linux - MacOs | Oui | Oui | SUID/UserNS
Martin Souchal's avatar
Martin Souchal committed
376
            [Shifter](https://github.com/NERSC/shifter) | 01/04/2018 | MPI - GPU - IB | Non | Non | Linux | Slurm | Oui | SUID
Martin Souchal's avatar
Martin Souchal committed
377
            [Nvidia enroot](https://github.com/NVIDIA/enroot) | 02/12/2020 | GPU - IB | Oui | Non | Linux | Oui | Non | UserNS
Martin Souchal's avatar
reorg  
Martin Souchal committed
378

Martin Souchal's avatar
Martin Souchal committed
379 380 381 382
            ---
            background-image: url(images/charlie.png)
            # Charlie-cloud
            
Martin Souchal's avatar
reorg  
Martin Souchal committed
383
            - Développé à Los Alamos National Laboratory (LANL)
Martin Souchal's avatar
Martin Souchal committed
384 385
            - Univers docker
            - nécessite de modifier la configuration kernel (user.max_user_namespaces, namespace.unpriv_enable=1)
Martin Souchal's avatar
Martin Souchal committed
386
            - Packages et compilation simple
Martin Souchal's avatar
update  
Martin Souchal committed
387
            - Runtime uniquement (pas de construction d'image)
Martin Souchal's avatar
Martin Souchal committed
388 389 390
            - conteneurs utilisables sans droits root
            - un conteneur = un répertoire
            - Support GPU avec drivers dans le conteneur
Martin Souchal's avatar
ortho  
Martin Souchal committed
391 392
            - Pas de gestion intégrée du réseau
            - Écrit en C, peu de ligne de code (autour de 1000)
Martin Souchal's avatar
Martin Souchal committed
393 394 395 396 397 398 399
            - Libre et gratuit
            
            ---
            background-image: url(images/shifterlogo_2.png)
            # Shifter
            
            - Développé au NERSC
Martin Souchal's avatar
reorg  
Martin Souchal committed
400
            - Pas de package
Martin Souchal's avatar
Martin Souchal committed
401 402 403 404 405
            - Images docker converties mais ne nécessite pas docker installé
            - Nombreuses dépendances pour l'installation
            - Nécessite un Image gateway pour faire lien entre docker et shifter
            - utilisable sans droits root mais avec un daemon
            - Support GPU avec drivers dans le conteneur
Martin Souchal's avatar
ortho  
Martin Souchal committed
406
            - Pas de gestion intégrée du réseau
Martin Souchal's avatar
Martin Souchal committed
407
            - Peu de documentation
Martin Souchal's avatar
ortho  
Martin Souchal committed
408
            - Écrit en C
Martin Souchal's avatar
Martin Souchal committed
409 410
            - Libre et gratuit
            
Martin Souchal's avatar
Martin Souchal committed
411 412 413 414 415 416 417
            ---
            # Nvidia enroot

            *Enroot peut être considéré comme un chroot non privilégié amélioré. Il utilise les mêmes technologies sous-jacentes que les conteneurs mais supprime une grande partie de l'isolement qu'ils procurent tout en préservant la séparation du système de fichiers.*
            
            - Pratique le principe KISS
            - Standalone (pas de daemon)
Martin Souchal's avatar
ortho  
Martin Souchal committed
418
            - Tourne en namespace user (pas de binaire setuid, cgroups, configuration par utilisateur...)
Martin Souchal's avatar
Martin Souchal committed
419 420 421 422 423 424 425 426 427 428 429 430 431 432 433
            - Facile à utiliser (simple image format, scriptable, root remapping...)
            - Pas à peu d'isolation
            - Configuration administrateur et utilisateur
            - Import rapide d'images Docker (vitesse de 3x à 5x sur des grosses images)
            - Images SquashFS
            - Support GPU Nividia avec libnvidia-container
            - Packages DEB et RPM, make install...

            ```bash
            # Import and start an Ubuntu image from DockerHub
            $ enroot import docker://ubuntu
            $ enroot create ubuntu.sqsh
            $ enroot start ubuntu
            ```

Martin Souchal's avatar
update  
Martin Souchal committed
434
            ---
Martin Souchal's avatar
reorg  
Martin Souchal committed
435 436 437
            name: inverse
            class: center, inverse, middle

Martin Souchal's avatar
update  
Martin Souchal committed
438
            # Singularity
Martin Souchal's avatar
Martin Souchal committed
439 440
            ---
            background-image: url(images/singu.png)
Martin Souchal's avatar
reorg  
Martin Souchal committed
441 442
            # Historique

Martin Souchal's avatar
Martin Souchal committed
443
            * Inventé par Greg Kurtzer (Rocky Linux, CentOS, Warewulf) au Berkeley Lab pour répondre aux problèmes spécifiques au HPC
Martin Souchal's avatar
reorg  
Martin Souchal committed
444 445 446 447
            * Développement démarré en Octobre 2015
            * Première release en Avril 2016
            * Les retours de la communauté ont menés à la version 2.0 en Juin 2016
            * Sylabs.io en Janvier 2018
Martin Souchal's avatar
ortho  
Martin Souchal committed
448
            * Sortie de la version 3.0 en Octobre 2018 avec une réécriture complète, de nouvelles fonctionnalités et une ambition hors HPC
Martin Souchal's avatar
reorg  
Martin Souchal committed
449 450 451 452 453 454
            * Support officiel NVIDIA via GPU Cloud

            ---
            background-image: url(images/singu.png)
            # Fonctionnalités 

Martin Souchal's avatar
ortho  
Martin Souchal committed
455
            * Nécessite Golang > 1.13 pour la compilation
Martin Souchal's avatar
reorg  
Martin Souchal committed
456 457
            * Package RPM uniquement
            * Droits root nécessaires pour créer un conteneur localement
Martin Souchal's avatar
ortho  
Martin Souchal committed
458 459
            * Fichier image SIF : unique, executable, chiffré et signé
            * Support natif de MPI, Xorg, GPU
Martin Souchal's avatar
reorg  
Martin Souchal committed
460 461 462 463 464 465 466 467 468
            * Infrastructure Cloud (Container Library, Remote Builder, et Keystore)
            * Possibilité d’exécuter des images Docker et OCI
            * Support/isolation réseau (plugins CNI / root uniquement)
            * Libre et gratuit / Version pro payante
 
            ---
            background-image: url(images/singu.png)
            # Sécurité

Martin Souchal's avatar
ortho  
Martin Souchal committed
469
            * Support des Cgroups pour la gestion des ressources
Martin Souchal's avatar
reorg  
Martin Souchal committed
470 471 472 473
            * L’utilisateur root peut définir un set de capabilities à l’exécution
            * L’administrateur peut gérer les capabilities des utilisateurs (avec précaution)
            * Les utilisateurs peuvent passer un contexte d’exécution SELinux, ou un profil AppArmor
            * Les utilisateurs peuvent passer leurs propres filtres d’appel système via seccomp
Martin Souchal's avatar
ortho  
Martin Souchal committed
474
            * Support d’exécution avec des UID/GID différents pour l’utilisateur root (par défaut c'est le même)
Martin Souchal's avatar
Martin Souchal committed
475
            * Conteneurs chiffrés, signés (SIF)
Martin Souchal's avatar
Martin Souchal committed
476
            
Martin Souchal's avatar
ortho  
Martin Souchal committed
477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501
            ---
            background-image: url(images/singu.png)
            # Singularity coté admin
            ### singularity.conf

            * Définir les ressources, les restrictions de sécurité, les montages, les options réseau...
            * Activer ou non le mode SUID entraîne des limitations*, notamment liées aux images SIF et a fakeroot (user NS)
            * Gérer les capabilities des utilisateurs selon 3 modes d'execution : 
              * full 
              * file 
              * no
            * Gestion de la sécurité via SELinux, AppArmor, et seccomp 

            ```bash
            $ singularity exec --drop-caps CAP_NET_RAW library://sylabs/tests/ubuntu_ping:v1.0 ping -c 1 8.8.8.8
            ping: socket: Operation not permitted
            ```
            ```bash
            $ sudo whoami
            root
            $ sudo singularity exec --security uid:1000 my_container.sif whoami
            david
            ```

            .footnote[*Plus d'infos dans la documentation [officielle](https://sylabs.io/guides/3.7/admin-guide/user_namespace.html#userns-limitations)]
Martin Souchal's avatar
Martin Souchal committed
502 503
            ---
            background-image: url(images/singu.png)
Martin Souchal's avatar
reorg  
Martin Souchal committed
504
            # Avantages de Singularity pour le HPC
Martin Souchal's avatar
Martin Souchal committed
505
            
Martin Souchal's avatar
ortho  
Martin Souchal committed
506 507 508
            - Facile à installer, configurer et à déployer sur un cluster de calcul
            - Compatibilité avec le catalogue d'image Docker
            - Utilisation de registres Public/Privé dédiés (http://www.singularity-hub.org/), compatibilité gitlab
Martin Souchal's avatar
Martin Souchal committed
509
            - Un conteneur est facile à transporter pour l'utilisateur (un fichier SIF à copier)
Martin Souchal's avatar
ortho  
Martin Souchal committed
510 511
            - Singularity apps pour la gestion des chaines de calcul complexes
            - Compatible tous job scheduler 
Martin Souchal's avatar
Martin Souchal committed
512 513
            - Intégration de tests et d'aide intégrée dans le conteneur
            - Accès direct aux GPU de la machine
Martin Souchal's avatar
update  
Martin Souchal committed
514
            - Intégration dans Kubernetes
Martin Souchal's avatar
ortho  
Martin Souchal committed
515 516 517
            - Conteneurs chiffrés et signés
            - Conteneurs en lecture seule
            - Sécurité a la carte
Martin Souchal's avatar
Martin Souchal committed
518
            
Martin Souchal's avatar
reorg  
Martin Souchal committed
519 520 521 522 523
            ---
            name: inverse
            class: center, inverse, middle

            # Orchestration et scheduling
Martin Souchal's avatar
Martin Souchal committed
524
            ---
Martin Souchal's avatar
update  
Martin Souchal committed
525 526 527
            # Orchestrateur de conteneur

            *Un Orchestrateur est un système permettant d'automatiser le déploiement, la mise à l'échelle et la gestion des applications conteneurisées*
Martin Souchal's avatar
Martin Souchal committed
528
            
Martin Souchal's avatar
update  
Martin Souchal committed
529
            - 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
Martin Souchal's avatar
ortho  
Martin Souchal committed
530 531 532
            - Deux acteurs principaux : [Kubernetes](https://kubernetes.io/) (The Linux Foundation) et [Nomad](https://www.nomadproject.io/) (Hashicorp)

            <img style="width:600px;" src="images/k8vN.png">
Martin Souchal's avatar
Martin Souchal committed
533 534
            
            ---
Martin Souchal's avatar
update  
Martin Souchal committed
535
            # Kubernetes
Martin Souchal's avatar
ortho  
Martin Souchal committed
536
            <img style="width:100px;float:right" src="images/kubernetes_icons.svg" >
Martin Souchal's avatar
update  
Martin Souchal committed
537 538

            * Kubernetes est orienté microservice et web
Martin Souchal's avatar
ortho  
Martin Souchal committed
539 540
            * Gestion d'accélérateurs avec framework device plugins
            * Basé sur Docker, ouvert aux runtime OCI (containerd, CRI-O, Singularity)
Martin Souchal's avatar
update  
Martin Souchal committed
541
            * Pas de gestion de batch dans Kubernetes, ce qui s'en rapproche le plus est la notion de Job
Martin Souchal's avatar
ortho  
Martin Souchal committed
542
              * Un ensemble de pods qui exécutent une tâche et s'arrêtent.
Martin Souchal's avatar
update  
Martin Souchal committed
543 544
              * 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).
Martin Souchal's avatar
ortho  
Martin Souchal committed
545
            * Singularity-CRI permet le support des GPU NVIDIA en [device plugin](https://kubernetes.io/docs/concepts/extend-kubernetes/compute-storage-net/device-plugins/)
Martin Souchal's avatar
update  
Martin Souchal committed
546

Martin Souchal's avatar
ortho  
Martin Souchal committed
547
            <img style="width:600px;float:right" src="images/components-of-kubernetes.svg" >
Martin Souchal's avatar
Martin Souchal committed
548
            ---
Martin Souchal's avatar
update  
Martin Souchal committed
549
            # Nomad
Martin Souchal's avatar
ortho  
Martin Souchal committed
550
            <img style="width:30%;float:right" src="images/nomad.svg" >
Martin Souchal's avatar
update  
Martin Souchal committed
551 552

            * Infrastructure as cloud déclaratif
Martin Souchal's avatar
ortho  
Martin Souchal committed
553 554 555
            * Version 1.0.2
            * Kubernetes vise à fournir toutes les fonctionnalités nécessaires à l'exécution d'applications basées sur Docker, notamment la gestion des clusters, le scheduling, la découverte de services, la surveillance, la gestion des secrets, etc...
            * Nomad ne fait que de la gestion de cluster et du scheduling
Martin Souchal's avatar
update  
Martin Souchal committed
556

Martin Souchal's avatar
ortho  
Martin Souchal committed
557
            <img style="width:500px;" src="images/nomad_reference_diagram.png" >
Martin Souchal's avatar
Martin Souchal committed
558
            ---
Martin Souchal's avatar
ortho  
Martin Souchal committed
559 560
            # Nomad
            <img style="width:30%;float:right" src="images/nomad.svg" >
Martin Souchal's avatar
update  
Martin Souchal committed
561

Martin Souchal's avatar
ortho  
Martin Souchal committed
562 563 564 565
            * S'intègre avec Consul (découverte et maillage de services, réseau), Terraform (déploiement) et Vault (gestion de secrets)
            * Nomad supporte la fédération native multi-region et multi-datacenter
            * Nomad intègre la gestion des GPU/TPU/FPGA, support Spark
            * Nomad permet d'orchestrer des VMs ou des applications batchs en plus des conteneurs
Martin Souchal's avatar
update  
Martin Souchal committed
566
            * 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.
Martin Souchal's avatar
ortho  
Martin Souchal committed
567 568 569
            * Nomad est entièrement et uniquement développé par des employés d'HashiCorp, en open source mais sans support communautaire
            * Nomad est compatible Linux, MacOs et Windows, Kubernetes n'est supporté que sur Linux
            * Nomad distribué sous la forme d'un binaire de 75Mb (pour client et serveur), Kubernetes demande le déploiement de nombreux conteneurs
Martin Souchal's avatar
update  
Martin Souchal committed
570

Martin Souchal's avatar
Martin Souchal committed
571
            ---
Martin Souchal's avatar
Martin Souchal committed
572
            # Désavantages de Nomad
Martin Souchal's avatar
ortho  
Martin Souchal committed
573
            <img style="width:30%;float:right" src="images/nomad.svg" >
Martin Souchal's avatar
update  
Martin Souchal committed
574 575 576 577 578 579 580 581

            * 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
            ---
            # Job scheduler

Martin Souchal's avatar
ortho  
Martin Souchal committed
582 583
            - Notion de job avec heure de début - fin, ressources à utiliser
            - Mécanismes de :
Martin Souchal's avatar
Martin Souchal committed
584 585 586
              - files d’attente/de mises en attente ou pause (checkpointing)
              - priorités / Fair sharing
              - droits/accès et partages des ressources physiques
Martin Souchal's avatar
update  
Martin Souchal committed
587
            - Intégration dans l’environnement cluster existant
Martin Souchal's avatar
ortho  
Martin Souchal committed
588
            - Compatible tous runtimes en userNS
Martin Souchal's avatar
Martin Souchal committed
589 590

            <img style="width:30%;float:right" src="images/slurm.jpg" >
Martin Souchal's avatar
Martin Souchal committed
591
            ---
Martin Souchal's avatar
reorg  
Martin Souchal committed
592
            # Conclusion
Martin Souchal's avatar
Martin Souchal committed
593 594 595 596 597

            * Les conteneurs ne garantissent pas la reproductibilité

            * ... ni la répétabilité *a priori*

Martin Souchal's avatar
ortho  
Martin Souchal committed
598
            * ils ont d'autres qualités : la portabilité, l'intégration continue, l'autonomie de l'utilisateur, le partage de logiciels... 
Martin Souchal's avatar
Martin Souchal committed
599

Martin Souchal's avatar
ortho  
Martin Souchal committed
600
            * Peu d'isolation entraîne une grande dépendance a l'environnement hôte...
Martin Souchal's avatar
Martin Souchal committed
601 602

            * ...et posent des problèmes de sécurité !
Martin Souchal's avatar
reorg  
Martin Souchal committed
603
            ---
Martin Souchal's avatar
Martin Souchal committed
604
            # Questions
Martin Souchal's avatar
Martin Souchal committed
605

Martin Souchal's avatar
ortho  
Martin Souchal committed
606
            Retrouvez nous sur
Martin Souchal's avatar
Martin Souchal committed
607 608 609 610

            * Rocket Chat : [#computeops](https://chat.in2p3.fr/channel/computeops)

            * [Citadel CNRS](https://cnrs.citadel.team/#/room/!HWuisClGdDMYoEwIAV:cnrs.citadel.team)
Martin Souchal's avatar
Martin Souchal committed
611 612 613
            
            ---
    </textarea>
Martin Souchal's avatar
Martin Souchal committed
614 615 616
    <script src="./remark-latest.min.js">
    </script>
    <script>
Martin Souchal's avatar
maj  
Martin Souchal committed
617 618 619 620 621 622
      var slideshow = remark.create({
          highlightStyle: 'monokai',
          highlightLanguage: 'remark',
          highlightLines: true,
          ratio: '16:9'
	    });
Martin Souchal's avatar
Martin Souchal committed
623
    </script>
Martin Souchal's avatar
Martin Souchal committed
624 625
</body>

Martin Souchal's avatar
maj  
Martin Souchal committed
626
</html>