Kata Containers-ի կարճ ակնարկ և կոնֆիգուրացիա

Kata Containers-ի կարճ ակնարկ և կոնֆիգուրացիա
Այս հոդվածում կքննարկվի աշխատանքի սկզբունքը Kata Containers, ինչպես նաև կլինի իրացման գործնական մասը Docker-ի հետ սերտ համագործակցությամբ։

Docker-ի հետ կապված ընդհանուր խնդիրների եւ դրանց լուծման տարբերակների մասին արդեն գրել է, այսօր ես կարճ կբացատրեմ Kata Containers-ի իրականացման մասին։ Kata Containers-ը անվտանգ կատարողական միջավայր է, որը հիմնված է թեթևացված վիրտուալ մեքենաների վրա։ Նրանց հետ աշխատանքը տեղի է ունենում ինչպես մյուս կոնտեյներների հետ, սակայն լրացուցիչ ապահովված է ավելի վստահ ուսումնական միջավայր, օգտագործելով սարքավորումների վիրտუალացման տեխնոլոգիան։ Նախագիծը սկսել է 2017 թվականին, այդ ժամանակ նույնանուն համայնքը ավարտեց Intel Clear Containers և Hyper.sh RunV-ից լավագույն գաղափարների միացումը, այլևս աշխատելով տարբեր ճարտարապետությունների աջակցման վրա, այդ թվում AMD64, ARM, IBM p- և z-series։ Բացի դրանից, աջակցվում է QEMU, Firecracker հիպերվիզորների հետ աշխատելը, ինչպես նաև կա ինտեգրում containerd-ի հետ։ Կոդը հասանելի է GitHub MIT լիցեզիայի տակ է:

Հիմնական հնարավորություններ

  • Ատոմական միջուկի հետ աշխատանքը, ապահովելով ցանցի, հիշողության և մուտքային/ելքային գործողությունների իզոլացիա, հնարավորություն է տալիս հարկադրված օգտագործելու սարքավորումների իզոլացիա վիրտուալացման ընդլայնման հիման վրա։
  • Արդյունաբերական ստանդարտների աջակցություն, ներառյալ OCI (կոնտեյներների ձևաչափ), Kubernetes CRI。
  • Linux-ի սովորական կոնտեյներների կայուն կատարողականություն, իզոլացիայի բարձրացում առանց ծախսերի, որր ազդում են սովորական վիրտուալ մեքենաների կատարողականության վրա։
  • Առաջարկում է անհրաժեշտությունը կոնտեյներների սկսել լիարժեք վիրտուալ մեքենաներ, համանման ինտերֆեյսները հեշտացնում են ինտեգրումը և գործարկումը։

Տեղադրում

Կա բազմաթիվ տեղադրումի տարբերակներ, ես կներկայացնեմ տեղադրման գործընթացը Centos 7 օպերացիոն համակարգից։
Կարեւոր: Kata Containers-ի աշխատանքը աջակցվում է միայն սարքերում, վիրտուալացման փոխանցումը միշտ չէ, որ աշխատում է, իսկ նաև պետք է աջակցություն sse4.1 շրջանակից։

Kata Containers-ի տեղադրումը բավականին պարզ է՝

Տեղադրում ենք ռեպոզիտորիաների հետ աշխատելու գործիքները՝

# yum -y install yum-utils

Անջատում ենք Selinux-ը (ճիշտ կլինի՝ կարգավորել, բայց պարզության համար ես անջատում եմ)։

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

Խնդրում ենք միացնել ռեպոզիտորիան և անցնել տեղադրմանը

# 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

Հավելված

Ես կիրականացնեմ կարգավորումը Docker-ի հետ աշխատելու համար, դրա տեղադրումը սովորական է, ես դա չեմ նկարագրի մանրամասն։

# 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

Փոխումներ ենք կատարում daemon.json-ում՝

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

Վերադարձնում ենք docker-ը՝

# service docker restart

Ավելի շատ տեղեկություններ

Եթե իջեցնենք կոնտեյներ ավտոակտիվացումից առաջ, կարելի է տեսնել, որ uname-ը ցույց կտա հիմնական համակարգում աշխատող kernel-ի տարբերակը՝

# 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

Վերադարձնելուց հետո kernel-ի տարբերակը հետևյալն է՝

# 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

Եթե կան այլ հրահանգներ։

# 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

Արագ ծանրաբեռնման թեստավորում

Վիրտուալացման կորուստները գնահատելու համար ես запускаю sysbench-ը, հիմնական օրինակներն են այս տարբերակը.

Docker+containerd-ի օգտագործմամբ sysbench գործարկում

Գործարկումը պրոցեսորի

sysbench 1.0: բազմաթիրախային համակարգի գնահատման չափանիշ

Թեստը իրականացնում ենք հետևյալ պարամետրերով:
Թիրախների թիվ: 1
Ռավանդեցման թվերի սերնդարարի սկսում ընթացիկ ժամանակից

Հիմնական թվեր սահմանափակումը: 20000

Սկսվում են աշխատակիցների թիրախները...

Թիրախները սկսվել են!

Ընդհանուր վիճակագրություն:
    ընդհանուր ժամանակ:                          36.7335s
    դեպքերի ընդհանուր թիվ:                     10000
    դեպքերի իրականացման համար ծախսված ընդհանուր ժամանակը: 36.7173s
    արձագանքման ժամանակը:
         նվազ:                                  3.43ms
         միջին:                                 3.67ms
         առավելագույն:                            8.34ms
         մոտավորապես  95 %-ի տոկոսազանգված:      3.79ms

Թիրախների արդարություն:
    դեպքեր (միջին/ստանդարտ շեղում):           10000.0000/0.00
    իրականացման ժամանակ (միջին/ստանդարտ շեղում):   36.7173/0.00

Համակարգային հիշողության թեստ

sysbench 1.0: multiplexes համակարգի գնահատման չափանիշ

Թեստը իրականացնում ենք հետևյալ պարամետրերով:
Թիրախների թիվ: 1
Ռավանդեցման թվերի սերնդարարի սկսում ընթացիկ ժամանակից

Սկսվում են աշխատակիցների թիրախները...

Ապրանքներ իրականացվել են: 104857600 (2172673.64 ops/դակը)

102400.00 MiB փոխանցվել է (2121.75 MiB/վրկ)

Ընդհանուր վիճակագրություն:
    ընդհանուր ժամանակ:                          48.2620s
    դեպքերի ընդհանուր թիվ:                     104857600
    դեպքերի իրականացման համար ծախսված ընդհանուր ժամանակը: 17.4161s
    արձագանքման ժամանակը:
         նվազ:                                  0.00ms
         միջին:                                 0.00ms
         առավելագույն:                            0.17ms
         մոտավորապես  95 %-ի տոկոսազանգված:      0.00ms

Թիրախների արդարություն:
    դեպքեր (միջին/ստանդարտ շեղում):           104857600.0000/0.00
    իրականացման ժամանակ (միջին/ստանդարտ շեղում):   17.4161/0.00

sysbench-ի գործարկում Docker+Kata Containers-ով

Գործարկումը պրոցեսորի

sysbench 1.0: բազմաթիրախային համակարգի գնահատման չափանիշ

Թեստը իրականացնում ենք հետևյալ պարամետրերով:
Թիրախների թիվ: 1
Ռավանդեցման թվերի սերնդարարի սկսում ընթացիկ ժամանակից

Հիմնական թվեր սահմանափակումը: 20000

Սկսվում են աշխատակիցների թիրախները...

Թիրախները սկսվել են!

Ընդհանուր վիճակագրություն:
    ընդհանուր ժամանակ:                          36.5747s
    դեպքերի ընդհանուր թիվ:                     10000
    դեպքերի իրականացման համար ծախսված ընդհանուր ժամանակը: 36.5594s
    արձագանքման ժամանակը:
         նվազ:                                  3.43ms
         միջին:                                 3.66ms
         առավելագույն:                            4.93ms
         մոտավորապես  95 %-ի տոկոսազանգված:      3.77ms

Թիրախների արդարություն:
    դեպքեր (միջին/ստանդարտ շեղում):           10000.0000/0.00
    իրականացման ժամանակ (միջին/ստանդարտ շեղում):   36.5594/0.00

Համակարգային հիշողության թեստ

sysbench 1.0: բազմաթիրախային համակարգի գնահատման չափանիշ

Թեստը իրականացնում ենք հետևյալ պարամետրերով:
Թիրախների թիվ: 1
Ռավանդեցման թվերի սերնդարարի սկսում ընթացիկ ժամանակից

Սկսվում են աշխատակիցների թիրախները...

Թիրախները սկսվել են!

Ապրանքներ իրականացվել են: 104857600 (2450366.94 ops/դակը)

102400.00 MiB փոխանցվել է (2392.94 MiB/վրկ)

Ընդհանուր վիճակագրություն:
    ընդհանուր ժամանակ:                          42.7926s
    դեպքերի ընդհանուր թիվ:                     104857600
    դեպքերի իրականացման համար ծախսված ընդհանուր ժամանակը: 16.1512s
    արձագանքման ժամանակը:
         նվազ:                                  0.00ms
         միջին:                                 0.00ms
         առավելագույն:                            0.43ms
         մոտ aproximadamente  95 %-ի տոկոսազանգված:    0.00ms

Թիրախների արդարություն:
    դեպքեր (միջին/ստանդարտ շեղում):           104857600.0000/0.00
    իրականացման ժամանակ (միջին/ստանդարտ շեղում):   16.1512/0.00

Ընդհանուր առմամբ իրավիճակը արդեն պարզ է, բայց առավելագույն արդյունավետ է մի քանի անգամ անցկացնել թեստերը, հեռացնելով արտահայտությունները և միջինացնելով արդյունքները, այնպես որ այժմ չեմ անում ավելի շատ թեստեր.

Արդուկները

Իրատեսական է, որ նման կոնտեյներների գործարկումը պահանջում է մոտավորապես հինգ-տասը անգամ ավելի ժամանակ (containerd-ով նման հրամանների տիպիկ գործարկման ժամանակը — քիչ է երրորդից երկրորդ) — նրանք դեռ բավական արագ են գործում, եթե վերցնենք գործարկման ընդհանուր ժամանակը (վերը ներկայացված օրինակում ժամանակակից մաքսիմում 3 վայրկյանում իրականացվում են հրամաններ): Բայց արագ CPU և RAM թեստի արդյունքները ցույց են տալիս փաստորեն նույն արդյունքները, ինչը չի կարող չուրախացնել, հատկապես հաշվի առնելով, որ մեկուսացումը ապահովում է նման լավ իրականացված մեխանիզմ, ինչպիսին KVM-ն է.

Հայտարարություն

Մանկարային հոդված, սակայն հնարավորություն է տալիս ձեռք մեկնել այլընտրանքային runtime-ին: Շատ կիրառական ոլորտներ չեն ընդգրկվել, օրինակ, կայքում նկարագրված է Kubernetes-ի գործարկման հնարավորությունը Kata Containers-ի վրա: Դրանից բացի, կարելի է անցկացնել մի շարք թեստեր, որոնք ուղղված են բացահայտելու անվտանգության խնդիրները, սահմանափակումների ստեղծմանը և այլ հետաքրքիր բաների:

Հրավեր եմ անում բոլորին, ովքեր ավարտել են կարդալ/րում այստեղ մասնակցել հարցմանը, որը որոշելու է այս թեմայի շուրջ ապագա հրապարակումները:

Պատասխանելու համար պետք է գրանցված օգտվող լինել։ Մուտք, խնդրում եմ։

Վնասում է շարունակել հրապարակել հոդվածներ Kata Containers-ի մասին:

  • 80,0%Այո, գրիր ևս! 28

  • 20,0%Ոչ, մի արեք… 7

Գիտեք, 35 օգտակից է քվեարկել: 7 օգտակից abstain:

Ընտանիք: habr.com

Գնել հուսալի հյուրընկալում DDoS պաշտպանությամբ, VPS VDS սերվերներով 🔥 Գնել հուսալի հյուրընկալում DDoS պաշտպանությամբ, VPS VDS սերվերներով | ProHoster