
Selles artiklis käsitletakse tööpõhimõtteid , samuti on praktiline osa nende ühendamisest Dockeriga.
Dockeriga seotud üldprobleemide ja nende lahenduste kohta on juba , täna kirjeldan lühidalt rakendust Kata Containers. Kata Containers on konteinerite turvaline teostus (runtime), mis põhineb kergetel virtuaalmasinatel. Töötamine nendega toimub samamoodi nagu teiste konteineritega, kuid täiendav isoleerimine kasutab riistvara virtualiseerimise tehnoloogiat. Projekt algas 2017. aastal, samal aastal lõpetas samanimeline kogukond parimate ideede liitmise Intel Clear Containers'i ja Hyper.sh RunV vahel, pärast mida jätkati töödega erinevate arhitektuuride, sealhulgas AMD64, ARM, IBM p- ja z-seeriates toetamiseks. Samuti toetatakse tööd hüperviisorite QEMU ja Firecracker sees ning on integreerimine containerd-ga. Kood on saadaval aadressil MIT litsentsi alusel.
Põhiomadused
- Töötamine eraldi tuumaga tagab võrgu, mälu ja sisend-väljundoperatsioonide isoleerimise, on võimalik sundida kasutama riistvara isoleerimist, mis põhineb virtualiseerimise laienditel
- Toetab tööstusstandardeid, sealhulgas OCI (konteinerite formaat), Kubernetes CRI
- Tavaliste Linuxi konteinerite stabiilne jõudlus, isoleerimise suurendamine ilma ülepaisutamiseta, mis mõjutab tavaliste virtuaalmasinate jõudlust
- Vajadus käivitada konteinerid täielikes virtuaalmasinates on elimineeritud, tüüpilised liidesed lihtsustavad integreerimist ja käivitamist
Paigaldamine
Jah paigaldamise valikuid, käsitlen paigaldamist repositoori kaudu, tuginedes operatsioonisüsteemile CentOS 7.
Oluline: Kata Containersi töö on toetatud ainult riistvaral, virtualiseerimise edastamine ei toimi alati, samuti on vajalik sse4.1 protsessorilt.
Kata Containersi paigaldamine on piisavalt lihtne:
Paigaldame tööriistad repositooride jaoks:
# yum -y install yum-utilsKäivitan Selinuxi, (õigemini seadistamine, kuid lihtsuse huvides lülitan selle välja):
# setenforce 0
# sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/configÜhendame repositoori ja teeme paigaldamise
# 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-shimSeadistamine
Seadsin seadistuse Dockeriga töötamiseks, selle paigaldamine on tüüpiline ja ma ei hakka seda detailselt kirjeldama:
# 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 369ce74a3cTeeme muudatusi failis daemon.json:
# cat <<EOF > /etc/docker/daemon.json
{
"default-runtime": "kata-runtime",
"runtimes": {
"kata-runtime": {
"path": "/usr/bin/kata-runtime"
}
}
}
EOFTaaskäivitame Docker'i:
# service docker restartTöötamise kontrollimine
Kui käivitada konteiner enne Docker'i taaskäivitamist — saab näha, et uname väljastab põhjasüsteemi käivitatud tuuma versiooni:
# 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/LinuxPärast taaskäivitamist näeb kerneliversioon välja selline:
# 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/LinuxVeel käske!
# 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.050sKiire koormustestimine
Virtualiseerimise põhjustatud kaotuste hindamiseks käitan sysbench'i, peamiste näidete jaoks .
Sysbench'i käitamine Docker+containerd abil
Protsessori test
sysbench 1.0: mitme lõimega süsteemi hindamise test
Testi käivitamine järgmiste valikutega:
Lõimede arv: 1
Juhuslike arvude generaatori algatamine praeguse aja põhjal
Esmase arvude piir: 20000
Töötajate lõimed algatatakse...
Lõimed käivitati!
Üldstatistika:
koguaeg: 36.7335s
kogusündmuste arv: 10000
sündmuste täitmiseks kulunud aeg: 36.7173s
reageerimisaeg:
min: 3.43ms
avg: 3.67ms
max: 8.34ms
ligikaudu 95. persentiil: 3.79ms
Lõimede õiglus:
sündmused (avg/stddev): 10000.0000/0.00
täitmise aeg (avg/stddev): 36.7173/0.00Mälu test
sysbench 1.0: mitme lõimega süsteemi hindamise test
Testi käivitamine järgmiste valikutega:
Lõimede arv: 1
Juhuslike arvude generaatori algatamine praeguse aja põhjal
Töötajate lõimed algatatakse...
Lõimed käivitati!
Tehtud operatsioonid: 104857600 (2172673.64 ops/sek)
102400.00 MiB edastatud (2121.75 MiB/sek)
Üldstatistika:
koguaeg: 48.2620s
kogusündmuste arv: 104857600
sündmuste täitmiseks kulunud aeg: 17.4161s
reageerimisaeg:
min: 0.00ms
avg: 0.00ms
max: 0.17ms
ligikaudu 95. persentiil: 0.00ms
Lõimede õiglus:
sündmused (avg/stddev): 104857600.0000/0.00
täitmise aeg (avg/stddev): 17.4161/0.00Sysbench'i käitamine Docker+Kata Containers abil
Protsessori test
sysbench 1.0: mitme lõimega süsteemi hindamise test
Testi käivitamine järgmiste valikutega:
Lõimede arv: 1
Juhuslike arvude generaatori algatamine praeguse aja põhjal
Esmase arvude piir: 20000
Töötajate lõimed algatatakse...
Lõimed käivitati!
Üldstatistika:
koguaeg: 36.5747s
kogusündmuste arv: 10000
sündmuste täitmiseks kulunud aeg: 36.5594s
reageerimisaeg:
min: 3.43ms
avg: 3.66ms
max: 4.93ms
ligikaudu 95. persentiil: 3.77ms
Lõimede õiglus:
sündmused (avg/stddev): 10000.0000/0.00
täitmise aeg (avg/stddev): 36.5594/0.00Mälu test
sysbench 1.0: mitme lõimega süsteemi hindamise test
Testi käivitamine järgmiste valikutega:
Lõimede arv: 1
Juhuslike arvude generaatori algatamine praeguse aja põhjal
Töötajate lõimed algatatakse...
Lõimed käivitati!
Tehtud operatsioonid: 104857600 (2450366.94 ops/sek)
102400.00 MiB edastatud (2392.94 MiB/sek)
Üldstatistika:
koguaeg: 42.7926s
kogusündmuste arv: 104857600
sündmuste täitmiseks kulunud aeg: 16.1512s
reageerimisaeg:
min: 0.00ms
avg: 0.00ms
max: 0.43ms
ligikaudu 95. persentiil: 0.00ms
Lõimede õiglus:
sündmused (avg/stddev): 104857600.0000/0.00
täitmise aeg (avg/stddev): 16.1512/0.00Põhimõtteliselt on olukord juba selge, kuid teste on optimaalsem käivitada mitu korda, kõrvaldades äärmuslikud väärtused ja keskmistades tulemusi, seetõttu ei tee ma praegu rohkem teste.
Järeldused
Kuigi selliste konteinerite käivitamine võtab aega umbes viis kuni kümme korda rohkem (tüüpiline sarnaste käskude käivitamise aeg containerd'i kasutamisel on vähem kui kolmandik sekundist) — töötavad nad siiski piisavalt kiiresti, kui arvestada absoluutses aegades (üles on toodud näited, käskude täitmine võtab keskmiselt kolm sekundit). Kiire CPU ja RAM testi tulemused näitavad tegelikult samu tulemusi, mis ei saa kui rõõmustada, eriti arvestades, et isoleerimist tagatakse sellise hästi katsetatud mehhanismi, nagu kvm, abil.
Teade
Artikkel on ülevaatlik, kuid annab võimaluse uurida alternatiivset runtime'i. Mitmed rakendusalad on katmata, näiteks on saidil kirjeldatud Kubernetes'i käivitamise võimalust Kata Containers'i peal. Samuti saab läbi viia mitmeid teste, mille eesmärk on leida turvaprobleeme, kehtestada piiranguid ja tegeleda teiste huvitavate asjadega.
Palun kõigil, kes siia lugedes või kerides jõudsid, osaleda küsitluses, millest sõltuvad tulevased avaldused selle teema kohta.
Ainult registreeritud kasutajad saavad küsitluses osaleda. , palun.
Kas peaksime jätkama artiklite avaldamist Kata Containers'ist?
80,0%Jah, kirjuta veel!28
20,0%Ei, ei peaks…7
Hääletas 35 kasutajat. Erakutas 7 kasutajat.
Allikas: habr.com
