ืกืงื™ืจื” ืงืฆืจื” ื•ื”ื’ื“ืจื” ืฉืœ ืžื›ื•ืœื•ืช ืงืื˜ื”

ืกืงื™ืจื” ืงืฆืจื” ื•ื”ื’ื“ืจื” ืฉืœ ืžื›ื•ืœื•ืช ืงืื˜ื”
ืžืืžืจ ื–ื” ื™ื“ื•ืŸ ื›ื™ืฆื“ ื–ื” ืขื•ื‘ื“ ืžื›ื•ืœื•ืช ืงืื˜ื”, ื•ื™ื”ื™ื” ื’ื ื—ืœืง ืžืขืฉื™ ืขื ื”ื—ื™ื‘ื•ืจ ืฉืœื”ื ืœ-Docker.

ืขืœ ื‘ืขื™ื•ืช ื ืคื•ืฆื•ืช ืขื Docker ื•ื”ืคืชืจื•ื ื•ืช ืฉืœื”ื ื›ื‘ืจ ื ื›ืชื‘, ื”ื™ื•ื ืืชืืจ ื‘ืงืฆืจื” ืืช ื”ื™ื™ืฉื•ื ืž-Kata Containers. Kata Containers ื”ื•ื ื–ืžืŸ ืจื™ืฆื” ืžืื•ื‘ื˜ื— ืฉืœ ืžื™ื›ืœ ื”ืžื‘ื•ืกืก ืขืœ ืžื›ื•ื ื•ืช ื•ื™ืจื˜ื•ืืœื™ื•ืช ืงืœื•ืช ืžืฉืงืœ. ื”ืขื‘ื•ื“ื” ืื™ืชื ื–ื”ื” ืœื–ื• ืฉืœ ืงื•ื ื˜ื™ื™ื ืจื™ื ืื—ืจื™ื, ืืš ื‘ื ื•ืกืฃ ื™ืฉ ื‘ื™ื“ื•ื“ ืืžื™ืŸ ื™ื•ืชืจ ื‘ืืžืฆืขื•ืช ื˜ื›ื ื•ืœื•ื’ื™ื™ืช ื•ื™ืจื˜ื•ืืœื™ื–ืฆื™ื” ืฉืœ ื”ื—ื•ืžืจื”. ื”ืคืจื•ื™ืงื˜ ื”ื—ืœ ื‘-2017, ื›ืืฉืจ ื”ืงื”ื™ืœื” ื‘ืขืœืช ืื•ืชื• ื”ืฉื ื”ืฉืœื™ืžื” ืืช ื”ืžื™ื–ื•ื’ ืฉืœ ืžื™ื˜ื‘ ื”ืจืขื™ื•ื ื•ืช ืž-Intel Clear Containers ื•-Hyper.sh RunV, ื•ืœืื—ืจ ืžื›ืŸ ื ืžืฉื›ื” ื”ืขื‘ื•ื“ื” ืขืœ ืชืžื™ื›ื” ื‘ืืจื›ื™ื˜ืงื˜ื•ืจื•ืช ืฉื•ื ื•ืช, ื›ื•ืœืœ AMD64, ARM, IBM p-ื•-z -ืกึดื“ืจึธื”. ื‘ื ื•ืกืฃ, ื”ืขื‘ื•ื“ื” ื ืชืžื›ืช ื‘ืชื•ืš ื”-hypervisors QEMU, Firecracker, ื•ื™ืฉ ื’ื ืื™ื ื˜ื’ืจืฆื™ื” ืขื containerd. ื”ืงื•ื“ ื–ืžื™ืŸ ื‘ื›ืชื•ื‘ืช GitHub ืชื—ืช ืจื™ืฉื™ื•ืŸ MIT.

ืชื›ื•ื ื•ืช ืขื™ืงืจื™ื•ืช

  • ืขื‘ื•ื“ื” ืขื ืœื™ื‘ื” ื ืคืจื“ืช, ื•ื‘ื›ืš ืœืกืคืง ื‘ื™ื“ื•ื“ ืจืฉืช, ื–ื™ื›ืจื•ืŸ ื•-I/O, ื ื™ืชืŸ ืœื›ืคื•ืช ืฉื™ืžื•ืฉ ื‘ื‘ื™ื“ื•ื“ ื—ื•ืžืจื” ื”ืžื‘ื•ืกืก ืขืœ ื”ืจื—ื‘ื•ืช ื•ื™ืจื˜ื•ืืœื™ื–ืฆื™ื”
  • ืชืžื™ื›ื” ื‘ืชืงื ื™ื ื‘ืชืขืฉื™ื™ื” ื›ื•ืœืœ OCI (ืคื•ืจืžื˜ ืžื™ื›ืœ), Kubernetes CRI
  • ื‘ื™ืฆื•ืขื™ื ืขืงื‘ื™ื™ื ืฉืœ ืงื•ื ื˜ื™ื™ื ืจื™ื ืจื’ื™ืœื™ื ืฉืœ ืœื™ื ื•ืงืก, ื‘ื™ื“ื•ื“ ืžื•ื’ื‘ืจ ืœืœื ืชืงื•ืจื” ืฉืœ ื‘ื™ืฆื•ืขื™ื ืฉืœ ืžื—ืฉื‘ื™ VM ืจื’ื™ืœื™ื
  • ื‘ื˜ืœ ืืช ื”ืฆื•ืจืš ืœื”ืคืขื™ืœ ืงื•ื ื˜ื™ื™ื ืจื™ื ื‘ืชื•ืš ืžื›ื•ื ื•ืช ื•ื™ืจื˜ื•ืืœื™ื•ืช ืžืœืื•ืช, ืžืžืฉืงื™ื ื’ื ืจื™ื™ื ืžืคืฉื˜ื™ื ืืช ื”ืื™ื ื˜ื’ืจืฆื™ื” ื•ื”ื”ืฉืงื”

ื”ืชืงื ื”

ื™ืฉ ืจื‘ ืืคืฉืจื•ื™ื•ืช ื”ืชืงื ื”, ืืฉืงื•ืœ ื”ืชืงื ื” ืžื”ืžืื’ืจื™ื, ืขืœ ื‘ืกื™ืก ืžืขืจื›ืช ื”ื”ืคืขืœื” Centos 7.
ื–ื” ื—ืฉื•ื‘: ืขื‘ื•ื“ืช Kata Containers ื ืชืžื›ืช ืจืง ื‘ื—ื•ืžืจื”, ื’ื ื”ืขื‘ืจืช ื•ื™ืจื˜ื•ืืœื™ื–ืฆื™ื” ืœื ืชืžื™ื“ ืขื•ื‘ื“ืช ืฆืจื™ืš ืชืžื™ื›ื” ื‘-sse4.1 ืžื”ืžืขื‘ื“.

ื”ืชืงื ืช ืžื›ื•ืœื•ืช ืงืื˜ื” ื”ื™ื ื“ื™ ืคืฉื•ื˜ื”:

ื”ืชืงืŸ ื›ืœื™ ืขื–ืจ ืœืขื‘ื•ื“ื” ืขื ืžืื’ืจื™ื:

# 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

ื‘ื“ื™ืงืช ื‘ืจื™ืื•ืช

ืื ืืชื” ืžืคืขื™ืœ ืืช ื”ืงื•ื ื˜ื™ื™ื ืจ ืœืคื ื™ ื”ืคืขืœืช docker ืžื—ื“ืฉ, ืืชื” ื™ื›ื•ืœ ืœืจืื•ืช ืฉ-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, ื›ื“ื•ื’ืžืื•ืช ื”ืขื™ืงืจื™ื•ืช ืœืงื—ืช ืืช ื”ืืคืฉืจื•ืช ื”ื–ื•.

ื”ืคืขืœืช sysbench ื‘ืืžืฆืขื•ืช Docker+containerd

ื‘ื“ื™ืงืช ืžืขื‘ื“

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

ื”ืคืขืœืช sysbench ื‘ืืžืฆืขื•ืช Docker+Kata Containers

ื‘ื“ื™ืงืช ืžืขื‘ื“

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

ื‘ืื•ืคืŸ ืขืงืจื•ื ื™ ื”ืžืฆื‘ ื›ื‘ืจ ื‘ืจื•ืจ, ืื‘ืœ ื™ื•ืชืจ ืื•ืคื˜ื™ืžืœื™ ืœื”ืจื™ืฅ ืืช ื”ื‘ื“ื™ืงื•ืช ืžืกืคืจ ืคืขืžื™ื, ื”ืกืจืช ื—ืจื™ื’ื™ื ื•ืžืžื•ืฆืข ื”ืชื•ืฆืื•ืช, ืื– ืื ื™ ืœื ืขื•ืฉื” ืขื•ื“ ื‘ื“ื™ืงื•ืช ืขื“ื™ื™ืŸ.

ืžืžืฆืื™ื

ืœืžืจื•ืช ื”ืขื•ื‘ื“ื” ืฉืœืžื›ื•ืœื•ืช ื›ืืœื” ืœื•ืงื— ื‘ืขืจืš ืคื™ ื—ืžื™ืฉื” ืขื“ ืขืฉืจื” ื™ื•ืชืจ ื–ืžืŸ ืœื”ืชื—ื™ืœ (ื–ืžืŸ ืจื™ืฆื” ื˜ื™ืคื•ืกื™ ืขื‘ื•ืจ ืคืงื•ื“ื•ืช ื“ื•ืžื•ืช ื‘ืฉื™ืžื•ืฉ ื‘-containerd ื”ื•ื ืคื—ื•ืช ืžืฉืœื™ืฉ ืฉื ื™ื™ื”), ื”ื ืขื“ื™ื™ืŸ ืขื•ื‘ื“ื™ื ื“ื™ ืžื”ืจ ืื ื ื™ืงื— ืืช ื–ืžืŸ ื”ื”ืชื—ืœื” ื”ืžื•ื—ืœื˜ (ืฉื ื”ืŸ ื“ื•ื’ืžืื•ืช ืœืขื™ืœ, ืคืงื•ื“ื•ืช ื”ืžื‘ื•ืฆืขื•ืช ื‘ืžืžื•ืฆืข ืฉืœ ืฉืœื•ืฉ ืฉื ื™ื•ืช). ื•ื‘ื›ืŸ, ื”ืชื•ืฆืื•ืช ืฉืœ ื‘ื“ื™ืงื” ืžื”ื™ืจื” ืฉืœ ืžืขื‘ื“ ื•ื–ื™ื›ืจื•ืŸ RAM ืžืฆื™ื’ื•ืช ื›ืžืขื˜ ืืช ืื•ืชืŸ ืชื•ืฆืื•ืช, ืฉืื™ื ืŸ ื™ื›ื•ืœื•ืช ืืœื ืœืฉืžื•ื—, ื‘ืžื™ื•ื—ื“ ืœืื•ืจ ื”ืขื•ื‘ื“ื” ืฉื”ื‘ื™ื“ื•ื“ ื ื™ืชืŸ ื‘ืืžืฆืขื•ืช ืžื ื’ื ื•ืŸ ืžื ื•ื”ืœ ื”ื™ื˜ื‘ ื›ืžื• kvm.

ื”ื›ืจื–ื”

ื”ืžืืžืจ ื”ื•ื ืกืงื™ืจื”, ืื‘ืœ ื”ื•ื ื ื•ืชืŸ ืœืš ืืช ื”ื”ื–ื“ืžื ื•ืช ืœื”ืจื’ื™ืฉ ืืช ื–ืžืŸ ื”ืจื™ืฆื” ื”ื—ืœื•ืคื™. ืชื—ื•ืžื™ ื™ื™ืฉื•ื ืจื‘ื™ื ืื™ื ื ืžื›ื•ืกื™ื, ืœืžืฉืœ, ื”ืืชืจ ืžืชืืจ ืืช ื”ื™ื›ื•ืœืช ืœื”ืคืขื™ืœ Kubernetes ืขืœ ื’ื‘ื™ Kata Containers. ื‘ื ื•ืกืฃ, ืืชื” ื™ื›ื•ืœ ื’ื ืœื”ืจื™ืฅ ืกื“ืจื” ืฉืœ ื‘ื“ื™ืงื•ืช ื”ืžืชืžืงื“ื•ืช ื‘ืื™ืชื•ืจ ื‘ืขื™ื•ืช ืื‘ื˜ื—ื”, ื”ื’ื“ืจืช ื”ื’ื‘ืœื•ืช ื•ื“ื‘ืจื™ื ืžืขื ื™ื™ื ื™ื ืื—ืจื™ื.

ืื ื™ ืžื‘ืงืฉ ืžื›ืœ ืืœื” ืฉืงืจืื• ื•ื”ืกืชื•ื‘ื‘ื• ื›ืืŸ ืœืงื—ืช ื—ืœืง ื‘ืกืงืจ, ืฉื‘ื• ื™ื”ื™ื• ืชืœื•ื™ื™ื ืคืจืกื•ืžื™ื ืขืชื™ื“ื™ื™ื ื‘ื ื•ืฉื ื–ื”.

ืจืง ืžืฉืชืžืฉื™ื ืจืฉื•ืžื™ื ื™ื›ื•ืœื™ื ืœื”ืฉืชืชืฃ ื‘ืกืงืจ. ืœื”ืชื—ื‘ืจื‘ื‘ืงืฉื”.

ื”ืื ืœื”ืžืฉื™ืš ืœืคืจืกื ืžืืžืจื™ื ืขืœ ืงืื˜ื” ืงื•ื ื˜ื™ื™ื ืจื™ื?

  • 80,0%ื›ืŸ, ืชื›ืชื•ื‘ ืขื•ื“!28

  • 20,0%ืœื, ืืœ...7

35 ืžืฉืชืžืฉื™ื ื”ืฆื‘ื™ืขื•. 7 ืžืฉืชืžืฉื™ื ื ืžื ืขื•.

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”