Skip to content
Snippets Groups Projects
Commit d7ba1c97 authored by valentin's avatar valentin
Browse files

Feat: advance in tp2

parent 7a20959f
No related branches found
No related tags found
No related merge requests found
Pipeline #30366 passed
......@@ -16,7 +16,7 @@ devices : Controle les process pouvant creer, ouvrir, lire et detruire les devic
pids : Limite le nombre de sous process que peux creer un process.
4. Comment pouvez-vous utiliser les cgroups pour limiter la quantité de CPU qu'un conteneur peut utiliser ?
- Détaillez les étapes pour définir des limites CPU à l'aide des cgroups.
```
```sh
cd /tmp # Creating in tmp folder
mkdir cgroup
mount -t cgroup -o cpu cgroup cgroup
......@@ -30,7 +30,20 @@ echo 0 > cgroup.procs
Le nat permet a un appareil tel qu'un routeur de traduire une IP public vers un reseau d'IP prive et inversement. Il existe plusieurs types de NAT (statique, dynamique et PAT). Cela permets ainsi a un appareil sur un reseaux prive de communiquer vers des reseaux public tel qu'internet. Le nat creer une table de correspondance et de ports associant chacun des ces ports de ses ip publics vers un autre port + ip pour une machine vers le reseaux prive.
6. Comment pouvez-vous configurer une règle NAT pour permettre à un conteneur d'accéder à Internet depuis un réseau isolé ?
- Décrivez les étapes de configuration d'une règle NAT pour le réseau de conteneurs.
```sh
# Creation d'une interface virtuel
$ ip link add eth_container type dummy
# Add ip address network to eth_container
$ ip addr add 10.0.0.1/8 dev eth_container
# Allow forwarding in iptables (avec eth0 connecte a internet / autre reseau)
$ iptables -A FORWARD -i dummy -o eth0 -s 10.0.0.0/8 -j ACCEPT
$ iptables -A FORWARD -i eth0 -o dummy -m state --state ESTABLISHED,RELATED -j ACCEPT
# Enable port forwarding on kernel
$ echo "net.ipv4.ip_forward=1" > /etc/sysctl.conf
$ sysctl -p && sysctl --system
# Enable NAT
$ iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
```
7. Quelles sont les ressources en ligne, les articles ou les tutoriels que vous avez trouvés utiles pour comprendre les cgroups et la gestion du réseau des conteneurs ?
[1](https://zarak.fr/linux/exploration-des-cgroups/)
[2](https://man7.org/linux/man-pages/man7/cgroups.7.html)
......@@ -39,12 +52,15 @@ Le nat permet a un appareil tel qu'un routeur de traduire une IP public vers un
## Création d'un environnement isolé
1. Choix du langage de programmation
- Motivé votre choix
Python sera utilise pour creer les scripts. Cela permets de pouvoir faciliter le developpement des parametres en lignes de commandes, executes des commandes sur l'OS facilement sans avoir a gerer la complexite du C ou du GO.
2. Création d'un groupe de cgroups
- Familiarisez vous avec les commandes cgroups telles que `cgcreate`, `cgset`, `cgexec`, etc.
3. Création d'un groupe de cgroup
- Comment créer un groupe de cgroups pour votre programme en utilisant la commande `cgcreate` ?
- Par exemple, créer un groupe nommé `my_container` pour isoler les ressources du conteneur.
```python
import subprocess
subprocess.run(["cgcreate", "-g", "memory,cpu:/my_container"])
```
4. Développement du programme d'isolation
- Développer un programme qui effectue les tâches suivantes :
* Crée un sous-groupe de cgroups pour le processu.
......
import subprocess
import argparse
parser = argparse.ArgumentParser(prog='Almost Docker', description='Create a container and run the program given')
parser.add_argument('program', nargs=1)
parser.add_argument('--cpu', default="512", dest="cpu")
parser.add_argument('--memory', default="104857600", dest="memory")
args = parser.parse_args()
# Create c group for controlling memory and cpu
subprocess.run(["mkdir", "-p", "/sys/fs/cgroup/memory,cpu"])
subprocess.run(["mkdir", "-p", "/sys/fs/cgroup/memory,cpu/my_container"])
# Config limit for the container
subprocess.run("echo " + str(args.cpu) + " > /sys/fs/cgroup/memory,cpu/my_container/cpu.shares", shell=True)
subprocess.run("echo " + str(args.memory) + "> /sys/fs/cgroup/memory,cpu/my_container/memory.limit_in_bytes", shell=True)
# Run the program in the cgroup
subprocess.run(["sh", "-c", "echo $$ > /sys/fs/cgroup/memory,cpu/my_container/cgroup.procs && " + " ".join(args.program)])
File added
a = 0
while True:
a = a + 1
print(a)
1
#include <stdlib.h>
#include <unistd.h>
int main(void)
{
char str[] = "Memory exhausted";
while (1)
{
void *ptr = malloc(1024*1024); /* Allocate all the memory */
if (ptr == NULL) /* Memory exhausted */
{
write(2, str, sizeof(str)); /* Write the error message
(using write to avoid internal printf memory allocation) */
while (1)
continue;
}
}
return 0;
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment