23 Ağustos 2022 Salı

cgcreate komutu - Grup Yaratma

Giriş
1. cgcreate ile grup yarattıktan sonra cgset komutu ile gruba kaynak ayrılır
2. cgexec ile uygulamalar çalıştırılırken grupları belirtilir.

-g seçeneği
Örnek - memory
Şöyle yaparız. Burada "/sys/fs/cgroup/memory/my-process" isimli dizinde belleği sınırlandırılmış kaynaklar görülür
sudo cgcreate -g memory:my-process
Bu kaynağı kullanan bash yaratmak için şöyle yaparız
$ sudo cgexec -g memory:my-process bash
root@cgroup:~#
Bu kayanğı kullanan ve farklı bir namespace içinde  bash yaratmak için şöyle yaparız
$ sudo cgexec -g cpu,memory:my-process \
  unshare -uinpUrf --mount-proc \
  sh -c "/bin/hostname my-process && chroot mktemp -d /bin/sh"
Örnek - cpu
Şöyle yaparız. Burada tarayıcıya az işlemci gücü ayrılıyor
# you might need to create the right mountpoints first
sudo mkdir /sys/fs/cgroup/cpu
sudo mount -t cgroup -o cpu cpu /sys/fs/cgroup/cpu

# Create a group that controls `cpu` allotment, called `/browser`
sudo cgcreate -g cpu:/browser
# Create a group that controls `cpu` allotment, called `/important`
sudo cgcreate -g cpu:/important

# allocate few shares to your `browser` group, and many shares of the CPU time to the
# `important` group.
sudo cgset -r cpu.shares=128 browser sudo cgset -r cpu.shares=1024 important cgexec -g cpu:browser chromium --incognitio cgexec -g cpu:important make -j10 #or whatever
-r seçeneği
Grubu siler
Örnek
Şöyle yaparız
# Creating a cgroup.
sudo cgcreate -g cpu,memory:$UUID

# Set up a limit memory for this cgroup.
sudo cgset -r memory.limit_in_bytes=100000000 $UUID

# Set up a limit CPU for this cgroup.
sudo cgset -r cpu.shares=512 $UUID && 
sudo cgset -r cpu.cfs_period_us=1000000 $UUID && 
sudo cgset -r cpu.cfs_quota_us=2000000 $UUID

# Creating a container.
sudo cgexec -g cpu,memory:$UUID unshare -uinpUrf --mount-proc sh 
  -c "/bin/hostname $UUID && chroot $ROOTFS /bin/sh"

# Deleting this cgroup.
sudo cgdelete -r -g cpu,memory:$UUID


8 Ağustos 2022 Pazartesi

Namespace Nedir? - Sanal Bir Ortam Yaratır

Giriş
Açıklaması şöyle. Namespace'ler sayesinde LCX ve Docker gibi container teknolojileri mümkün oldu.
The building blocks of multi-tenancy are Linux namespaces, the very technology that makes LXC, Docker, and other kinds of containers possible.
Açıklaması şöyle
Namespaces are a feature of the Linux kernel that partitions kernel resources such that one set of processes sees one set of resources while another set of processes sees a different set of resources.
Sanal bir ortam yaratılması gibi düşünülebilir. Namespace'ler şöyle. Her birisi farklı işe yararlar.
1. Network Namespace
2. PID (Process Id) Namespace
3. Mount Namespace
4. Unix Time-sharing System (UTS) Namespace
5. User Namespace

Network Namespace
Açıklaması şöyle
The networking namespace allows us to run the program on any port without conflict with other processes running on the same computer.
Açıklaması şöyle.
Only allows access to certain network devices. It has its own firewall, route rules, and socket port numbers. As an outcome, it is not able to see all traffic or contact all endpoints
PID (Process Id) Namespace
Açıklaması şöyle. Farklı PID Namespace içindeki process'ler birbirlerini "ps aux" komutu ile göremezler. Process'leri izole eder
... the PID namespace makes it so that a process can only see PIDs in its own namespace, and therefore cannot send kill signals to random processes on the host.
Açıklaması şöyle
This type of namespace will isolate processes from each other. One process cannot see others, and also same process ID can exist in multiple namespaces. Such as — Process ID 1 can exist multiple times, but once in every namespace.
Mount Namespace
Açıklaması şöyle
Mount namespace allows you to mount and unmount the filesystem without affecting the host filesystem.
Açıklaması şöyle.
Mount namespace: has an independent list of mount points seen by the processes in the corresponding namespace. This means that we can mount and unmount filesystems in a mount namespace without affecting the host filesystem.
User Namespace
Açıklaması şöyle.
A different set of user ids and group ids are used. Such as — A user (0) inside one namespace can be different from the user (0) inside another namespace.
unshare komutu
Yeni bir PID (Process Id) Namespace içinde bash çalıştırmak için  şöyle yaparız
sudo unshare --fork --pid --mount-proc bash