Standards et compatibilité
Standards et compatibilité
Gestion statique des ressources
rlimits : resource limits
- Limite les ressources disponibles pour l'ensemble des processus d'un
utilisateur ou d'un groupe
- Affichage / manipulation des limites avec
ulimit
- Deux types de limites :
hard
et soft
- Limite
soft
:
- limite appliquée par le noyau
- définissable entre 0 et la limite
hard
CAP_SYS_RESOURCE
pour augmenter les limites hard
- Réduction des limites
hard
irréversibles pour !root
- Limites initiales appliquées lors du login par PAM, configurées dans
/etc/security/limits.conf
rlimits : resource limits
|
|
|
|
cpu time (seconds) |
unlimited |
locked-in-memory size (kbytes) |
8192 |
file size (blocks) |
unlimited |
address space (kbytes) |
unlimited |
data seg size (kbytes) |
unlimited |
file locks |
unlimited |
stack size (kbytes) |
8192 |
pending signals |
127183 |
core file size (blocks) |
unlimited |
bytes in POSIX msg queues |
819200 |
resident set size (kbytes) |
unlimited |
max nice |
0 |
processes |
127183 |
max rt priority |
0 |
file descriptors |
1024 |
rt cpu time (microseconds) |
unlimited |
Quota disque
- Limite les ressources disque par
user
et par group
- Limite
soft
& hard
par système de fichier
- La limite
hard
ne peut pas être dépassée
- La limite
soft
peut être dépassée pour un temps donné
- Une fois ce temps dépassée, la limite
soft
devient hard
- L'utilisateur doit libérer de la place pour redescendre au dessous de la
limite
soft
avant de pouvoir écrire à nouveau des données
- Quota disque par « projets » avec XFS : voir
xfs_quota(8)
Espace disque réservé pour les processus privilégiés
- Possibilité de réserver de l'espace sur un système de fichier
- Permet aux processus privilégiés de continuer à fonctionner lorsque le disque
est « plein »
$ tune2fs -m reserved-blocks-percentage
- Valeur par défaut : 5 % de la taille du système de fichier
L'overcommit
- Concept essentiel permettant la co-location des VMs et conteneurs sur un
système
- Chaque processus a l'impression d'être le seul à utiliser le matériel
- Chaque processus « dispose » de plus de ressources que ce qui est réellement
disponible
- Exemple : l'espace d'adressage virtuel :
- 4Go en 32bits, pour l'instant en 64 bits
/proc/sys/vm/overcommit_memory
& /proc/sys/vm/overcommit_ratio
- Linux kernel : Overcommit Accounting
- Linux kernel : Memory Layout on AArch64 Linux
Priorités, IO, et CPU
- nice level : Défini la priorité d'accès aux ressources CPU pour un processus
- ionice : Défini la priorité d'accès aux périphériques pour un processus
- cpu affinity : Oblige un processus à utiliser des cœurs définis
Gestion dynamique : cgroups
Limites du modèle statique
- Flexibilité très limitée
- Gestion manuelle des changements de limites :
- Pas de répartition automatique (entre utilisateurs, services, applications)
- Peu adapté au modèle de co-location d'un grand nombre de machines
virtuelles ou de conteneurs :
- Besoins variables
- Un seul utilisateur
- Peu adapté à la gestion d'un service constitué de plusieurs processus
cgroups
- Introduit dans le noyau 2.6.24
- Permets de regrouper des processus en leur associant un label
- Organisation hiérarchique
- Les processus fils héritent du cgroup du père
- Représenté par un système de fichier virtuel :
/sys/fs/cgroup/
Exemple : libvirt : Control Groups Resource Management
cgroups : controllers
- Configuration d'un ou plusieurs
controllers
pour chaque groupe de tâches
- Tous les processus d'un groupe se voient imposer les mêmes contraintes
- cgroups(7) : liste
complète ainsi que les versions du noyau à partir desquelles chaque
controller
est disponible
- Liste des
controllers
disponibles sur un système :
$ cat /proc/cgroups
#subsys_name hierarchy num_cgroups enabled
cpuset 0 358 1
cpu 0 358 1
cpuacct 0 358 1
blkio 0 358 1
memory 0 358 1
devices 0 358 1
...
cgroups : controllers
disponibles
- cpu (& cpuacct v1) : mesure et limite l'utilisation CPU
- cpuset : répartition sur les CPUs / nœuds NUMA
- memory : mesure et limite l'utilisation de la mémoire
- blkio/io : mesure et limite l'utilisation des périphériques de type block
- pids : limite le nombre de PID disponibles
- freezer : pause l'exécution des processus du groupe
- perf_event : groupes spécifiques au sous-système perf
- rdma : limite les accès RDMA et InfiniBand
- hugetlb : limite l'utilisation des Huge Page
- devices : restreint l'accès aux devices disponibles
- net_cls & net_prio (v1) : classe et définit des priorités pour les paquets
réseaux
cgroups v1 & v2
Deux versions des cgroups :
- cgroups v1 :
- chaque
controller
a sa propre hiérarchie
- pose des problèmes de gestion, performance, complexité
- diverses limites liées au design
- cgroups v2 :
- une seule hiérarchie commune à tous les
controllers
- configuration différente pour certains
controllers
- disponibilité des
controllers
v2 équivalente à v1 à partir du noyau
5.6.
Linux kernel : cgroups v2
cgroups v1 ou v2 ?
- Utiliser la version 2 (sauf bonne raison, vieux systèmes, etc.)
- Version 2 désormais supportée par tous les gestionnaires de conteneurs :
- Version 2 disponible par défaut :
- Fedora 31 (2019), CentOS 9 Stream & RHEL 9 (2022)
- Debian 11 (2021), Ubuntu 21.10 (2021)
- Supporté par Kubernetes depuis la version 1.25 (2022)
# Virtualisation « lourde »
- Avantages :
- Bonne isolation entre machines virtuelles
- Contrôle complet de l'environnement d'exécution
- Options pour le partage de périphériques matériel
- Gestion des ressources disponibles simple
- Désavantages :
- Besoin en authentification, journalisation, etc.
- Gestion de l'ensemble du système d'exploitation
- Sécurité des éléments matériels partagés ?
- Ressources disponibles fixes
Résultat : Plusieurs services par machine virtuelle
---
- Sans nécessairement utiliser la virtualisation
- Démarrage rapide
- Durée de vie variable (usage unique, récurrent, long terme, etc.)
- Fonctionnalité ancienne (début dans la branche 2.4!) mais étendue « récemment »
**Note :** La nomenclature et les limites sont floues. Concepts souvent mélangés.
# rkt (~Podman) vs Docker
![center](img/rkt-vs-docker-process-model.png)
<https://coreos.com/rkt/docs/latest/rkt-vs-other-projects.html>
---
- Images de conteneur (archive tar + metadata json) :
- Docker Format v2 (standard *de facto*)
- OCI Image Format Specification
- OCI Runtime Specification (`runc`, `crun`)
- OCI Distribution Specification
# Conteneurs et applications graphiques
---
# Conteneurs et applications graphiques
- Sandboxing d'applications graphiques :
- Flatpak (voir Flathub)
- Firejail
- Snapcraft ou Snaps (principalement sous Ubuntu)
- Attention : Wayland nécesssaire. Le serveur d'affichage X.org ne peut pas
être configuré de façon sécurisée
- Systèmes d'exploitation centrés sur les conteneurs :
- Fedora Atomic Desktops (Silverblue, Kinoite, Sericea, Onyx)
- Endless OS, OpenSuse MicroOS / Aeon / Kalpa, Vanilla OS
- Ubuntu Core
---