
În acest articol vom discuta principiul de funcționare , 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 , 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 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ă 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-utilsDezactivă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/configConectă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-shimConfigurare
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 369ce74a3cFacem modificări în daemon.json:
# cat <<EOF > /etc/docker/daemon.json
{
"default-runtime": "kata-runtime",
"runtimes": {
"kata-runtime": {
"path": "/usr/bin/kata-runtime"
}
}
}
EOFRepornim Docker:
# service docker restartVerificarea 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/LinuxDupă 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.050sTestare rapidă a încărcării
Pentru a evalua pierderile din virtualizare — rulez sysbench, ca exemple principale .
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.00Test 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.00Rularea 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.00Test 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. , 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
