Rövid áttekintés és a Kata Containers beállítása

Rövid áttekintés és a Kata Containers beállítása
Ebben a cikkben a működési elvet fogjuk megvizsgálni Kata Containers, 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 írva volt, 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 GitHub 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 több 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-utils

Letiltjuk 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/config

Hozzá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-shim

Beá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 369ce74a3c

Mó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 restart

Szervizellenő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/Linux

Az ú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/Linux

Tová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.050s

Gyors 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 ezt a változatot választom.

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.00

Memó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.00

Sysbench 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.00

Memó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.00

Lé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, jelentkezzen be., 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

Megbízható hosting vásárlása weboldalak számára, DDoS védelemmel, VPS VDS szerverek. 🔥 Megbízható webtárhely vásárlása DDoS védelemmel, VPS VDS szerverek | ProHoster