Kata Containersi lühike ülevaade ja seadistamine

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

Dockeriga seotud üldistest probleemidest ja nende lahendustest on juba kirjutatud, täna kirjeldan ma lühidalt teostust Kata Containers'i kaudu. Kata Containers on konteinerite turvaline täitmisvõime (runtime), mis põhineb kergetel virtuaalmasinatel. Nendega töötamine toimub nagu teiste konteineritega, kuid lisaks on olemas usaldusväärsem isolatsioon riistvara virtualiseerimise tehnoloogia abil. Projekt algas 2017. aastal, samal ajal lõpetas sama nime kandev kogukond parimate ideede ühendamise Intel Clear Containers'ilt ja Hyper.sh RunV'lt, millele järgnes töö toetuste arendamisel erinevatel arhitektuuridel, sealhulgas AMD64, ARM, IBM p- ja z-seeriatel. Toetatakse ka töötamist QEMU, Firecracker hüperviisorites, samuti on olemas integraatsioon containerd-ga. Kood on saadaval GitHub on MIT litsentsi all.

Peamised funktsioonid

  • Eraldi tuuma töö tagab seega võrgu, mälu ja sisendi/väljundi isolatsiooni, samuti on võimalik kasutada riistvara isolatsiooni, mis põhineb virtualiseerimise laiendustel.
  • Tööstusstandardite toetamine, sealhulgas OCI (konteinerite formaat), Kubernetes CRI
  • Stabiilne tavaliste Linuxi konteinerite jõudlus, isolatsiooni suurendamine, ilma tavaliste virtuaalmasinate jõudlust mõjutavate kuludeta
  • Konteinerite käivitamise vajaduse kõrvaldamine täisfunktsionaalsete virtuaalmasinate sees, standardiseeritud liidesed lihtsustavad integreerimist ja käivitamist

Installeerimine

On hulgaliselt paigaldusvariandid, ma kaalun paigaldamist hoidlatest, mis põhinevad CentOS 7 operatsioonisüsteemil.
Oluline: Kata Containers'i toimetamine toetatakse ainult riistvaras, virtualiseerimise edastamine ei pruugi alati töötada, samuti on vajalik sse4.1 tugi protsessorilt.

Kata Containers'i paigaldamine on piisavalt lihtne:

Paigaldame hoidlate töötamiseks vajalikud utiliidid:

# yum -y install yum-utils

Lülitame välja Selinuxi (õigem oleks see seadistada, kuid lihtsuse huvides lülitan selle välja):

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

Lisame hoidla ja teostame paigalduse

# 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

Ma teen seadistust Dockeriga töötamiseks, selle paigaldamine on standardne, ma ei hakka seda detailselt kirja panema:

# 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 muudatused daemon.json failis:

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

Käivitame dockeri uuesti:

# service docker restart

Töötavuse kontrollimine

Kui käivitada konteiner enne docker'i taaskäivitamist, saab näha, et uname väljastab peamise süsteemi tuumaversiooni:

# 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 tuumaversioon välja nii:

# 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 kaotuse hindamiseks käivitan sysbench, põhinäidetena valin selle variandi.

Sysbench'i käivitamine Docker+containerd abil

Protsessori test

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

Test käivitatakse järgmiste valikute abil:
Lõimede arv: 1
Algatamine juhuslike numbrite generaatorisse praeguse aja põhjal

Primaarsed numbrid: 20000

Töötajate lõimede algatamine...

Lõimed käivitatud!

Üldstatistika:
    koguaeg:                           36.7335s
    üldine sündmuste arv:              10000
    sündmuste täitmiseks kulunud aeg:  36.7173s
    vastamise aeg:
         minimaalne:                            3.43ms
         keskmine:                             3.67ms
         maksimaalne:                          8.34ms
         umbkaudu 95. protsent:                3.79ms

Lõimede õiglus:
    sündmused (keskmine/standardhälve):  10000.0000/0.00
    täitmise aeg (keskmine/standardhälve):  36.7173/0.00

Mälu test

sysbench 1.0: mitmeharuline süsteemi hindamisstandard

Testi käivitamine järgmiste valikute järgi:
Keenuste arv: 1
Ainulaadse numbrigeneraatori initialiseering praeguse aja põhjal

Töötajaid algatatakse...

Keenused on algatatud!

Tehtud toimingud: 104857600 (2172673.64 ops/sec)

102400.00 MiB edastatud (2121.75 MiB/sec)

Üldstatistika:
    koguaeg:                          48.2620s
    sündmuste koguarv:              104857600
    sündmuste täitmisele kulunud aeg: 17.4161s
    vastus aeg:
         min:                                  0.00ms
         avg:                                  0.00ms
         max:                                  0.17ms
         ligikaudu  95 protsenti:               0.00ms

Keenuste võrdsus:
    sündmused (avg/stddev):           104857600.0000/0.00
    täitmise aeg (avg/stddev):   17.4161/0.00

Sysbench käivitamine Docker + Kata Containers'i abil

Protsessori test

sysbench 1.0: mitmeharuline süsteemi hindamisstandard

Testi käivitamine järgmiste valikute järgi:
Keenuste arv: 1
Ainulaadse numbrigeneraatori initialiseering praeguse aja põhjal

Peakarvude piir: 20000

Töötajaid algatatakse...

Keenused on algatatud!

Üldstatistika:
    koguaeg:                          36.5747s
    sündmuste koguarv:              10000
    sündmuste täitmisele kulunud aeg: 36.5594s
    vastus aeg:
         min:                                  3.43ms
         avg:                                  3.66ms
         max:                                  4.93ms
         ligikaudu  95 protsenti:               3.77ms

Keenuste võrdsus:
    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õimesüsteemi hindamise test

Testi käivitatakse järgmiste valikutega:
Küttepea arv: 1
Algatuseline juhuslike numbrite generaator praegusest ajast

Töötlusteadlikud lõimede...

Lõimed käivitatud!

Tehtud toimingud: 104857600 (2450366.94 ops/sec)

102400.00 MiB edastatud (2392.94 MiB/sec)

Üldstatistika:
    koguaeg:                          42.7926s
    sündmuste koguarv:              104857600
    sündmuste täitmiseks kulunud aeg: 16.1512s
    vastusaeg:
         min:                                  0.00ms
         avg:                                  0.00ms
         max:                                  0.43ms
         umbes  95 protsentiil:               0.00ms

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

Üldiselt on olukord juba selge, kuid testide käivitamine mitu korda on optimaalsem, eemaldades kõrvalekalded ja keskmistades tulemusi, seega rohkem teste hetkel ei tee.

Järeldused

Kuigi selliste konteinerite käivitamine võtab aega umbes viis kuni kümme korda kauem (tüüpiline käivitusaeg sarnastele käskudele containerd kasutamisel on vähem kui kolmandik sekundist), töötavad need siiski üsna kiiresti, kui võtta arvesse absoluutset käivitusaega (üleval on näidatud, et keskmine käivitusaeg on kolme sekundi ringis). Ja kiire CPU ja RAM testi tulemused näitavad põhimõtteliselt samu tulemusi, mis on eriti positiivne, arvestades, et isolatsiooni tagab nii hästi välja töötatud mehhanism nagu kvm.

Teade

Artikkel on ülevaatelise iseloomuga, kuid annab võimaluse tutvuda alternatiivse käitustehnoloogia võimalustega. Paljusid rakendusi ei ole katmata, näiteks on veebilehel kirjeldatud Kubernetes'e käivitamise võimalust Kata konteinerite peal. Samuti on võimalik läbi viia mitmeid teste, mille eesmärk on tuvastada turvaprobleeme, seada piiranguid ja uurida teisi huvitavaid aspekte.

Palun kõiki, kes siia lugemiseni on jõudnud, osaleda küsitluses, mis määrab tulevased väljaanded selle teema kohta.

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

Kas tuleks jätkata artiklite avaldamist Kata konteinerite kohta?

  • 80,0%Jah, kirjutage rohkem!28

  • 20,0%Ei, ei tasu…7

Hääletasid 35 kasutajat. 7 kasutajat ei osalenud.

Allikas: habr.com

Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster