Kort oversigt og opsætning af Kata Containers

Kort oversigt og opsætning af Kata Containers
I denne artikel vil princippet for arbejde blive gennemgået Kata Containers, 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 blevet skrevet, 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å GitHub 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 mange 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-utils

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

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

Indstillinger

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

Foretag ændringer i daemon.json:

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

Genstart Docker:

# service docker restart

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

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

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

Hurtig belastningstest

For at vurdere tab fra virtualisering — kører jeg sysbench, med de følgende eksempler jeg tager denne variant.

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

Hukommelsestest

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

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

Hukommelsestest

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

I 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. Log ind, 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

Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere 🔥 Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster