
In dit artikel wordt het principe van werking besproken , en er zal ook een praktische sectie zijn over hun aansluiting op Docker.
Over algemene problemen met Docker en mogelijke oplossingen is al , vandaag beschrijf ik kort de implementatie van Kata Containers. Kata Containers is een veilige runtime-omgeving voor containers gebaseerd op lichtgewicht virtuele machines. Het werken hiermee gebeurt op dezelfde manier als met andere containers, maar er is daarnaast een betrouwbaardere isolatie door gebruik van hardwarevirtualisatietechnologie. Het project begon in 2017, de gelijknamige gemeenschap voltooide toen de fusie van de beste ideeƫn van Intel Clear Containers en Hyper.sh RunV, waarna de focus verschoof naar ondersteuning van verschillende architecturen, waaronder AMD64, ARM, IBM p- en z-series. Daarnaast wordt integratie met hypervisors zoals QEMU en Firecracker ondersteund, en is er integratie met containerd. De code is beschikbaar op valt onder de MIT-licentie.
Belangrijkste mogelijkheden
- Door te werken met een afzonderlijke kernel wordt netwerk-, geheugen- en invoer-outputisolatie gegarandeerd, en is er de mogelijkheid om hardwareisolatie af te dwingen op basis van virtualisatie-extensies.
- Ondersteuning voor industriestandaarden, inclusief OCI (containerindeling), Kubernetes CRI.
- Stabiele prestaties van reguliere Linux-containers, verbeterde isolatie zonder overhead die de prestaties van reguliere virtuele machines beĆÆnvloedt.
- Het elimineert de noodzaak om containers binnen volledige virtuele machines te draaien, standaardinterfaces vereenvoudigen integratie en implementatie.
Installatie
Er is Wat betreft de installatie-opties, ik zal de installatie uit de repositories bespreken, op basis van het besturingssysteem Centos 7.
Belangrijk: de werking van Kata Containers wordt alleen ondersteund op hardware, de doorvoer van virtualisatie werkt niet altijd, en er is ook ondersteuning voor sse4.1 van de processor.
De installatie van Kata Containers is vrij eenvoudig:
Installeer de hulpmiddelen voor het werken met repositories:
# yum -y install yum-utilsSchakel Selinux uit (al beter om het in te stellen, maar voor de eenvoud schakel ik het uit):
# setenforce 0
# sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/configVerbind met de repository en voer de installatie uit
# 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-shimInstellingen
Ik ga de configuratie uitvoeren om met docker te werken, de installatie daarvan is standaard, ik ga er niet verder op in:
# 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 369ce74a3cBreng wijzigingen aan in daemon.json:
# cat <<EOF > /etc/docker/daemon.json
{
"default-runtime": "kata-runtime",
"runtimes": {
"kata-runtime": {
"path": "/usr/bin/kata-runtime"
}
}
}
EOFHerstart docker:
# service docker restartControle van functionaliteit
Als u een container vóór de herstart van docker start, kunt u zien dat uname de versie van de kernel die op het hoofdsysteem draait, rapporteert:
# 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/LinuxNa de herstart ziet de kernelversie er als volgt uit:
# 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/LinuxMeer commando's!
# 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.050sSnelle belastingstest
Om de verliezen door virtualisatie te evalueren ā start ik sysbench, als belangrijkste voorbeelden .
Sysbench uitvoeren met behulp van Docker+containerd
CPU-test
sysbench 1.0: multi-threaded systeemevaluatie benchmark
De test wordt uitgevoerd met de volgende opties:
Aantal threads: 1
Initialiseren van willekeurige getallengenerator vanaf de huidige tijd
Limiet voor priemgetallen: 20000
Werkerthreads initialiseren...
Threads gestart!
Algemene statistieken:
totale tijd: 36.7335s
totaal aantal gebeurtenissen: 10000
totale tijd besteed aan gebeurtenisuitvoering: 36.7173s
responstijd:
min: 3.43ms
gemiddeld: 3.67ms
max: 8.34ms
ongeveer 95 percentile: 3.79ms
Eerlijkheid van threads:
gebeurtenissen (gemiddeld/stdev): 10000.0000/0.00
uitvoeringstijd (gemiddeld/stdev): 36.7173/0.00Geheugentest
sysbench 1.0: multi-threaded systeemevaluatie benchmark
De test wordt uitgevoerd met de volgende opties:
Aantal threads: 1
Initialiseren van willekeurige getallengenerator vanaf de huidige tijd
Werkerthreads initialiseren...
Threads gestart!
Uitgevoerde operaties: 104857600 (2172673.64 ops/sec)
102400.00 MiB overgedragen (2121.75 MiB/sec)
Algemene statistieken:
totale tijd: 48.2620s
totaal aantal gebeurtenissen: 104857600
totale tijd besteed aan gebeurtenisuitvoering: 17.4161s
responstijd:
min: 0.00ms
gemiddeld: 0.00ms
max: 0.17ms
ongeveer 95 percentile: 0.00ms
Eerlijkheid van threads:
gebeurtenissen (gemiddeld/stdev): 104857600.0000/0.00
uitvoeringstijd (gemiddeld/stdev): 17.4161/0.00Sysbench uitvoeren met behulp van Docker+Kata Containers
CPU-test
sysbench 1.0: multi-threaded systeemevaluatie benchmark
De test wordt uitgevoerd met de volgende opties:
Aantal threads: 1
Initialiseren van willekeurige getallengenerator vanaf de huidige tijd
Limiet voor priemgetallen: 20000
Werkerthreads initialiseren...
Threads gestart!
Algemene statistieken:
totale tijd: 36.5747s
totaal aantal gebeurtenissen: 10000
totale tijd besteed aan gebeurtenisuitvoering: 36.5594s
responstijd:
min: 3.43ms
gemiddeld: 3.66ms
max: 4.93ms
ongeveer 95 percentile: 3.77ms
Eerlijkheid van threads:
gebeurtenissen (gemiddeld/stdev): 10000.0000/0.00
uitvoeringstijd (gemiddeld/stdev): 36.5594/0.00Geheugentest
sysbench 1.0: multi-threaded systeemevaluatie benchmark
De test wordt uitgevoerd met de volgende opties:
Aantal threads: 1
Initialiseren van willekeurige getallengenerator vanaf de huidige tijd
Werkerthreads initialiseren...
Threads gestart!
Uitgevoerde operaties: 104857600 (2450366.94 ops/sec)
102400.00 MiB overgedragen (2392.94 MiB/sec)
Algemene statistieken:
totale tijd: 42.7926s
totaal aantal gebeurtenissen: 104857600
totale tijd besteed aan gebeurtenisuitvoering: 16.1512s
responstijd:
min: 0.00ms
gemiddeld: 0.00ms
max: 0.43ms
ongeveer 95 percentile: 0.00ms
Eerlijkheid van threads:
gebeurtenissen (gemiddeld/stdev): 104857600.0000/0.00
uitvoeringstijd (gemiddeld/stdev): 16.1512/0.00In principe is de situatie al duidelijk, maar het is optimaler om tests meerdere keren uit te voeren, uitbijters te verwijderen en de resultaten te gemiddelde, daarom doe ik voorlopig geen verdere tests.
Conclusies
Ondanks het feit dat het starten van dergelijke containers ongeveer vijf tot tien keer meer tijd kost (de typische starttijd van vergelijkbare commando's met containerd is minder dan een derde van een seconde) ā werken ze nog steeds relatief snel, als je kijkt naar de absolute opstarttijd (boven zijn voorbeelden, de commando's worden gemiddeld in drie seconden uitgevoerd). De resultaten van de snelle CPU- en RAM-tests tonen feitelijk dezelfde resultaten, wat niet teleurstellend kan zijn, vooral gezien het feit dat isolatie wordt verzekerd door een goed beproefd mechanisme zoals KVM.
Aankondiging
Het artikel is een overzicht, maar biedt de mogelijkheid om een alternatieve runtime te verkennen. Veel toepassingsgebieden zijn niet behandeld, zoals op de website de mogelijkheid wordt beschreven om Kubernetes boven Kata Containers uit te voeren. Daarnaast kunnen er ook een aantal tests worden uitgevoerd, gericht op het opsporen van beveiligingsproblemen, het instellen van beperkingen en andere interessante zaken.
Ik verzoek iedereen die dit heeft gelezen of vooruitgespoeld om deel te nemen aan de enquĆŖte, die zal bepalen welke toekomstige publicaties over dit onderwerp worden gedaan.
Alleen geregistreerde gebruikers kunnen deelnemen aan de enquĆŖte. , alstublieft.
Moet ik doorgaan met het publiceren van artikelen over Kata Containers?
80,0%Ja, schrijf nog meer!28
20,0%Nee, dat moet nietā¦7
Er hebben 35 gebruikers gestemd. 7 gebruikers hebben zich onthouden.
Bron: habr.com
