
Në këtë artikull do të shqyrtohet principi i funksionimit , si dhe do të ketë një pjesë praktike me lidhjen e tyre me Docker.
Për problemet e përgjithshme me Docker dhe mënyrat për t'i zgjidhur ato tashmë , sot do të përshkruaj shkurtimisht implementimin nga Kata Containers. Kata Containers — një mjedis ekzekutimi (runtime) i sigurt për konteinerë mbi baza të makinave virtuale të lehta. Puna me to ndodh ashtu si me konteinerët e tjerë, por për më tepër, ka një izolim më të besueshëm duke përdorur teknologjinë evirtualizimit të harduerit. Projekti filloi në vitin 2017, dhe komuniteti me të njëjtin emër atëherë përfundoi bashkimin e ideve më të mira nga Intel Clear Containers dhe Hyper.sh RunV, pas së cilës puna vazhdoi për mbështetje të arkitekturave të ndryshme, duke përfshirë AMD64, ARM, IBM p- dhe z-series. Gjithashtu mbështetet puna brenda hiper-vizorëve QEMU, Firecracker, si dhe ka integrim me containerd. Kodi është në dispozicion në nën licencën MIT.
Veçoritë kryesore
- Punën me një bërthamë të veçantë, kështu sigurohet izolimi i rrjetit, memories dhe operacioneve të hyrje-daljes, është e mundur të përdoret me forcë izolimi harduerik mbi bazën e zgjerimeve të virtualizimit
- Mbështetje për standardet industriale, duke përfshirë OCI (formati i konteinerëve), Kubernetes CRI
- Performancë e qëndrueshme e konteinerëve të zakonshëm Linux, rritje e izolimit pa shpenzime që ndikojnë në performancën e makinave virtuale të zakonshme
- Eliminimi i nevojës për të nisur konteinerët brenda makinave virtuale të plota, ndërfaqet tipike thjeshtojnë integrimin dhe nisjen
Instalimi
Ka nga instalimet, do të shqyrtoj instalimin nga repozitorët, mbi sistemin operativ Centos 7.
Ëhtë e rëndësishme: puna e Kata Containers mbështetet vetëm në harduer, kalimi i virtualizimit nuk funksionon gjithmonë, gjithashtu nevojitet mbështetje sse4.1 nga procesori.
Instalimi i Kata Containers është mjaft i thjeshtë:
Instaloni utilitetet për punën me repozitorët:
# yum -y install yum-utilsÇaktivizoni Selinux (më saktë — konfiguroni, por për thjeshtësi unë e çaktivizoj):
# setenforce 0
# sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/configLidhni repozitorin dhe kryeni instalimin
# 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-shimConfiguration
Do të kryej konfigurimin për të punuar me docker, instalimi i tij është tipik, nuk do ta përshkruaj më hollësisht:
# 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 369ce74a3cBëni ndryshimet në daemon.json:
# cat <<EOF > /etc/docker/daemon.json
{
"default-runtime": "kata-runtime",
"runtimes": {
"kata-runtime": {
"path": "/usr/bin/kata-runtime"
}
}
}
EOFRindezni docker:
# service docker restartKontrollimi i funksionimit
Nëse nisni një kontejner para rinisjes së docker — mund të shihni se uname jep versionin e bërthamës së nisur në sistemin kryesor:
# 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/LinuxPas rifleshimit - versione e bërthamës duket kështu:
# 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/LinuxEnde komandat!
# 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.050sTestim të shpejtë të ngarkesës
Për të vlerësuar humbjet nga virtualizimi - po ekzekutoj sysbench, si shembuj kryesorë .
Ekzekutimi i sysbench me përdorimin e Docker+containerd
Testi i procesorit
sysbench 1.0: benchmark i shumëfishtë i sistemit të vlerësimit
Duke ekzekutuar testin me opsionet e mëposhtme:
Numri i fijet: 1
Duke inicializuar gjeneruesin e numrave të rastësishëm nga koha aktuale
Limiti i numrave prim: 20000
Duke inicializuar fijet punuese...
Fijet e filluara!
Statistika të përgjithshme:
koha totale: 36.7335s
numri total i ngjarjeve: 10000
koha totale e shpenzuar nga ekzekutimi i ngjarjeve: 36.7173s
koha e përgjigjes:
min: 3.43ms
avg: 3.67ms
max: 8.34ms
përafërsisht 95 percentili: 3.79ms
Bashkëpunimi i fijes:
ngjarjet (avg/stddev): 10000.0000/0.00
koha e ekzekutimit (avg/stddev): 36.7173/0.00Testi i memories operative
sysbench 1.0: benchmark i shumëfishtë i sistemit të vlerësimit
Duke ekzekutuar testin me opsionet e mëposhtme:
Numri i fijet: 1
Duke inicializuar gjeneruesin e numrave të rastësishëm nga koha aktuale
Duke inicializuar fijet punuese...
Fijet e filluara!
Operacionet e realizuara: 104857600 (2172673.64 ops/sec)
102400.00 MiB të transferuara (2121.75 MiB/sec)
Statistika të përgjithshme:
koha totale: 48.2620s
numri total i ngjarjeve: 104857600
koha totale e shpenzuar nga ekzekutimi i ngjarjeve: 17.4161s
koha e përgjigjes:
min: 0.00ms
avg: 0.00ms
max: 0.17ms
përafërsisht 95 percentili: 0.00ms
Bashkëpunimi i fijes:
ngjarjet (avg/stddev): 104857600.0000/0.00
koha e ekzekutimit (avg/stddev): 17.4161/0.00Ekzekutimi i sysbench me përdorimin e Docker+Kata Containers
Testi i procesorit
sysbench 1.0: benchmark i shumëfishtë i sistemit të vlerësimit
Duke ekzekutuar testin me opsionet e mëposhtme:
Numri i fijet: 1
Duke inicializuar gjeneruesin e numrave të rastësishëm nga koha aktuale
Limiti i numrave prim: 20000
Duke inicializuar fijet punuese...
Fijet e filluara!
Statistika të përgjithshme:
koha totale: 36.5747s
numri total i ngjarjeve: 10000
koha totale e shpenzuar nga ekzekutimi i ngjarjeve: 36.5594s
koha e përgjigjes:
min: 3.43ms
avg: 3.66ms
max: 4.93ms
përafërsisht 95 percentili: 3.77ms
Bashkëpunimi i fijes:
ngjarjet (avg/stddev): 10000.0000/0.00
koha e ekzekutimit (avg/stddev): 36.5594/0.00Testi i memories operative
sysbench 1.0: benchmark i shumëfishtë i sistemit të vlerësimit
Duke ekzekutuar testin me opsionet e mëposhtme:
Numri i fijet: 1
Duke inicializuar gjeneruesin e numrave të rastësishëm nga koha aktuale
Duke inicializuar fijet punuese...
Fijet e filluara!
Operacionet e realizuara: 104857600 (2450366.94 ops/sec)
102400.00 MiB të transferuara (2392.94 MiB/sec)
Statistika të përgjithshme:
koha totale: 42.7926s
numri total i ngjarjeve: 104857600
koha totale e shpenzuar nga ekzekutimi i ngjarjeve: 16.1512s
koha e përgjigjes:
min: 0.00ms
avg: 0.00ms
max: 0.43ms
përafërsisht 95 percentili: 0.00ms
Bashkëpunimi i fijes:
ngjarjet (avg/stddev): 104857600.0000/0.00
koha e ekzekutimit (avg/stddev): 16.1512/0.00Në përgjithësi, situata është e qartë tashmë, por është më optimale të ekzekutohen testet disa herë, duke hequr ekstreme dhe duke mesatarizuar rezultatet, prandaj nuk po bëj më shumë teste për momentin.
Përfundimet
Megjithëse nisja e këtyre kontejnerëve zgjat rreth pesë deri në dhjetë herë më shumë (koha tipike e nisjes së komandeve të ngjashme me përdorimin e containerd është më pak se një të tretën e sekondës) — ata gjithsesi funksionojnë mjaft shpejt, nëse shikojmë kohën absolute të nisjes (më sipër janë shembuj, komandat ekzekutohen mesatarisht për tre sekonda). Dhe rezultatet e testit të shpejtë për CPU dhe RAM tregojnë rezultate thelbësisht të njëjta, gjë që është e këndshme, sidomos në dritën e faktit se izolimi sigurohet nga një mekanizëm kaq të mirë të provohet si kvm.
Njoftim
Ky artikull është një përmbledhje, por ofron mundësinë për të eksperimentuar me një runtime alternativ. Shumë fusha aplikimi nuk janë përfshirë, për shembull, në faqen e internetit përmendet mundësia e nisjes së Kubernetes mbi Kata Containers. Për më tepër, gjithashtu mund të kryhen disa teste që kanë si fokus gjetjen e problemeve me sigurinë, vendosjen e kufizimeve dhe gjëra të tjera interesante.
I lutem të gjithë ata që kanë lexuar ose e kanë kaluar në këtë pikë të marrin pjesë në anketa, të cilat do të ndikojnë në publikimet e ardhshme në këtë temë.
Vetëm përdoruesit e regjistruar mund të marrin pjesë në anketë. , ju lutem.
A duhet të vazhdojmë të publikojmë artikuj mbi Kata Containers?
80,0%Po, shkruaj përsëri!28
20,0%Jo, nuk duhet...7
Votuan 35 përdorues. 7 përdorues abstenuan.
Burimi: habr.com
