Prezentare generală și configurarea Kata Containers

Prezentare generală și configurarea Kata Containers
În acest articol vom discuta principiul de funcționare Kata Containers, iar apoi va urma o parte practică privind conectarea acestora la Docker.

Despre problemele generale cu Docker și opțiunile de soluționare a acestora s-a scris deja, astăzi voi descrie pe scurt implementarea Kata Containers. Kata Containers este un mediu de execuție sigur pentru containere, bazat pe mașini virtuale ușoare. Lucrul cu acestea se desfășoară la fel ca și cu alte containere, dar oferă o izolație mai robustă folosind tehnologia de virtualizare a hardware-ului. Proiectul a început în 2017, iar comunitatea omonimă a finalizat atunci fuziunea celor mai bune idei de la Intel Clear Containers și Hyper.sh RunV, după care s-au continuat lucrările pentru suportul diverselor arhitecturi, inclusiv AMD64, ARM, IBM p- și z-series. De asemenea, se suportă funcționarea în hiper-vizorii QEMU, Firecracker, și există integrare cu containerd. Codul este disponibil pe GitHub sub licența MIT.

Funcționalități principale

  • Lucrând cu un nucleu separat, astfel se asigură izolarea rețelei, memoriei și operațiunilor de intrare-ieșire, există posibilitatea de a forța utilizarea izolării hardware bazate pe extensiile de virtualizare
  • Suport pentru standarde industriale, inclusiv OCI (formatul containerelor), Kubernetes CRI
  • Performanță stabilă pentru containerele Linux obișnuite, sporirea izolării fără costuri suplimentare care să afecteze performanța mașinilor virtuale obișnuite
  • Eliminarea necesității de a rula containere în interiorul mașinilor virtuale complete, interfețele standardizate simplifică integrarea și lansarea

Instalare

Există o mulțime In ceea ce privește opțiunile de instalare, voi analiza instalarea din repozitorii, pe baza sistemului de operare Centos 7.
Este important: funcționarea Kata Containers este suportată doar pe hardware, iar trecerea virtualizării nu funcționează întotdeauna, de asemenea este nevoie de suport sse4.1 de la procesor.

Instalarea Kata Containers este suficient de simplă:

Instalăm utilitarele necesare pentru lucrul cu repozitoriile:

# yum -y install yum-utils

Dezactivăm Selinux (mai corect ar fi să-l configurăm, însă pentru simplitate îl dezactivez):

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

Conectăm repozitoriul și efectuăm instalarea

# 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

Configurare

Voi efectua configurarea pentru a lucra cu Docker, instalarea acestuia este standard, nu o voi detalia mai mult:

# 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

Facem modificări în daemon.json:

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

Repornim Docker:

# service docker restart

Verificarea funcționalității

Dacă lansăm un container înainte de repornirea Docker, putem observa că uname va returna versiunea nucleului care rulează pe sistemul principal:

# 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

După repornire, versiunea nucleului arată astfel:

# 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

Încă comenzi!

# 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

Testare rapidă a încărcării

Pentru a evalua pierderile din virtualizare — rulez sysbench, ca exemple principale iau această variantă.

Rularea sysbench cu utilizarea Docker+containerd

Test al procesorului

sysbench 1.0:  benchmark de evaluare a sistemului multi-threaded

Rulând testul cu următoarele opțiuni:
Numărul de thread-uri: 1
Inițializarea generatorului de numere aleatorii din timpul curent

Limita numerelor prime: 20000

Inițializarea thread-urilor de lucru...

Thread-urile au fost pornite!

Statistici generale:
    timpul total:                          36.7335s
    numărul total de evenimente:              10000
    timpul total necesar execuției evenimentului: 36.7173s
    timpul de răspuns:
         min:                                  3.43ms
         mediu:                                  3.67ms
         max:                                  8.34ms
         aproximativ  95 percentil:               3.79ms

Corectitudinea thread-urilor:
    evenimente (medie/deviație standard):           10000.0000/0.00
    timpul de execuție (medie/deviație standard):   36.7173/0.00

Test al memoriei RAM

sysbench 1.0:  benchmark de evaluare a sistemului multi-threaded

Rulând testul cu următoarele opțiuni:
Numărul de thread-uri: 1
Inițializarea generatorului de numere aleatorii din timpul curent

Inițializarea thread-urilor de lucru...

Thread-urile au fost pornite!

Operații efectuate: 104857600 (2172673.64 ops/sec)

102400.00 MiB transferate (2121.75 MiB/sec)

Statistici generale:
    timpul total:                          48.2620s
    numărul total de evenimente:              104857600
    timpul total necesar execuției evenimentului: 17.4161s
    timpul de răspuns:
         min:                                  0.00ms
         mediu:                                  0.00ms
         max:                                  0.17ms
         aproximativ  95 percentil:               0.00ms

Corectitudinea thread-urilor:
    evenimente (medie/deviație standard):           104857600.0000/0.00
    timpul de execuție (medie/deviație standard):   17.4161/0.00

Rularea sysbench cu utilizarea Docker+Kata Containers

Test al procesorului

sysbench 1.0:  benchmark de evaluare a sistemului multi-threaded

Rulând testul cu următoarele opțiuni:
Numărul de thread-uri: 1
Inițializarea generatorului de numere aleatorii din timpul curent

Limita numerelor prime: 20000

Inițializarea thread-urilor de lucru...

Thread-urile au fost pornite!

Statistici generale:
    timpul total:                          36.5747s
    numărul total de evenimente:              10000
    timpul total necesar execuției evenimentului: 36.5594s
    timpul de răspuns:
         min:                                  3.43ms
         mediu:                                  3.66ms
         max:                                  4.93ms
         aproximativ  95 percentil:               3.77ms

Corectitudinea thread-urilor:
    evenimente (medie/deviație standard):           10000.0000/0.00
    timpul de execuție (medie/deviație standard):   36.5594/0.00

Test al memoriei RAM

sysbench 1.0:  benchmark de evaluare a sistemului multi-threaded

Rulând testul cu următoarele opțiuni:
Numărul de thread-uri: 1
Inițializarea generatorului de numere aleatorii din timpul curent

Inițializarea thread-urilor de lucru...

Thread-urile au fost pornite!

Operații efectuate: 104857600 (2450366.94 ops/sec)

102400.00 MiB transferate (2392.94 MiB/sec)

Statistici generale:
    timpul total:                          42.7926s
    numărul total de evenimente:              104857600
    timpul total necesar execuției evenimentului: 16.1512s
    timpul de răspuns:
         min:                                  0.00ms
         mediu:                                  0.00ms
         max:                                  0.43ms
         aproximativ  95 percentil:               0.00ms

Corectitudinea thread-urilor:
    evenimente (medie/deviație standard):           104857600.0000/0.00
    timpul de execuție (medie/deviație standard):   16.1512/0.00

În principiu, situația este deja clară, dar este mai optim să rulăm testele de mai multe ori, eliminând valorile anormale și medind rezultatele, așa că nu mai fac alte teste deocamdată.

Conclusions

Deși pornirea acestor containere durează de aproximativ cinci până la zece ori mai mult timp (timpul tipic de pornire pentru comenzi similare folosind containerd este de mai puțin de o treime de secundă) — ele funcționează totuși suficient de repede, dacă ne raportăm la timpul absolut de pornire (mai sus sunt exemple, comenzile se execută în medie în trei secunde). Iar rezultatele testului rapid pentru CPU și RAM arată rezultate practic identice, ceea ce nu poate decât să ne bucure, mai ales având în vedere că izolația este asigurată printr-un mecanism bine testat, cum ar fi kvm.

Anunț

Articolul este unul de tip revistă, dar oferă ocazia de a testa un runtime alternativ. Multe domenii de aplicare nu sunt acoperite, de exemplu, pe site este descrisă posibilitatea de a rula Kubernetes deasupra Kata Containers. De asemenea, se pot efectua o serie de teste orientate spre identificarea problemelor de securitate, stabilirea unor limite și alte aspecte interesante.

Cer tuturor celor care au citit sau s-au săturat să răspundă la sondajul de opinie, de la care depind publicațiile viitoare pe această temă.

Numai utilizatorii înregistrați pot participa la sondaj. Conectați-vă, vă rugăm.

Ar trebui să continui să public articole despre Kata Containers?

  • 80,0%Da, scrie și mai multe!28

  • 20,0%Nu, nu ar trebui…7

Au votat 35 de utilizatori. S-au abținut 7 utilizatori.

Sursa: habr.com

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster