Maikling pangkalahatang-ideya at setup ng Kata Container

Maikling pangkalahatang-ideya at setup ng Kata Container
Tatalakayin ng artikulong ito kung paano ito gumagana Mga Lalagyan ng Kata, at magkakaroon din ng praktikal na bahagi sa kanilang koneksyon sa Docker.

Tungkol sa mga karaniwang problema sa Docker at ang kanilang mga solusyon na ay isinulat, ngayon ay maikling ilalarawan ko ang pagpapatupad mula sa Kata Containers. Ang Kata Containers ay isang secure na runtime ng container batay sa magaan na virtual machine. Ang pagtatrabaho sa kanila ay kapareho ng sa iba pang mga lalagyan, ngunit bilang karagdagan mayroong isang mas maaasahang paghihiwalay gamit ang teknolohiya ng virtualization ng hardware. Nagsimula ang proyekto noong 2017, nang makumpleto ng komunidad na may parehong pangalan ang pagsasama-sama ng mga pinakamahusay na ideya mula sa Intel Clear Containers at Hyper.sh RunV, pagkatapos nito ay nagpatuloy ang trabaho sa suporta para sa iba't ibang mga arkitektura, kabilang ang AMD64, ARM, IBM p- at z -serye. Bukod pa rito, magtrabaho sa loob ng hypervisors QEMU, Firecracker ay suportado, at mayroon ding integration sa containerd. Available ang code sa GitHub sa ilalim ng lisensya ng MIT.

Pangunahing mga tampok

  • Paggawa gamit ang isang hiwalay na core, kaya nagbibigay ng network, memory at I / O isolation, posibleng pilitin ang paggamit ng hardware isolation batay sa virtualization extension
  • Suporta para sa mga pamantayan sa industriya kabilang ang OCI (container format), Kubernetes CRI
  • Ang pare-parehong performance ng mga regular na container ng Linux, nadagdagan ang paghihiwalay nang walang overhead ng performance ng mga regular na VM
  • Tanggalin ang pangangailangang magpatakbo ng mga lalagyan sa loob ng mga ganap na virtual machine, pinapasimple ng mga generic na interface ang pagsasama at paglulunsad

Instalasyon

Mayroon marami mga opsyon sa pag-install, isasaalang-alang ko ang pag-install mula sa mga repositoryo, batay sa operating system ng Centos 7.
Mahalagang: Ang gawain ng Kata Containers ay sinusuportahan lamang sa hardware, ang pagpapasa ng virtualization ay hindi palaging gumagana, gayundin kailangan ng sse4.1 suporta mula sa processor.

Ang pag-install ng Kata Container ay medyo simple:

Mag-install ng mga utility para sa pagtatrabaho sa mga repository:

# yum -y install yum-utils

Huwag paganahin ang Selinux (mas tama ang pag-configure, ngunit para sa pagiging simple ay hindi ko ito pinagana):

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

Ikinonekta namin ang repositoryo at isinasagawa ang pag-install

# 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

pag-aayos

Magse-set up ako upang gumana sa docker, ang pag-install nito ay tipikal, hindi ko ito ilalarawan nang mas detalyado:

# 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

Gumagawa kami ng mga pagbabago sa daemon.json:

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

I-restart ang docker:

# service docker restart

Health Check

Kung sisimulan mo ang lalagyan bago i-restart ang docker, makikita mo na ang uname ay magbibigay ng bersyon ng kernel na tumatakbo sa pangunahing system:

# 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

Pagkatapos ng pag-restart, ang bersyon ng kernel ay ganito:

# 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

Higit pang mga koponan!

# 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

Mabilis na pagsubok sa pagkarga

Upang masuri ang mga pagkalugi mula sa virtualization - nagpapatakbo ako ng sysbench, bilang mga pangunahing halimbawa kunin ang pagpipiliang ito.

Pagpapatakbo ng sysbench gamit ang Docker+containerd

Pagsubok sa processor

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

pagsubok ng 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

Pagpapatakbo ng sysbench gamit ang Docker+Kata Containers

Pagsubok sa processor

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

pagsubok ng 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

Sa prinsipyo, ang sitwasyon ay malinaw na, ngunit ito ay mas mahusay na patakbuhin ang mga pagsubok nang maraming beses, pag-alis ng mga outlier at pag-average ng mga resulta, kaya hindi pa ako gumagawa ng higit pang mga pagsubok.

Natuklasan

Sa kabila ng katotohanan na ang mga naturang container ay tumatagal ng humigit-kumulang lima hanggang sampung beses na mas matagal bago magsimula (karaniwang run time para sa mga katulad na command kapag gumagamit ng containerd ay mas mababa sa ikatlong bahagi ng isang segundo), gumagana pa rin ang mga ito nang medyo mabilis kung kukuha tayo ng ganap na oras ng pagsisimula (doon ay mga halimbawa sa itaas, ang mga utos na ginawa sa average na tatlong segundo). Buweno, ang mga resulta ng isang mabilis na pagsubok ng CPU at RAM ay nagpapakita ng halos parehong mga resulta, na hindi maaaring hindi magalak, lalo na sa liwanag ng katotohanan na ang paghihiwalay ay ibinibigay gamit ang gayong mahusay na mekanismo bilang kvm.

Anunsyo

Ang artikulo ay isang pagsusuri, ngunit binibigyan ka nito ng pagkakataong madama ang alternatibong runtime. Maraming lugar ng aplikasyon ang hindi saklaw, halimbawa, inilalarawan ng site ang kakayahang magpatakbo ng Kubernetes sa ibabaw ng Kata Container. Bilang karagdagan, maaari ka ring magpatakbo ng isang serye ng mga pagsubok na nakatuon sa paghahanap ng mga problema sa seguridad, pagtatakda ng mga paghihigpit, at iba pang mga kawili-wiling bagay.

Hinihiling ko sa lahat ng nagbasa at nagbalik-balik dito na makilahok sa survey, kung saan aasa ang mga publikasyon sa hinaharap sa paksang ito.

Ang mga rehistradong user lamang ang maaaring lumahok sa survey. Mag-sign in, pakiusap

Dapat ko bang ipagpatuloy ang pag-publish ng mga artikulo tungkol sa Kata Container?

  • 80,0%Oo, sumulat pa!28

  • 20,0%Hindi, huwag…7

35 user ang bumoto. 7 na user ang umiwas.

Pinagmulan: www.habr.com

Magdagdag ng komento