
Ebben a cikkben a működési elvet fogjuk megvizsgálni , valamint gyakorlati részt is bemutatok, amely azokat Dockerhez való csatlakoztatásra vonatkozik.
A Docker általános problémáiról és a megoldási lehetőségekről már , ma röviden ismertetem a Kata Containers megvalósítását. A Kata Containers egy biztonságos környezet (runtime) konténerekhez, amely könnyített virtuális gépeken alapul. A használatuk hasonló a többi konténerhez, de kiegészítő, megbízhatóbb elszigetelést biztosít a hardvervirtualizációs technológia alkalmazásával. A projekt 2017-ben indult, az azonos nevű közösség akkor zárta le a legjobb ötletek egyesítését az Intel Clear Containers és a Hyper.sh RunV között, majd elkezdődött a különböző architektúrák támogatására irányuló munkafolyamat, beleértve az AMD64, ARM, IBM p- és z-sorozatokat. Továbbá támogatott a működés a QEMU és Firecracker hipervizorok alatt, és van integráció a containerd-vel. A kód elérhető a MIT licenc alatt áll.
Főbb lehetőségek
- Külön kernel használata révén a hálózati, memória- és bemeneti-kimeneti műveletek elszigetelése biztosítható, lehetőség van a hardveres elszigetelés kényszerített alkalmazására a virtualizációs kiterjesztések alapján.
- Ipari szabványok támogatása, beleértve az OCI-t (konténerformátum), Kubernetes CRI.
- Stabil teljesítmény a hagyományos Linux konténerek esetén, növelt elszigetelés, amely nem befolyásolja a hagyományos virtuális gépek teljesítményét.
- Megszűnik a szükséglet a konténerek teljes virtuális gépek belsejében való futtatására, a szabványos interfészek megkönnyítik az integrációt és a telepítést.
Telepítés
Van telepítési lehetőség közül, a Centos 7 operációs rendszer alapú telepítést fogom megvizsgálni.
Fontos: a Kata Containers működése csak hardveren támogatott, a virtualizációs pass-through nem mindig működik, szintén sse4.1 támogatásra van szükség a processzortól.
A Kata Containers telepítése meglehetősen egyszerű:
Telepítjük a tárolók kezeléséhez szükséges eszközöket:
# yum -y install yum-utilsLetiltjuk a Selinuxot (helyesebb lenne konfigurálni, de az egyszerűség kedvéért letiltom):
# setenforce 0
# sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/configHozzáadjuk a tárolót, és elvégezzük a telepítést
# 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-shimBeállítás
A Dockerrel való együttműködéshez végzem a konfigurálást, a telepítése tipikus, ezt nem részletezem:
# 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 369ce74a3cMódosítjuk a daemon.json fájlt:
# cat <<EOF > /etc/docker/daemon.json
{
"default-runtime": "kata-runtime",
"runtimes": {
"kata-runtime": {
"path": "/usr/bin/kata-runtime"
}
}
}
EOFÚjraindítjuk a dockert:
# service docker restartSzervizellenőrzés
Ha a konténert a Docker újraindítása előtt indítjuk, láthatjuk, hogy az uname a fő rendszer kernel verzióját adja vissza:
# 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/LinuxAz újraindítás után a kernel verzió így néz ki:
# 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/LinuxTovábbi parancsok!
# 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.050sGyors terheléses tesztelés
A virtualizációval járó veszteségek értékelésére — sysbench-et indítok, mint fő példák .
Sysbench indítása Docker+containerd használatával
Processzor teszt
sysbench 1.0: több szálas rendszerértékelő benchmark
A teszt futtatása a következő beállításokkal:
Szálak száma: 1
Véletlenszám-generátor inicializálása a jelenlegi időből
Prímszámok határa: 20000
Munkafolyamatok inicializálása...
Szálak indítva!
Általános statisztikák:
összes idő: 36.7335s
események összes száma: 10000
esemény végrehajtásához szükséges összes idő: 36.7173s
válaszidő:
min: 3.43ms
avg: 3.67ms
max: 8.34ms
körülbelül 95. percentilis: 3.79ms
Szálak méltányossága:
események (avg/stddev): 10000.0000/0.00
végrehajtási idő (avg/stddev): 36.7173/0.00Memória teszt
sysbench 1.0: több szálas rendszerértékelő benchmark
A teszt futtatása a következő beállításokkal:
Szálak száma: 1
Véletlenszám-generátor inicializálása a jelenlegi időből
Munkafolyamatok inicializálása...
Szálak indítva!
Végrehajtott műveletek: 104857600 (2172673.64 ops/sec)
102400.00 MiB továbbítva (2121.75 MiB/sec)
Általános statisztikák:
összes idő: 48.2620s
események összes száma: 104857600
esemény végrehajtásához szükséges összes idő: 17.4161s
válaszidő:
min: 0.00ms
avg: 0.00ms
max: 0.17ms
körülbelül 95. percentilis: 0.00ms
Szálak méltányossága:
események (avg/stddev): 104857600.0000/0.00
végrehajtási idő (avg/stddev): 17.4161/0.00Sysbench indítása Docker+Kata Containers használatával
Processzor teszt
sysbench 1.0: több szálas rendszerértékelő benchmark
A teszt futtatása a következő beállításokkal:
Szálak száma: 1
Véletlenszám-generátor inicializálása a jelenlegi időből
Prímszámok határa: 20000
Munkafolyamatok inicializálása...
Szálak indítva!
Általános statisztikák:
összes idő: 36.5747s
események összes száma: 10000
esemény végrehajtásához szükséges összes idő: 36.5594s
válaszidő:
min: 3.43ms
avg: 3.66ms
max: 4.93ms
körülbelül 95. percentilis: 3.77ms
Szálak méltányossága:
események (avg/stddev): 10000.0000/0.00
végrehajtási idő (avg/stddev): 36.5594/0.00Memória teszt
sysbench 1.0: több szálas rendszerértékelő benchmark
A teszt futtatása a következő beállításokkal:
Szálak száma: 1
Véletlenszám-generátor inicializálása a jelenlegi időből
Munkafolyamatok inicializálása...
Szálak indítva!
Végrehajtott műveletek: 104857600 (2450366.94 ops/sec)
102400.00 MiB továbbítva (2392.94 MiB/sec)
Általános statisztikák:
összes idő: 42.7926s
események összes száma: 104857600
esemény végrehajtásához szükséges összes idő: 16.1512s
válaszidő:
min: 0.00ms
avg: 0.00ms
max: 0.43ms
körülbelül 95. percentilis: 0.00ms
Szálak méltányossága:
események (avg/stddev): 104857600.0000/0.00
végrehajtási idő (avg/stddev): 16.1512/0.00Lényegében a helyzet már világos, de optimalizáltabb, ha a teszteket többször futtatjuk, eltávolítva az eltéréseket és átlagolva az eredményeket, ezért egyelőre nem végzek több tesztet.
Következtetések
Annak ellenére, hogy az ilyen konténerek indítása körülbelül ötször-tízszer több időt vesz igénybe (tipikus indítási idő hasonló parancsok esetén containerd használatakor - kevesebb mint egy harmadik másodperc) - még mindig elég gyorsan működnek, ha az abszolút indítási időt nézzük (feljebb példák találhatók, a parancsok átlagosan három másodperc alatt futnak). A CPU és RAM gyors teszt legjobb eredményei pedig gyakorlatilag azonos eredményeket mutatnak, ami nem lehet más, mint örömteli, különösen figyelembe véve, hogy az elszigetelést egy jól bevált mechanizmus, mint a kvm biztosítja.
Bejelentés
Ez egy áttekintő cikk, de lehetőséget ad az alternatív futtatási környezetek megismerésére. Sok alkalmazási terület nincs lefedve, például a cikkben le van írva, hogy a Kubernetes indítható a Kata Containers felett. Továbbá, több tesztet is lehet végezni, amelyek a biztonsági problémák keresésére, megszorítások bevezetésére és más érdekes dolgokra összpontosítanak.
Kérem, hogy mindenki, aki ideért, vegyen részt a szavazásban, amely a jövőbeli publikációk témáját fogja meghatározni.
Csak a regisztrált felhasználók vehetnek részt a szavazáson. , kérem.
Érdemes volna tovább publikálni a Kata Containers-ről szóló cikkeket?
80,0%Igen, írj még!28
20,0%Nem, nem érdemes…7
35 felhasználó szavazott. 7 felhasználó tartózkodott.
Forrás: habr.com
