Kort oorsig en opstelling van Kata-houers

Kort oorsig en opstelling van Kata-houers
Hierdie artikel sal bespreek hoe dit werk Kata-houers, en daar sal ook 'n praktiese deel wees met hul verbinding met Docker.

Oor algemene probleme met Docker en hul oplossings reeds was geskryf, vandag sal ek kortliks die implementering van Kata Containers beskryf. Kata Containers is 'n veilige houerlooptyd gebaseer op ligte virtuele masjiene. Werk met hulle is dieselfde as met ander houers, maar daarbenewens is daar 'n meer betroubare isolasie deur hardeware-virtualiseringstegnologie te gebruik. Die projek het in 2017 begin, toe die gemeenskap met dieselfde naam die samesmelting van die beste idees van Intel Clear Containers en Hyper.sh RunV voltooi het, waarna daar voortgegaan is om te ondersteun vir verskeie argitekture, insluitend AMD64, ARM, IBM p- en z -reeks. Werk ook binne die hypervisors QEMU, Firecracker word ondersteun, en daar is ook integrasie met containerd. Die kode is beskikbaar by GitHub onder die MIT-lisensie.

Belangrike kenmerke

  • Deur met 'n aparte kern te werk en sodoende netwerk-, geheue- en I/O-isolasie te verskaf, is dit moontlik om die gebruik van hardeware-isolasie te dwing gebaseer op virtualisasie-uitbreidings
  • Ondersteuning vir industriestandaarde, insluitend OCI (houerformaat), Kubernetes CRI
  • Konsekwente werkverrigting van gewone Linux-houers, verhoogde isolasie sonder die werkverrigtingbokoste van gewone VM's
  • Elimineer die behoefte om houers binne volwaardige virtuele masjiene te laat loop, generiese koppelvlakke vereenvoudig integrasie en bekendstelling

installasie

Daar is n klop van installasie-opsies, sal ek dit oorweeg om vanaf die bewaarplekke te installeer, gebaseer op die Centos 7-bedryfstelsel.
Dit is belangrik om: Kata Containers-werk word slegs op hardeware ondersteun, virtualisasie-aanstuur werk ook nie altyd nie benodig sse4.1 ondersteuning van die verwerker.

Die installering van Kata-houers is redelik eenvoudig:

Installeer nutsprogramme om met bewaarplekke te werk:

# yum -y install yum-utils

Deaktiveer Selinux (dit is meer korrek om te konfigureer, maar vir eenvoud deaktiveer ek dit):

# setenforce 0
# sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config

Ons koppel die bewaarplek en voer die installasie 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

aanpassing

Ek sal opstel om met docker te werk, die installasie daarvan is tipies, ek sal dit nie in meer besonderhede beskryf nie:

# 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

Ons maak veranderinge aan daemon.json:

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

Herbegin koppelaar:

# service docker restart

Funksionele toetsing

As u die houer begin voordat u docker herbegin, kan u sien dat uname die weergawe van die kern sal gee wat op die hoofstelsel loop:

# 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 'n herbegin lyk die kernweergawe soos volg:

# 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 spanne!

# 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

Vinnige vragtoetsing

Om die verliese van virtualisasie te bepaal - ek hardloop sysbench, as die belangrikste voorbeelde neem hierdie opsie.

Begin sysbench met Docker+containerd

Verwerker toets

sysbench 1.0:  multi-threaded system evaluation benchmark

Running the test with following options:
Number of threads: 1
Initializing random number generator from current time

Prime numbers limit: 20000

Initializing worker threads...

Threads started!

General statistics:
    total time:                          36.7335s
    total number of events:              10000
    total time taken by event execution: 36.7173s
    response time:
         min:                                  3.43ms
         avg:                                  3.67ms
         max:                                  8.34ms
         approx.  95 percentile:               3.79ms

Threads fairness:
    events (avg/stddev):           10000.0000/0.00
    execution time (avg/stddev):   36.7173/0.00

RAM toets

sysbench 1.0:  multi-threaded system evaluation benchmark

Running the test with following options:
Number of threads: 1
Initializing random number generator from current time

Initializing worker threads...

Threads started!

Operations performed: 104857600 (2172673.64 ops/sec)

102400.00 MiB transferred (2121.75 MiB/sec)

General statistics:
    total time:                          48.2620s
    total number of events:              104857600
    total time taken by event execution: 17.4161s
    response time:
         min:                                  0.00ms
         avg:                                  0.00ms
         max:                                  0.17ms
         approx.  95 percentile:               0.00ms

Threads fairness:
    events (avg/stddev):           104857600.0000/0.00
    execution time (avg/stddev):   17.4161/0.00

Begin sysbench met Docker+Kata Containers

Verwerker toets

sysbench 1.0:  multi-threaded system evaluation benchmark

Running the test with following options:
Number of threads: 1
Initializing random number generator from current time

Prime numbers limit: 20000

Initializing worker threads...

Threads started!

General statistics:
    total time:                          36.5747s
    total number of events:              10000
    total time taken by event execution: 36.5594s
    response time:
         min:                                  3.43ms
         avg:                                  3.66ms
         max:                                  4.93ms
         approx.  95 percentile:               3.77ms

Threads fairness:
    events (avg/stddev):           10000.0000/0.00
    execution time (avg/stddev):   36.5594/0.00

RAM toets

sysbench 1.0:  multi-threaded system evaluation benchmark

Running the test with following options:
Number of threads: 1
Initializing random number generator from current time

Initializing worker threads...

Threads started!

Operations performed: 104857600 (2450366.94 ops/sec)

102400.00 MiB transferred (2392.94 MiB/sec)

General statistics:
    total time:                          42.7926s
    total number of events:              104857600
    total time taken by event execution: 16.1512s
    response time:
         min:                                  0.00ms
         avg:                                  0.00ms
         max:                                  0.43ms
         approx.  95 percentile:               0.00ms

Threads fairness:
    events (avg/stddev):           104857600.0000/0.00
    execution time (avg/stddev):   16.1512/0.00

In beginsel is die situasie reeds duidelik, maar dit is meer optimaal om die toetse verskeie kere uit te voer, uitskieters te verwyder en die uitslae te gemiddelde, so ek doen nog nie meer toetse nie.

Bevindinge

Ten spyte van die feit dat sulke houers ongeveer vyf tot tien keer langer neem om te begin (tipiese looptyd vir soortgelyke opdragte wanneer containerd gebruik word is minder as 'n derde van 'n sekonde), werk hulle steeds redelik vinnig as ons die absolute begintyd neem (daar is voorbeelde hierbo, opdragte wat in gemiddeld drie sekondes uitgevoer word). Wel, die resultate van 'n vinnige toets van SVE en RAM toon amper dieselfde resultate, wat nie anders kan as om bly te wees nie, veral in die lig van die feit dat isolasie verskaf word deur so 'n goed bestuurde meganisme soos kvm.

aankondiging

Die artikel is 'n resensie, maar dit gee jou die geleentheid om die alternatiewe looptyd te voel. Baie toepassingsareas word nie gedek nie, byvoorbeeld die webwerf beskryf die moontlikheid om Kubernetes bo-op Kata Containers te laat loop. Boonop kan u ook 'n reeks toetse uitvoer wat daarop gefokus is om sekuriteitsprobleme te vind, beperkings op te stel en ander interessante dinge.

Ek vra almal wat hier gelees en teruggedraai het om deel te neem aan die opname, waarvan toekomstige publikasies oor hierdie onderwerp sal afhang.

Slegs geregistreerde gebruikers kan aan die opname deelneem. Meld aan, asseblief.

Moet ek voortgaan om artikels oor Kata Containers te publiseer?

  • 80,0%Ja, skryf meer!28

  • 20,0%Nee, moenie...7

35 gebruikers het gestem. 7 gebruikers het buite stemming gebly.

Bron: will.com

Voeg 'n opmerking