Kratki pregled i podešavanje Kata Containers

Kratki pregled i podešavanje Kata Containers
U ovom članku će biti objašnjeno načelo rada Kata Containers, a takođe će biti i praktični deo sa njihovim povezivanjem na Docker.

O općim problemima sa Dockerom i mogućim rešenjima već je napisano, danas ću ukratko opisati implementaciju od Kata Containers. Kata Containers je sigurno okruženje za izvršavanje (runtime) kontejnera na osnovu laganih virtuelnih mašina. Rad sa njima odvija se na isti način kao i sa drugim kontejnerima, ali dodatno postoji pouzdanija izolacija koristeći tehnologiju virtualizacije hardvera. Projekat je započet 2017. godine, istoimena zajednica je tada završila fuziju najboljih ideja iz Intel Clear Containers i Hyper.sh RunV, nakon čega se nastavilo sa podrškom različitih arhitektura, uključujući AMD64, ARM, IBM p- i z-serije. Takođe se podržava rad unutar hipervizora QEMU, Firecracker, kao i integracija sa containerd. Kod je dostupan na GitHub pod MIT licencom.

Osnovne mogućnosti

  • Rad sa posebnim jezgrom na taj način omogućava izolaciju mreže, memorije i operacija ulaza-izlaza, postoji mogućnost prisilnog korišćenja hardverske izolacije na osnovu proširenja virtualizacije
  • Podrška industrijskim standardima, uključujući OCI (format kontejnera), Kubernetes CRI
  • Stabilne performanse običnih Linux kontejnera, povećana izolacija bez troškova koji utiču na performanse običnih virtuelnih mašina
  • Eliminacija potrebe za pokretanjem kontejnera unutar punih virtuelnih mašina, generički interfejsi pojednostavljuju integraciju i pokretanje

Instalacija

Postoji mnoge Opcije instalacije, razmotriću instalaciju iz repozitorija, na bazi operativnog sistema Centos 7.
Važno: rad Kata Containers podržan je samo na hardveru, propuštanje virtualizacije ne uspeva uvek, takođe je potrebna podrška za sse4.1 procesora.

Instalacija Kata Containers je prilično jednostavna:

Instaliramo alate za rad sa repozitorijama:

# yum -y install yum-utils

Onemogućavamo Selinux (ispravnije — konfigurišemo, ali radi jednostavnosti ga onemogućavam):

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

Povezujemo repozitorij i vršimo instalaciju

# 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

Podešavanje

Vršiću podešavanje za rad sa docker-om, njegova instalacija je standardna, neću je detaljnije objašnjavati:

# 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

Uvodimo izmene u daemon.json:

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

Ponovo pokrećemo docker:

# service docker restart

Proveravanje funkcionalnosti

Ako pokrenete kontejner pre ponovnog pokretanja dockera — možete primetiti da uname pokazuje verziju jezgra koja se izvršava na glavnom sistemu:

# 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

Nakon ponovnog pokretanja — verzija jezgra izgleda ovako:

# 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

Još naredbi!

# 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

Brzo testiranje opterećenja

Za procjenu gubitaka od virtualizacije — pokrećem sysbench kao glavne primjere uzimam ovu opciju.

Pokretanje sysbencha koristeći Docker+containerd

Testiranje procesora

sysbench 1.0: višekratno sistemsko evaluacijsko mjerilo

Izvođenje testa s sljedećim opcijama:
Broj niti: 1
Inicijalizacija generatora slučajnih brojeva iz trenutnog vremena

Gornja granica prostih brojeva: 20000

Inicijalizacija radnih niti...

Niti su pokrenute!

Opće statistike:
    ukupno vrijeme:                          36.7335s
    ukupni broj događaja:                   10000
    ukupno vrijeme potrebno za izvršenje događaja: 36.7173s
    vrijeme odgovora:
         min:                                  3.43ms
         avg:                                  3.67ms
         max:                                  8.34ms
         približno  95 percentil:            3.79ms

Pravednost niti:
    događaji (avg/stddev):                 10000.0000/0.00
    vrijeme izvršenja (avg/stddev):        36.7173/0.00

Testiranje radne memorije

sysbench 1.0: višekratno sistemsko evaluacijsko mjerilo

Izvođenje testa s sljedećim opcijama:
Broj niti: 1
Inicijalizacija generatora slučajnih brojeva iz trenutnog vremena

Inicijalizacija radnih niti...

Niti su pokrenute!

Izvršene operacije: 104857600 (2172673.64 ops/sec)

102400.00 MiB preneseno (2121.75 MiB/sec)

Opće statistike:
    ukupno vrijeme:                          48.2620s
    ukupni broj događaja:                   104857600
    ukupno vrijeme potrebno za izvršenje događaja: 17.4161s
    vrijeme odgovora:
         min:                                  0.00ms
         avg:                                  0.00ms
         max:                                  0.17ms
         približno  95 percentil:            0.00ms

Pravednost niti:
    događaji (avg/stddev):                 104857600.0000/0.00
    vrijeme izvršenja (avg/stddev):        17.4161/0.00

Pokretanje sysbencha koristeći Docker+Kata Containers

Testiranje procesora

sysbench 1.0: višekratno sistemsko evaluacijsko mjerilo

Izvođenje testa s sljedećim opcijama:
Broj niti: 1
Inicijalizacija generatora slučajnih brojeva iz trenutnog vremena

Gornja granica prostih brojeva: 20000

Inicijalizacija radnih niti...

Niti su pokrenute!

Opće statistike:
    ukupno vrijeme:                          36.5747s
    ukupni broj događaja:                   10000
    ukupno vrijeme potrebno za izvršenje događaja: 36.5594s
    vrijeme odgovora:
         min:                                  3.43ms
         avg:                                  3.66ms
         max:                                  4.93ms
         približno  95 percentil:            3.77ms

Pravednost niti:
    događaji (avg/stddev):                 10000.0000/0.00
    vrijeme izvršenja (avg/stddev):        36.5594/0.00

Testiranje radne memorije

sysbench 1.0: višekratno sistemsko evaluacijsko mjerilo

Izvođenje testa s sljedećim opcijama:
Broj niti: 1
Inicijalizacija generatora slučajnih brojeva iz trenutnog vremena

Inicijalizacija radnih niti...

Niti su pokrenute!

Izvršene operacije: 104857600 (2450366.94 ops/sec)

102400.00 MiB preneseno (2392.94 MiB/sec)

Opće statistike:
    ukupno vrijeme:                          42.7926s
    ukupni broj događaja:                   104857600
    ukupno vrijeme potrebno za izvršenje događaja: 16.1512s
    vrijeme odgovora:
         min:                                  0.00ms
         avg:                                  0.00ms
         max:                                  0.43ms
         približno  95 percentil:            0.00ms

Pravednost niti:
    događaji (avg/stddev):                 104857600.0000/0.00
    vrijeme izvršenja (avg/stddev):        16.1512/0.00

Situacija je već prilično jasna, ali optimalnije je provoditi testove nekoliko puta, uklanjajući izTočak i prosječući rezultate, stoga za sada ne radim više testova.

Zaključci

Iako pokretanje takvih kontejnera traje otprilike pet do deset puta duže (tipično vrijeme pokretanja sličnih komandi koristeći containerd je manje od trećine sekunde) — i dalje rade dovoljno brzo ako gledamo apsolutno vrijeme pokretanja (primjeri su navedeni iznad, komande se izvršavaju u prosjeku za tri sekunde). A rezultati brzog testa CPU i RAM-a pokazuju praktički jednake rezultate, što ne može ne obradovati, osobito s obzirom na to da izolacija se ostvaruje pomoću dobro testiranog mehanizma kao što je kvm.

Najava

Članak je pregledan, ali pruža mogućnost isprobavanja alternativnog runtime-a. Mnoge oblasti primjene nisu pokrivene, na primjer, na stranici je opisana mogućnost pokretanja Kubernetes-a iznad Kata Containers. Također možete provesti niz testova usmjerenih na pronalaženje sigurnosnih problema, postavljanje ograničenja i druge zanimljive stvari.

Molim sve koji su pročitali ili preskočili ovdje da sudjeluju u anketi, od koje će zavisiti buduće objave na ovu temu.

Samo registrirani korisnici mogu sudjelovati u anketi. Prijavite se, molimo.

Treba li dalje objavljivati članke o Kata Containers?

  • 80,0%Da, piši još!28

  • 20,0%Ne, ne treba…7

Glasalo je 35 korisnika. Suzdržalo se 7 korisnika.

Izvor: habr.com

Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere 🔥 Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere | ProHoster