Les conteneurs sont une partie importante de l'informatique moderne, et à mesure que l'infrastructure autour des conteneurs évolue, de nouveaux et meilleurs outils ont commencé à faire surface. Auparavant, vous pouviez exécuter des conteneurs uniquement avec LXC, puis Docker a gagné en popularité et les choses ont commencé à devenir plus complexes. Finalement, nous avons obtenu le système de gestion de conteneurs que nous méritions tous avec Podman, un moteur de conteneurs sans démon qui facilite la création, l'exécution et la gestion des conteneurs et des pods.
Les conteneurs s'interfacent directement avec les capacités du noyau Linux comme les cgroups et les espaces de noms, et ils génèrent de nombreux nouveaux processus dans ces espaces de noms. En bref, exécuter un conteneur, c'est littéralement exécuter un système Linux à l'intérieur un système Linux. Du point de vue du système d'exploitation, cela ressemble beaucoup à une activité administrative et privilégiée. Les utilisateurs normaux n'ont généralement pas le droit de régner librement sur les ressources système comme l'exigent les conteneurs, donc par défaut, root ou sudo
des autorisations sont requises pour exécuter Podman. Cependant, ce n'est que le paramètre par défaut, et ce n'est en aucun cas le seul paramètre disponible ou prévu. Cet article montre comment configurer votre système Linux afin qu'un utilisateur normal puisse exécuter Podman sans utiliser sudo
("sans racine").
ID utilisateur des espaces de noms
Conteneurs Linux
- Que sont les conteneurs Linux ?
- Une introduction à la terminologie des conteneurs
- Télécharger :Introduction aux conteneurs
- Opérateurs Kubernetes :automatisation de la plate-forme d'orchestration de conteneurs
- eBook :Modèles Kubernetes pour la conception d'applications cloud natives
- Qu'est-ce que Kubernetes ?
Un espace de noms de noyau est essentiellement une construction imaginaire qui aide Linux à garder une trace des processus qui vont ensemble. Ce sont les cordes rouges de la file d'attente de Linux. Il n'y a pas réellement de différence entre les processus d'une file d'attente et d'une autre, mais il est utile de les isoler les uns des autres. Les garder séparés est la clé pour déclarer un groupe de processus un "conteneur" et l'autre groupe de processus votre système d'exploitation.
Linux suit quel utilisateur ou groupe possède chaque processus par ID utilisateur (UID) et ID de groupe (GID). Normalement, un utilisateur a accès à un millier d'UID subordonnés à attribuer aux processus enfants dans un espace de noms. Étant donné que Podman exécute un système d'exploitation subordonné entier attribué à l'utilisateur qui a démarré le conteneur, vous avez besoin de bien plus que l'attribution par défaut de sous-uids et de sous-gids.
Vous pouvez accorder à un utilisateur plus de sous-uids et de sous-gids avec le usermod
commande. Par exemple, pour accorder plus de sous-uids et de sous-gids à l'utilisateur tux
, choisissez un UID suffisamment élevé auquel aucun utilisateur n'est attribué (par exemple, 200 000) et incrémentez-le de plusieurs milliers :
$ sudo usermod \
--add-subuids 200000-265536 \
--add-subgids 200000-265536 \
tux
Accès à l'espace de noms
Il existe également des limites sur les espaces de noms. Cela est généralement défini très haut, mais vous pouvez vérifier l'attribution des espaces de noms par l'utilisateur avec systctl
, l'outil de paramétrage du noyau :
$ sysctl --all --pattern user_namespaces
user.max_user_namespaces = 28633
C'est beaucoup d'espaces de noms, et c'est probablement ce que votre distribution a défini par défaut. Si votre distribution n'a pas cette propriété ou l'a définie très bas, alors vous pouvez la créer en entrant ce texte dans le fichier /etc/sysctl.d/userns.conf
:
user.max_user_namespaces=28633
Chargez ce paramètre :
$ sudo sysctl -p /etc/sysctl.d/userns.conf
Exécuter un conteneur sans root
Une fois que vous avez défini votre configuration, redémarrez votre ordinateur pour vous assurer que les modifications apportées à vos paramètres utilisateur et noyau sont chargées et actives.
Après le redémarrage, essayez d'exécuter une image de conteneur :
$ podman run -it busybox echo "hello"
hello
Conteneurs comme les commandes
Les conteneurs peuvent sembler mystérieux si vous êtes nouveau, mais en réalité, ils ne sont pas différents de votre système Linux existant. Ce sont littéralement des processus exécutés sur votre système, sans le coût ou la barrière d'un environnement émulé ou d'une machine virtuelle. Tout ce qui sépare un conteneur de votre système d'exploitation, ce sont les espaces de noms du noyau, ce ne sont donc que des processus natifs avec des étiquettes différentes. Podman rend cela plus évident que jamais, et une fois que vous avez configuré Podman comme une commande sans racine, les conteneurs ressemblent plus à des commandes qu'à des environnements virtuels. Podman simplifie les conteneurs et les pods, alors essayez-le.