
Selles artiklis käsitletakse tööpõhimõtteid , samuti on praktiline osa nende ühendamisest Dockeriga.
Dockeriga seotud üldistest probleemidest ja nende lahendustest on juba , täna kirjeldan ma lühidalt teostust Kata Containers'i kaudu. Kata Containers on konteinerite turvaline täitmisvõime (runtime), mis põhineb kergetel virtuaalmasinatel. Nendega töötamine toimub nagu teiste konteineritega, kuid lisaks on olemas usaldusväärsem isolatsioon riistvara virtualiseerimise tehnoloogia abil. Projekt algas 2017. aastal, samal ajal lõpetas sama nime kandev kogukond parimate ideede ühendamise Intel Clear Containers'ilt ja Hyper.sh RunV'lt, millele järgnes töö toetuste arendamisel erinevatel arhitektuuridel, sealhulgas AMD64, ARM, IBM p- ja z-seeriatel. Toetatakse ka töötamist QEMU, Firecracker hüperviisorites, samuti on olemas integraatsioon containerd-ga. Kood on saadaval on MIT litsentsi all.
Peamised funktsioonid
- Eraldi tuuma töö tagab seega võrgu, mälu ja sisendi/väljundi isolatsiooni, samuti on võimalik kasutada riistvara isolatsiooni, mis põhineb virtualiseerimise laiendustel.
- Tööstusstandardite toetamine, sealhulgas OCI (konteinerite formaat), Kubernetes CRI
- Stabiilne tavaliste Linuxi konteinerite jõudlus, isolatsiooni suurendamine, ilma tavaliste virtuaalmasinate jõudlust mõjutavate kuludeta
- Konteinerite käivitamise vajaduse kõrvaldamine täisfunktsionaalsete virtuaalmasinate sees, standardiseeritud liidesed lihtsustavad integreerimist ja käivitamist
Installeerimine
On paigaldusvariandid, ma kaalun paigaldamist hoidlatest, mis põhinevad CentOS 7 operatsioonisüsteemil.
Oluline: Kata Containers'i toimetamine toetatakse ainult riistvaras, virtualiseerimise edastamine ei pruugi alati töötada, samuti on vajalik sse4.1 tugi protsessorilt.
Kata Containers'i paigaldamine on piisavalt lihtne:
Paigaldame hoidlate töötamiseks vajalikud utiliidid:
# yum -y install yum-utilsLülitame välja Selinuxi (õigem oleks see seadistada, kuid lihtsuse huvides lülitan selle välja):
# setenforce 0
# sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/configLisame hoidla ja teostame paigalduse
# 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
Ma teen seadistust Dockeriga töötamiseks, selle paigaldamine on standardne, ma ei hakka seda detailselt kirja panema:
# 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 muudatused daemon.json failis:
# cat <<EOF > /etc/docker/daemon.json
{
"default-runtime": "kata-runtime",
"runtimes": {
"kata-runtime": {
"path": "/usr/bin/kata-runtime"
}
}
}
EOFKäivitame dockeri uuesti:
# service docker restartTöötavuse kontrollimine
Kui käivitada konteiner enne docker'i taaskäivitamist, saab näha, et uname väljastab peamise süsteemi tuumaversiooni:
# 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 tuumaversioon välja nii:
# 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 kaotuse hindamiseks käivitan sysbench, põhinäidetena .
Sysbench'i käivitamine Docker+containerd abil
Protsessori test
sysbench 1.0: mitme lõimega süsteemi hindamise test
Test käivitatakse järgmiste valikute abil:
Lõimede arv: 1
Algatamine juhuslike numbrite generaatorisse praeguse aja põhjal
Primaarsed numbrid: 20000
Töötajate lõimede algatamine...
Lõimed käivitatud!
Üldstatistika:
koguaeg: 36.7335s
üldine sündmuste arv: 10000
sündmuste täitmiseks kulunud aeg: 36.7173s
vastamise aeg:
minimaalne: 3.43ms
keskmine: 3.67ms
maksimaalne: 8.34ms
umbkaudu 95. protsent: 3.79ms
Lõimede õiglus:
sündmused (keskmine/standardhälve): 10000.0000/0.00
täitmise aeg (keskmine/standardhälve): 36.7173/0.00Mälu test
sysbench 1.0: mitmeharuline süsteemi hindamisstandard
Testi käivitamine järgmiste valikute järgi:
Keenuste arv: 1
Ainulaadse numbrigeneraatori initialiseering praeguse aja põhjal
Töötajaid algatatakse...
Keenused on algatatud!
Tehtud toimingud: 104857600 (2172673.64 ops/sec)
102400.00 MiB edastatud (2121.75 MiB/sec)
Üldstatistika:
koguaeg: 48.2620s
sündmuste koguarv: 104857600
sündmuste täitmisele kulunud aeg: 17.4161s
vastus aeg:
min: 0.00ms
avg: 0.00ms
max: 0.17ms
ligikaudu 95 protsenti: 0.00ms
Keenuste võrdsus:
sündmused (avg/stddev): 104857600.0000/0.00
täitmise aeg (avg/stddev): 17.4161/0.00Sysbench käivitamine Docker + Kata Containers'i abil
Protsessori test
sysbench 1.0: mitmeharuline süsteemi hindamisstandard
Testi käivitamine järgmiste valikute järgi:
Keenuste arv: 1
Ainulaadse numbrigeneraatori initialiseering praeguse aja põhjal
Peakarvude piir: 20000
Töötajaid algatatakse...
Keenused on algatatud!
Üldstatistika:
koguaeg: 36.5747s
sündmuste koguarv: 10000
sündmuste täitmisele kulunud aeg: 36.5594s
vastus aeg:
min: 3.43ms
avg: 3.66ms
max: 4.93ms
ligikaudu 95 protsenti: 3.77ms
Keenuste võrdsus:
sündmused (avg/stddev): 10000.0000/0.00
täitmise aeg (avg/stddev): 36.5594/0.00Mälu test
sysbench 1.0: mitme lõimesüsteemi hindamise test
Testi käivitatakse järgmiste valikutega:
Küttepea arv: 1
Algatuseline juhuslike numbrite generaator praegusest ajast
Töötlusteadlikud lõimede...
Lõimed käivitatud!
Tehtud toimingud: 104857600 (2450366.94 ops/sec)
102400.00 MiB edastatud (2392.94 MiB/sec)
Üldstatistika:
koguaeg: 42.7926s
sündmuste koguarv: 104857600
sündmuste täitmiseks kulunud aeg: 16.1512s
vastusaeg:
min: 0.00ms
avg: 0.00ms
max: 0.43ms
umbes 95 protsentiil: 0.00ms
Lõimede õiglus:
sündmused (avg/stddev): 104857600.0000/0.00
täitmise aeg (avg/stddev): 16.1512/0.00Üldiselt on olukord juba selge, kuid testide käivitamine mitu korda on optimaalsem, eemaldades kõrvalekalded ja keskmistades tulemusi, seega rohkem teste hetkel ei tee.
Järeldused
Kuigi selliste konteinerite käivitamine võtab aega umbes viis kuni kümme korda kauem (tüüpiline käivitusaeg sarnastele käskudele containerd kasutamisel on vähem kui kolmandik sekundist), töötavad need siiski üsna kiiresti, kui võtta arvesse absoluutset käivitusaega (üleval on näidatud, et keskmine käivitusaeg on kolme sekundi ringis). Ja kiire CPU ja RAM testi tulemused näitavad põhimõtteliselt samu tulemusi, mis on eriti positiivne, arvestades, et isolatsiooni tagab nii hästi välja töötatud mehhanism nagu kvm.
Teade
Artikkel on ülevaatelise iseloomuga, kuid annab võimaluse tutvuda alternatiivse käitustehnoloogia võimalustega. Paljusid rakendusi ei ole katmata, näiteks on veebilehel kirjeldatud Kubernetes'e käivitamise võimalust Kata konteinerite peal. Samuti on võimalik läbi viia mitmeid teste, mille eesmärk on tuvastada turvaprobleeme, seada piiranguid ja uurida teisi huvitavaid aspekte.
Palun kõiki, kes siia lugemiseni on jõudnud, osaleda küsitluses, mis määrab tulevased väljaanded selle teema kohta.
Ainult registreeritud kasutajad saavad küsitluses osaleda. , palun.
Kas tuleks jätkata artiklite avaldamist Kata konteinerite kohta?
80,0%Jah, kirjutage rohkem!28
20,0%Ei, ei tasu…7
Hääletasid 35 kasutajat. 7 kasutajat ei osalenud.
Allikas: habr.com
