Lühike ülevaade ja Kata Containers seadistus

Lühike ülevaade ja Kata Containers seadistus
Selles artiklis käsitletakse tööpõhimõtteid Kata Containers, samuti on praktiline osa nende ühendamisest Dockeriga.

Dockeriga seotud üldprobleemide ja nende lahenduste kohta on juba kirjutatud, täna kirjeldan lühidalt rakendust Kata Containers. Kata Containers on konteinerite turvaline teostus (runtime), mis põhineb kergetel virtuaalmasinatel. Töötamine nendega toimub samamoodi nagu teiste konteineritega, kuid täiendav isoleerimine kasutab riistvara virtualiseerimise tehnoloogiat. Projekt algas 2017. aastal, samal aastal lõpetas samanimeline kogukond parimate ideede liitmise Intel Clear Containers'i ja Hyper.sh RunV vahel, pärast mida jätkati töödega erinevate arhitektuuride, sealhulgas AMD64, ARM, IBM p- ja z-seeriates toetamiseks. Samuti toetatakse tööd hüperviisorite QEMU ja Firecracker sees ning on integreerimine containerd-ga. Kood on saadaval aadressil GitHub MIT litsentsi alusel.

Põhiomadused

  • Töötamine eraldi tuumaga tagab võrgu, mälu ja sisend-väljundoperatsioonide isoleerimise, on võimalik sundida kasutama riistvara isoleerimist, mis põhineb virtualiseerimise laienditel
  • Toetab tööstusstandardeid, sealhulgas OCI (konteinerite formaat), Kubernetes CRI
  • Tavaliste Linuxi konteinerite stabiilne jõudlus, isoleerimise suurendamine ilma ülepaisutamiseta, mis mõjutab tavaliste virtuaalmasinate jõudlust
  • Vajadus käivitada konteinerid täielikes virtuaalmasinates on elimineeritud, tüüpilised liidesed lihtsustavad integreerimist ja käivitamist

Paigaldamine

Jah palju paigaldamise valikuid, käsitlen paigaldamist repositoori kaudu, tuginedes operatsioonisüsteemile CentOS 7.
Oluline: Kata Containersi töö on toetatud ainult riistvaral, virtualiseerimise edastamine ei toimi alati, samuti on vajalik sse4.1 protsessorilt.

Kata Containersi paigaldamine on piisavalt lihtne:

Paigaldame tööriistad repositooride jaoks:

# yum -y install yum-utils

Käivitan Selinuxi, (õigemini seadistamine, kuid lihtsuse huvides lülitan selle välja):

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

Ühendame repositoori ja teeme paigaldamise

# 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

Seadistamine

Seadsin seadistuse Dockeriga töötamiseks, selle paigaldamine on tüüpiline ja ma ei hakka seda detailselt kirjeldama:

# 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

Teeme muudatusi failis daemon.json:

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

Taaskäivitame Docker'i:

# service docker restart

Töötamise kontrollimine

Kui käivitada konteiner enne Docker'i taaskäivitamist — saab näha, et uname väljastab põhjasüsteemi käivitatud tuuma versiooni:

# 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

Pärast taaskäivitamist näeb kerneliversioon välja selline:

# 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

Veel käske!

# 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

Kiire koormustestimine

Virtualiseerimise põhjustatud kaotuste hindamiseks käitan sysbench'i, peamiste näidete jaoks valin selle variandi.

Sysbench'i käitamine Docker+containerd abil

Protsessori test

sysbench 1.0: mitme lõimega süsteemi hindamise test

Testi käivitamine järgmiste valikutega:
Lõimede arv: 1
Juhuslike arvude generaatori algatamine praeguse aja põhjal

Esmase arvude piir: 20000

Töötajate lõimed algatatakse...

Lõimed käivitati!

Üldstatistika:
    koguaeg:                          36.7335s
    kogusündmuste arv:              10000
    sündmuste täitmiseks kulunud aeg: 36.7173s
    reageerimisaeg:
         min:                                  3.43ms
         avg:                                  3.67ms
         max:                                  8.34ms
         ligikaudu  95. persentiil:               3.79ms

Lõimede õiglus:
    sündmused (avg/stddev):           10000.0000/0.00
    täitmise aeg (avg/stddev):   36.7173/0.00

Mälu test

sysbench 1.0: mitme lõimega süsteemi hindamise test

Testi käivitamine järgmiste valikutega:
Lõimede arv: 1
Juhuslike arvude generaatori algatamine praeguse aja põhjal

Töötajate lõimed algatatakse...

Lõimed käivitati!

Tehtud operatsioonid: 104857600 (2172673.64 ops/sek)

102400.00 MiB edastatud (2121.75 MiB/sek)

Üldstatistika:
    koguaeg:                          48.2620s
    kogusündmuste arv:              104857600
    sündmuste täitmiseks kulunud aeg: 17.4161s
    reageerimisaeg:
         min:                                  0.00ms
         avg:                                  0.00ms
         max:                                  0.17ms
         ligikaudu  95. persentiil:               0.00ms

Lõimede õiglus:
    sündmused (avg/stddev):           104857600.0000/0.00
    täitmise aeg (avg/stddev):   17.4161/0.00

Sysbench'i käitamine Docker+Kata Containers abil

Protsessori test

sysbench 1.0: mitme lõimega süsteemi hindamise test

Testi käivitamine järgmiste valikutega:
Lõimede arv: 1
Juhuslike arvude generaatori algatamine praeguse aja põhjal

Esmase arvude piir: 20000

Töötajate lõimed algatatakse...

Lõimed käivitati!

Üldstatistika:
    koguaeg:                          36.5747s
    kogusündmuste arv:              10000
    sündmuste täitmiseks kulunud aeg: 36.5594s
    reageerimisaeg:
         min:                                  3.43ms
         avg:                                  3.66ms
         max:                                  4.93ms
         ligikaudu  95. persentiil:               3.77ms

Lõimede õiglus:
    sündmused (avg/stddev):           10000.0000/0.00
    täitmise aeg (avg/stddev):   36.5594/0.00

Mälu test

sysbench 1.0: mitme lõimega süsteemi hindamise test

Testi käivitamine järgmiste valikutega:
Lõimede arv: 1
Juhuslike arvude generaatori algatamine praeguse aja põhjal

Töötajate lõimed algatatakse...

Lõimed käivitati!

Tehtud operatsioonid: 104857600 (2450366.94 ops/sek)

102400.00 MiB edastatud (2392.94 MiB/sek)

Üldstatistika:
    koguaeg:                          42.7926s
    kogusündmuste arv:              104857600
    sündmuste täitmiseks kulunud aeg: 16.1512s
    reageerimisaeg:
         min:                                  0.00ms
         avg:                                  0.00ms
         max:                                  0.43ms
         ligikaudu  95. persentiil:               0.00ms

Lõimede õiglus:
    sündmused (avg/stddev):           104857600.0000/0.00
    täitmise aeg (avg/stddev):   16.1512/0.00

Põhimõtteliselt on olukord juba selge, kuid teste on optimaalsem käivitada mitu korda, kõrvaldades äärmuslikud väärtused ja keskmistades tulemusi, seetõttu ei tee ma praegu rohkem teste.

Järeldused

Kuigi selliste konteinerite käivitamine võtab aega umbes viis kuni kümme korda rohkem (tüüpiline sarnaste käskude käivitamise aeg containerd'i kasutamisel on vähem kui kolmandik sekundist) — töötavad nad siiski piisavalt kiiresti, kui arvestada absoluutses aegades (üles on toodud näited, käskude täitmine võtab keskmiselt kolm sekundit). Kiire CPU ja RAM testi tulemused näitavad tegelikult samu tulemusi, mis ei saa kui rõõmustada, eriti arvestades, et isoleerimist tagatakse sellise hästi katsetatud mehhanismi, nagu kvm, abil.

Teade

Artikkel on ülevaatlik, kuid annab võimaluse uurida alternatiivset runtime'i. Mitmed rakendusalad on katmata, näiteks on saidil kirjeldatud Kubernetes'i käivitamise võimalust Kata Containers'i peal. Samuti saab läbi viia mitmeid teste, mille eesmärk on leida turvaprobleeme, kehtestada piiranguid ja tegeleda teiste huvitavate asjadega.

Palun kõigil, kes siia lugedes või kerides jõudsid, osaleda küsitluses, millest sõltuvad tulevased avaldused selle teema kohta.

Ainult registreeritud kasutajad saavad küsitluses osaleda. Logige sisse, palun.

Kas peaksime jätkama artiklite avaldamist Kata Containers'ist?

  • 80,0%Jah, kirjuta veel!28

  • 20,0%Ei, ei peaks…7

Hääletas 35 kasutajat. Erakutas 7 kasutajat.

Allikas: habr.com

Osta usaldusväärne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster