
U ovom članku će biti objašnjeno načelo rada , a takođe će biti i praktični deo sa njihovim povezivanjem na Docker.
O općim problemima sa Dockerom i mogućim rešenjima već , danas ću ukratko opisati implementaciju od Kata Containers. Kata Containers je sigurno okruženje za izvršavanje (runtime) kontejnera na osnovu laganih virtuelnih mašina. Rad sa njima odvija se na isti način kao i sa drugim kontejnerima, ali dodatno postoji pouzdanija izolacija koristeći tehnologiju virtualizacije hardvera. Projekat je započet 2017. godine, istoimena zajednica je tada završila fuziju najboljih ideja iz Intel Clear Containers i Hyper.sh RunV, nakon čega se nastavilo sa podrškom različitih arhitektura, uključujući AMD64, ARM, IBM p- i z-serije. Takođe se podržava rad unutar hipervizora QEMU, Firecracker, kao i integracija sa containerd. Kod je dostupan na pod MIT licencom.
Osnovne mogućnosti
- Rad sa posebnim jezgrom na taj način omogućava izolaciju mreže, memorije i operacija ulaza-izlaza, postoji mogućnost prisilnog korišćenja hardverske izolacije na osnovu proširenja virtualizacije
- Podrška industrijskim standardima, uključujući OCI (format kontejnera), Kubernetes CRI
- Stabilne performanse običnih Linux kontejnera, povećana izolacija bez troškova koji utiču na performanse običnih virtuelnih mašina
- Eliminacija potrebe za pokretanjem kontejnera unutar punih virtuelnih mašina, generički interfejsi pojednostavljuju integraciju i pokretanje
Instalacija
Postoji Opcije instalacije, razmotriću instalaciju iz repozitorija, na bazi operativnog sistema Centos 7.
Važno: rad Kata Containers podržan je samo na hardveru, propuštanje virtualizacije ne uspeva uvek, takođe je potrebna podrška za sse4.1 procesora.
Instalacija Kata Containers je prilično jednostavna:
Instaliramo alate za rad sa repozitorijama:
# yum -y install yum-utilsOnemogućavamo Selinux (ispravnije — konfigurišemo, ali radi jednostavnosti ga onemogućavam):
# setenforce 0
# sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/configPovezujemo repozitorij i vršimo instalaciju
# source /etc/os-release
# ARCH=$(arch)
# BRANCH="${BRANCH:-stable-1.10}"
# yum-config-manager --add-repo "http://download.opensuse.org/repositories/home:/katacontainers:/releases:/${ARCH}:/${BRANCH}/CentOS_${VERSION_ID}/home:katacontainers:releases:${ARCH}:${BRANCH}.repo"
# yum -y install kata-runtime kata-proxy kata-shimPodešavanje
Vršiću podešavanje za rad sa docker-om, njegova instalacija je standardna, neću je detaljnije objašnjavati:
# rpm -qa | grep docker
docker-ce-cli-19.03.6-3.el7.x86_64
docker-ce-19.03.6-3.el7.x86_64
# docker -v
Docker version 19.03.6, build 369ce74a3cUvodimo izmene u daemon.json:
# cat <<EOF > /etc/docker/daemon.json
{
"default-runtime": "kata-runtime",
"runtimes": {
"kata-runtime": {
"path": "/usr/bin/kata-runtime"
}
}
}
EOFPonovo pokrećemo docker:
# service docker restartProveravanje funkcionalnosti
Ako pokrenete kontejner pre ponovnog pokretanja dockera — možete primetiti da uname pokazuje verziju jezgra koja se izvršava na glavnom sistemu:
# docker run busybox uname -a
Linux 19efd7188d06 3.10.0-1062.12.1.el7.x86_64 #1 SMP Tue Feb 4 23:02:59 UTC 2020 x86_64 GNU/LinuxNakon ponovnog pokretanja — verzija jezgra izgleda ovako:
# docker run busybox uname -a
Linux 9dd1f30fe9d4 4.19.86-5.container #1 SMP Sat Feb 22 01:53:14 UTC 2020 x86_64 GNU/LinuxJoš naredbi!
# time docker run busybox mount
kataShared on / type 9p (rw,dirsync,nodev,relatime,mmap,access=client,trans=virtio)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
tmpfs on /dev type tmpfs (rw,nosuid,size=65536k,mode=755)
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=666)
sysfs on /sys type sysfs (ro,nosuid,nodev,noexec,relatime)
tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,relatime,mode=755)
cgroup on /sys/fs/cgroup/systemd type cgroup (ro,nosuid,nodev,noexec,relatime,xattr,name=systemd)
cgroup on /sys/fs/cgroup/cpu,cpuacct type cgroup (ro,nosuid,nodev,noexec,relatime,cpu,cpuacct)
cgroup on /sys/fs/cgroup/blkio type cgroup (ro,nosuid,nodev,noexec,relatime,blkio)
cgroup on /sys/fs/cgroup/memory type cgroup (ro,nosuid,nodev,noexec,relatime,memory)
cgroup on /sys/fs/cgroup/devices type cgroup (ro,nosuid,nodev,noexec,relatime,devices)
cgroup on /sys/fs/cgroup/perf_event type cgroup (ro,nosuid,nodev,noexec,relatime,perf_event)
cgroup on /sys/fs/cgroup/net_cls,net_prio type cgroup (ro,nosuid,nodev,noexec,relatime,net_cls,net_prio)
cgroup on /sys/fs/cgroup/freezer type cgroup (ro,nosuid,nodev,noexec,relatime,freezer)
cgroup on /sys/fs/cgroup/pids type cgroup (ro,nosuid,nodev,noexec,relatime,pids)
cgroup on /sys/fs/cgroup/cpuset type cgroup (ro,nosuid,nodev,noexec,relatime,cpuset)
mqueue on /dev/mqueue type mqueue (rw,nosuid,nodev,noexec,relatime)
shm on /dev/shm type tmpfs (rw,nosuid,nodev,noexec,relatime,size=65536k)
kataShared on /etc/resolv.conf type 9p (rw,dirsync,nodev,relatime,mmap,access=client,trans=virtio)
kataShared on /etc/hostname type 9p (rw,dirsync,nodev,relatime,mmap,access=client,trans=virtio)
kataShared on /etc/hosts type 9p (rw,dirsync,nodev,relatime,mmap,access=client,trans=virtio)
proc on /proc/bus type proc (ro,relatime)
proc on /proc/fs type proc (ro,relatime)
proc on /proc/irq type proc (ro,relatime)
proc on /proc/sys type proc (ro,relatime)
tmpfs on /proc/acpi type tmpfs (ro,relatime)
tmpfs on /proc/timer_list type tmpfs (rw,nosuid,size=65536k,mode=755)
tmpfs on /sys/firmware type tmpfs (ro,relatime)
real 0m2.381s
user 0m0.066s
sys 0m0.039s# time docker run busybox free -m
total used free shared buff/cache available
Mem: 1993 30 1962 0 1 1946
Swap: 0 0 0
real 0m3.297s
user 0m0.086s
sys 0m0.050sBrzo testiranje opterećenja
Za procjenu gubitaka od virtualizacije — pokrećem sysbench kao glavne primjere .
Pokretanje sysbencha koristeći Docker+containerd
Testiranje procesora
sysbench 1.0: višekratno sistemsko evaluacijsko mjerilo
Izvođenje testa s sljedećim opcijama:
Broj niti: 1
Inicijalizacija generatora slučajnih brojeva iz trenutnog vremena
Gornja granica prostih brojeva: 20000
Inicijalizacija radnih niti...
Niti su pokrenute!
Opće statistike:
ukupno vrijeme: 36.7335s
ukupni broj događaja: 10000
ukupno vrijeme potrebno za izvršenje događaja: 36.7173s
vrijeme odgovora:
min: 3.43ms
avg: 3.67ms
max: 8.34ms
približno 95 percentil: 3.79ms
Pravednost niti:
događaji (avg/stddev): 10000.0000/0.00
vrijeme izvršenja (avg/stddev): 36.7173/0.00Testiranje radne memorije
sysbench 1.0: višekratno sistemsko evaluacijsko mjerilo
Izvođenje testa s sljedećim opcijama:
Broj niti: 1
Inicijalizacija generatora slučajnih brojeva iz trenutnog vremena
Inicijalizacija radnih niti...
Niti su pokrenute!
Izvršene operacije: 104857600 (2172673.64 ops/sec)
102400.00 MiB preneseno (2121.75 MiB/sec)
Opće statistike:
ukupno vrijeme: 48.2620s
ukupni broj događaja: 104857600
ukupno vrijeme potrebno za izvršenje događaja: 17.4161s
vrijeme odgovora:
min: 0.00ms
avg: 0.00ms
max: 0.17ms
približno 95 percentil: 0.00ms
Pravednost niti:
događaji (avg/stddev): 104857600.0000/0.00
vrijeme izvršenja (avg/stddev): 17.4161/0.00Pokretanje sysbencha koristeći Docker+Kata Containers
Testiranje procesora
sysbench 1.0: višekratno sistemsko evaluacijsko mjerilo
Izvođenje testa s sljedećim opcijama:
Broj niti: 1
Inicijalizacija generatora slučajnih brojeva iz trenutnog vremena
Gornja granica prostih brojeva: 20000
Inicijalizacija radnih niti...
Niti su pokrenute!
Opće statistike:
ukupno vrijeme: 36.5747s
ukupni broj događaja: 10000
ukupno vrijeme potrebno za izvršenje događaja: 36.5594s
vrijeme odgovora:
min: 3.43ms
avg: 3.66ms
max: 4.93ms
približno 95 percentil: 3.77ms
Pravednost niti:
događaji (avg/stddev): 10000.0000/0.00
vrijeme izvršenja (avg/stddev): 36.5594/0.00Testiranje radne memorije
sysbench 1.0: višekratno sistemsko evaluacijsko mjerilo
Izvođenje testa s sljedećim opcijama:
Broj niti: 1
Inicijalizacija generatora slučajnih brojeva iz trenutnog vremena
Inicijalizacija radnih niti...
Niti su pokrenute!
Izvršene operacije: 104857600 (2450366.94 ops/sec)
102400.00 MiB preneseno (2392.94 MiB/sec)
Opće statistike:
ukupno vrijeme: 42.7926s
ukupni broj događaja: 104857600
ukupno vrijeme potrebno za izvršenje događaja: 16.1512s
vrijeme odgovora:
min: 0.00ms
avg: 0.00ms
max: 0.43ms
približno 95 percentil: 0.00ms
Pravednost niti:
događaji (avg/stddev): 104857600.0000/0.00
vrijeme izvršenja (avg/stddev): 16.1512/0.00Situacija je već prilično jasna, ali optimalnije je provoditi testove nekoliko puta, uklanjajući izTočak i prosječući rezultate, stoga za sada ne radim više testova.
Zaključci
Iako pokretanje takvih kontejnera traje otprilike pet do deset puta duže (tipično vrijeme pokretanja sličnih komandi koristeći containerd je manje od trećine sekunde) — i dalje rade dovoljno brzo ako gledamo apsolutno vrijeme pokretanja (primjeri su navedeni iznad, komande se izvršavaju u prosjeku za tri sekunde). A rezultati brzog testa CPU i RAM-a pokazuju praktički jednake rezultate, što ne može ne obradovati, osobito s obzirom na to da izolacija se ostvaruje pomoću dobro testiranog mehanizma kao što je kvm.
Najava
Članak je pregledan, ali pruža mogućnost isprobavanja alternativnog runtime-a. Mnoge oblasti primjene nisu pokrivene, na primjer, na stranici je opisana mogućnost pokretanja Kubernetes-a iznad Kata Containers. Također možete provesti niz testova usmjerenih na pronalaženje sigurnosnih problema, postavljanje ograničenja i druge zanimljive stvari.
Molim sve koji su pročitali ili preskočili ovdje da sudjeluju u anketi, od koje će zavisiti buduće objave na ovu temu.
Samo registrirani korisnici mogu sudjelovati u anketi. , molimo.
Treba li dalje objavljivati članke o Kata Containers?
80,0%Da, piši još!28
20,0%Ne, ne treba…7
Glasalo je 35 korisnika. Suzdržalo se 7 korisnika.
Izvor: habr.com
