Korte overzicht en configuratie van Kata Containers

Korte overzicht en configuratie van Kata Containers
In dit artikel wordt het principe van werking besproken Kata Containers, en er zal ook een praktische sectie zijn over hun aansluiting op Docker.

Over algemene problemen met Docker en mogelijke oplossingen is al geschreven, 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 GitHub 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 veel 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-utils

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

Verbind 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-shim

Instellingen

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

Breng wijzigingen aan in daemon.json:

# cat <<EOF > /etc/docker/daemon.json
{
  "default-runtime": "kata-runtime",
  "runtimes": {
    "kata-runtime": {
      "path": "/usr/bin/kata-runtime"
    }
  }
}
EOF

Herstart docker:

# service docker restart

Controle 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/Linux

Na 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/Linux

Meer 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.050s

Snelle belastingstest

Om de verliezen door virtualisatie te evalueren — start ik sysbench, als belangrijkste voorbeelden ik kies deze optie.

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

Geheugentest

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

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

Geheugentest

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

In 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. Log in, 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

Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers šŸ”„ Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers | ProHoster