
I denne artikel vil princippet for arbejde blive gennemgået , og der vil også være en praktisk del om, hvordan man forbinder dem til Docker.
Om generelle problemer med Docker og mulige løsninger er allerede , i dag vil jeg kort beskrive implementeringen fra Kata Containers. Kata Containers er et sikkert runtime-miljø for containere baseret på letvægtige virtuelle maskiner. Arbejdet med dem foregår ligesom med andre containere, men der er desuden en mere pålidelig isolation ved brug af hardwarevirtualiseringsteknologi. Projektet startede i 2017, og det tilsvarende fællesskab afsluttede fusionen af de bedste ideer fra Intel Clear Containers og Hyper.sh RunV, hvorefter arbejdet fortsatte med support for forskellige arkitekturer, herunder AMD64, ARM, IBM p- og z-series. Derudover understøttes arbejdet inden for hypervisorerne QEMU, Firecracker, og der er også integration med containerd. Koden er tilgængelig på under MIT-licensen.
Grundlæggende funktioner
- Arbejdet med et enkelt kernel sikrer dermed isolation af netværk, hukommelse og input/output-operationer, der er mulighed for tvangsmæssig brug af hardware-isolation baseret på virtualiseringsextensioner.
- Understøttelse af industrielle standarder, herunder OCI (containerformat), Kubernetes CRI
- Stabil ydeevne af almindelige Linux-containere, forbedret isolation uden overhead, der påvirker ydeevnen af almindelige virtuelle maskiner.
- Fjernelse af behovet for at køre containere inden for fuldførte virtuelle maskiner; standardiserede grænseflader forenkler integration og start.
Installation
Der er installationsmuligheder, jeg vil gennemgå installation fra repositories baseret på operativsystemet Centos 7.
Det er vigtigt: arbejdet med Kata Containers understøttes kun på hardware, og virtuel videreføring fungerer ikke altid, desuden er der behov for sse4.1 fra CPU'en.
Installation af Kata Containers er forholdsvis enkel:
Installer værktøjer til arbejde med repositories:
# yum -y install yum-utilsDeaktiver Selinux (det ville være korrekt at konfigurere det, men for enkelhedens skyld deaktiverer jeg det):
# setenforce 0
# sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/configForbind repository og udfør installationen
# 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-shimIndstillinger
Jeg vil udføre konfigurationen til arbejde med Docker; installationen er standard, og jeg vil ikke uddybe den yderligere:
# 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 369ce74a3cForetag ændringer i daemon.json:
# cat <<EOF > /etc/docker/daemon.json
{
"default-runtime": "kata-runtime",
"runtimes": {
"kata-runtime": {
"path": "/usr/bin/kata-runtime"
}
}
}
EOFGenstart Docker:
# service docker restartTjek af tilstand
Hvis man starter en container før genstart af Docker, kan man se, at uname vil give versionen af kernen, der kører på det primære system:
# 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/LinuxEfter genstart ser kernelversionen således ud:
# 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/LinuxFlere kommandoer!
# 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.050sHurtig belastningstest
For at vurdere tab fra virtualisering — kører jeg sysbench, med de følgende eksempler .
Kørsel af sysbench med Docker+containerd
CPU-test
sysbench 1.0: multi-trådet systemevaluering benchmark
Kører testen med følgende muligheder:
Antal tråde: 1
Initialiserer tilfældig talgenerator fra nuværende tid
Prime tal grænse: 20000
Initialiserer arbejdstråde...
Tråde startet!
Generelle statistikker:
samlet tid: 36.7335s
samlet antal hændelser: 10000
samlet tid taget af hændelseseksekvering: 36.7173s
svartid:
min: 3.43ms
gennemsnit: 3.67ms
max: 8.34ms
ca. 95. percentil: 3.79ms
Tråde retfærdighed:
hændelser (gennemsnit/stddev): 10000.0000/0.00
eksekveringstid (gennemsnit/stddev): 36.7173/0.00Hukommelsestest
sysbench 1.0: multi-trådet systemevaluering benchmark
Kører testen med følgende muligheder:
Antal tråde: 1
Initialiserer tilfældig talgenerator fra nuværende tid
Initialiserer arbejdstråde...
Tråde startet!
Udførte operationer: 104857600 (2172673.64 ops/sek)
102400.00 MiB overført (2121.75 MiB/sek)
Generelle statistikker:
samlet tid: 48.2620s
samlet antal hændelser: 104857600
samlet tid taget af hændelseseksekvering: 17.4161s
svartid:
min: 0.00ms
gennemsnit: 0.00ms
max: 0.17ms
ca. 95. percentil: 0.00ms
Tråde retfærdighed:
hændelser (gennemsnit/stddev): 104857600.0000/0.00
eksekveringstid (gennemsnit/stddev): 17.4161/0.00Kørsel af sysbench med Docker+Kata Containers
CPU-test
sysbench 1.0: multi-trådet systemevaluering benchmark
Kører testen med følgende muligheder:
Antal tråde: 1
Initialiserer tilfældig talgenerator fra nuværende tid
Prime tal grænse: 20000
Initialiserer arbejdstråde...
Tråde startet!
Generelle statistikker:
samlet tid: 36.5747s
samlet antal hændelser: 10000
samlet tid taget af hændelseseksekvering: 36.5594s
svartid:
min: 3.43ms
gennemsnit: 3.66ms
max: 4.93ms
ca. 95. percentil: 3.77ms
Tråde retfærdighed:
hændelser (gennemsnit/stddev): 10000.0000/0.00
eksekveringstid (gennemsnit/stddev): 36.5594/0.00Hukommelsestest
sysbench 1.0: multi-trådet systemevaluering benchmark
Kører testen med følgende muligheder:
Antal tråde: 1
Initialiserer tilfældig talgenerator fra nuværende tid
Initialiserer arbejdstråde...
Tråde startet!
Udførte operationer: 104857600 (2450366.94 ops/sek)
102400.00 MiB overført (2392.94 MiB/sek)
Generelle statistikker:
samlet tid: 42.7926s
samlet antal hændelser: 104857600
samlet tid taget af hændelseseksekvering: 16.1512s
svartid:
min: 0.00ms
gennemsnit: 0.00ms
max: 0.43ms
ca. 95. percentil: 0.00ms
Tråde retfærdighed:
hændelser (gennemsnit/stddev): 104857600.0000/0.00
eksekveringstid (gennemsnit/stddev): 16.1512/0.00I princippet er situationen allerede klar, men det er mere optimalt at køre testene flere gange, fjerne udsving og gennemsnitlige resultater, derfor laver jeg ikke flere tests for nu.
Konklusioner
På trods af at det tager omtrent fem til ti gange længere tid at starte sådanne containere (typisk starttid for lignende kommandoer ved brug af containerd er mindre end tredjedel sekund) — fungerer de stadig ganske hurtigt, når man ser på den absolutte starttid (ovenfor er der eksempler, og kommandoerne udføres i gennemsnit på tre sekunder). Resultaterne af den hurtige CPU- og RAM-test viser praktisk talt de samme resultater, hvilket ikke kan andet end glæde, især i betragtning af at isoleringen sikres ved hjælp af en så veldokumenteret mekanisme som KVM.
Annonce
Artiklen er en oversigt, men giver mulighed for at udforske et alternativt runtime. Mange anvendelsesområder er ikke dækket, for eksempel beskriver hjemmesiden mulighederne for at køre Kubernetes oven på Kata Containers. Derudover kan man også udføre en række tests, der fokuserer på at finde sikkerhedsproblemer, sætte begrænsninger og andre interessante ting.
Jeg beder alle, der har læst og spolede herhen, om at deltage i undersøgelsen, som vil påvirke fremtidige publikationer om emnet.
Kun registrerede brugere kan deltage i undersøgelsen. , please.
Skal der fortsat publiceres artikler om Kata Containers?
80,0%Ja, skriv mere!28
20,0%Nej, det bør ikke...7
35 brugere har stemt. 7 brugere har undladt at stemme.
Kilde: habr.com
