Ката контейнерлеріне қысқаша шолу және орнату

Ката контейнерлеріне қысқаша шолу және орнату
Бұл мақалада оның қалай жұмыс істейтіні талқыланады Ката контейнерлері, сонымен қатар олардың Docker-ке қосылуының практикалық бөлігі болады.

Docker-пен жиі кездесетін мәселелер және олардың шешімдері туралы жазылған болатын, бүгін мен Kata Containers-тен іске асыруды қысқаша сипаттаймын. Kata Containers - жеңіл виртуалды машиналарға негізделген қауіпсіз контейнер жұмыс уақыты. Олармен жұмыс істеу басқа контейнерлермен бірдей, бірақ сонымен қатар аппараттық виртуалдандыру технологиясын қолданатын сенімді оқшаулау бар. Жоба 2017 жылы аттас қауымдастық Intel Clear Containers және Hyper.sh RunV ең жақсы идеяларын біріктіруді аяқтаған кезде басталды, содан кейін әртүрлі архитектураларды, соның ішінде AMD64, ARM, IBM p- және z қолдау көрсету жұмыстары жалғасты. -серия. Сонымен қатар, QEMU, Firecracker гипервизорларының ішінде жұмысқа қолдау көрсетіледі, сонымен қатар контейнермен интеграция бар. Код мына жерден қол жетімді GitHub MIT лицензиясы бойынша.

Негізгі ерекшеліктері

  • Жеке ядромен жұмыс істей отырып, желіні, жадты және енгізу-шығару оқшаулауын қамтамасыз ете отырып, виртуалдандыру кеңейтімдері негізінде аппараттық оқшаулауды қолдануды мәжбүрлеуге болады.
  • Салалық стандарттарды қолдау, соның ішінде OCI (контейнер пішімі), Kubernetes CRI
  • Кәдімгі Linux контейнерлерінің тұрақты өнімділігі, кәдімгі VM құрылғыларының өнімділігін арттырусыз оқшаулаудың жоғарылауы
  • Толық виртуалды машиналар ішінде контейнерлерді іске қосу қажеттілігін жойыңыз, жалпы интерфейстер біріктіруді және іске қосуды жеңілдетеді

параметр

бар жиынтығы орнату опциялары, мен Centos 7 операциялық жүйесіне негізделген репозиторийлерден орнатуды қарастырамын.
маңызды: Kata Containers жұмысына тек аппараттық құралда қолдау көрсетіледі, виртуалды бағыттау әрқашан жұмыс істемейді sse4.1 қолдауы қажет процессордан.

Kata контейнерлерін орнату өте қарапайым:

Репозиторийлермен жұмыс істеуге арналған утилиталарды орнату:

# 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

реттеу

Мен докермен жұмыс істеуді баптаймын, оны орнату әдеттегідей, мен оны толығырақ сипаттамаймын:

# 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

Доккерді қайта іске қосыңыз:

# service docker restart

Функционалды тестілеу

Егер докерді қайта іске қоспас бұрын контейнерді іске қоссаңыз, uname негізгі жүйеде жұмыс істейтін ядроның нұсқасын беретінін көре аласыз:

# 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

Қайта іске қосқаннан кейін ядро ​​нұсқасы келесідей болады:

# 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:  multi-threaded system evaluation benchmark

Running the test with following options:
Number of threads: 1
Initializing random number generator from current time

Prime numbers limit: 20000

Initializing worker threads...

Threads started!

General statistics:
    total time:                          36.7335s
    total number of events:              10000
    total time taken by event execution: 36.7173s
    response time:
         min:                                  3.43ms
         avg:                                  3.67ms
         max:                                  8.34ms
         approx.  95 percentile:               3.79ms

Threads fairness:
    events (avg/stddev):           10000.0000/0.00
    execution time (avg/stddev):   36.7173/0.00

RAM сынағы

sysbench 1.0:  multi-threaded system evaluation benchmark

Running the test with following options:
Number of threads: 1
Initializing random number generator from current time

Initializing worker threads...

Threads started!

Operations performed: 104857600 (2172673.64 ops/sec)

102400.00 MiB transferred (2121.75 MiB/sec)

General statistics:
    total time:                          48.2620s
    total number of events:              104857600
    total time taken by event execution: 17.4161s
    response time:
         min:                                  0.00ms
         avg:                                  0.00ms
         max:                                  0.17ms
         approx.  95 percentile:               0.00ms

Threads fairness:
    events (avg/stddev):           104857600.0000/0.00
    execution time (avg/stddev):   17.4161/0.00

Docker+Kata контейнерлері арқылы sysbench іске қосу

Процессор сынағы

sysbench 1.0:  multi-threaded system evaluation benchmark

Running the test with following options:
Number of threads: 1
Initializing random number generator from current time

Prime numbers limit: 20000

Initializing worker threads...

Threads started!

General statistics:
    total time:                          36.5747s
    total number of events:              10000
    total time taken by event execution: 36.5594s
    response time:
         min:                                  3.43ms
         avg:                                  3.66ms
         max:                                  4.93ms
         approx.  95 percentile:               3.77ms

Threads fairness:
    events (avg/stddev):           10000.0000/0.00
    execution time (avg/stddev):   36.5594/0.00

RAM сынағы

sysbench 1.0:  multi-threaded system evaluation benchmark

Running the test with following options:
Number of threads: 1
Initializing random number generator from current time

Initializing worker threads...

Threads started!

Operations performed: 104857600 (2450366.94 ops/sec)

102400.00 MiB transferred (2392.94 MiB/sec)

General statistics:
    total time:                          42.7926s
    total number of events:              104857600
    total time taken by event execution: 16.1512s
    response time:
         min:                                  0.00ms
         avg:                                  0.00ms
         max:                                  0.43ms
         approx.  95 percentile:               0.00ms

Threads fairness:
    events (avg/stddev):           104857600.0000/0.00
    execution time (avg/stddev):   16.1512/0.00

Негізінде, жағдай қазірдің өзінде түсінікті, бірақ сынақтарды бірнеше рет өткізіп, шектен шыққан мәндерді алып тастап, нәтижелерді орташалау оңтайлырақ, сондықтан мен әлі көп сынақтар жасамаймын.

қорытындылар

Мұндай контейнерлердің іске қосылуына бес-он есе ұзағырақ уақыт кететініне қарамастан (контейнерді пайдаланған кезде ұқсас пәрмендердің әдеттегі орындау уақыты секундтың үштен бірінен аз), егер абсолютті басталу уақытын алсақ, олар әлі де тез жұмыс істейді (бар жоғарыдағы мысалдар, командалар орта есеппен үш секундта орындалады). Процессор мен жедел жадты жылдам тексерудің нәтижелері бірдей нәтижелерді көрсетеді, бұл қуанбайды, әсіресе оқшаулау kvm сияқты жақсы жұмыс істейтін механизм арқылы қамтамасыз етілген.

Хабарландыру

Мақала шолу болып табылады, бірақ ол сізге балама орындалу уақытын сезінуге мүмкіндік береді. Қолданудың көптеген аймақтары қамтылмаған, мысалы, сайт Kubernetes-ті Kata контейнерлерінің үстінде іске қосу мүмкіндігін сипаттайды. Бұған қоса, қауіпсіздік мәселелерін табуға, шектеулерді орнатуға және басқа да қызықты нәрселерге бағытталған бірқатар сынақтарды орындауға болады.

Мен осында оқып, қайта оралғандардың барлығын осы тақырып бойынша болашақ жарияланымдар қандай болатынына байланысты сауалнамаға қатысуларын сұраймын.

Сауалнамаға тек тіркелген пайдаланушылар қатыса алады. Кіру, өтінемін.

Мен Kata Containers туралы мақалаларды жариялауды жалғастыруым керек пе?

  • 80,0%Иә, көбірек жаз!28

  • 20,0%Жоқ, болмайды...7

35 пайдаланушы дауыс берді. 7 пайдаланушы қалыс қалды.

Ақпарат көзі: www.habr.com

пікір қалдыру