Kurzer Überblick und Einrichtung von Kata Containers

Kurzer Überblick und Einrichtung von Kata Containers
In diesem Artikel wird erläutert, wie es funktioniert Kata-ContainerAußerdem wird es einen praktischen Teil mit der Anbindung an Docker geben.

Über häufige Probleme mit Docker und deren Lösungen bereits wurde geschrieben, heute werde ich kurz die Implementierung von Kata Containers beschreiben. Kata Containers ist eine sichere Container-Laufzeitumgebung, die auf leichten virtuellen Maschinen basiert. Die Arbeit mit ihnen ist die gleiche wie mit anderen Containern, zusätzlich gibt es jedoch eine zuverlässigere Isolierung durch Hardware-Virtualisierungstechnologie. Das Projekt begann im Jahr 2017, als die gleichnamige Community die Zusammenführung der besten Ideen von Intel Clear Containers und Hyper.sh RunV abschloss. Anschließend wurde weiter an der Unterstützung verschiedener Architekturen gearbeitet, darunter AMD64, ARM, IBM p- und z -Serie. Darüber hinaus wird die Arbeit innerhalb der Hypervisoren QEMU und Firecracker unterstützt und es gibt auch eine Integration mit Containerd. Der Code ist verfügbar unter GitHub unter der MIT-Lizenz.

Основные возможности

  • Wenn mit einem separaten Kern gearbeitet wird und so Netzwerk-, Speicher- und E/A-Isolation bereitgestellt wird, ist es möglich, die Verwendung von Hardware-Isolation basierend auf Virtualisierungserweiterungen zu erzwingen
  • Unterstützung für Industriestandards, einschließlich OCI (Containerformat), Kubernetes CRI
  • Konsistente Leistung regulärer Linux-Container, erhöhte Isolation ohne den Leistungsaufwand regulärer VMs
  • Eliminieren Sie die Notwendigkeit, Container in vollwertigen virtuellen Maschinen auszuführen, generische Schnittstellen vereinfachen die Integration und den Start

Einstellung

Es gibt Satz von Bei den Installationsoptionen werde ich die Installation aus den Repositorys in Betracht ziehen, basierend auf dem Centos 7-Betriebssystem.
Es ist wichtig,: Die Arbeit von Kata Containers wird nur auf Hardware unterstützt, die Virtualisierungsweiterleitung funktioniert auch nicht immer Benötigen Sie sse4.1-Unterstützung vom Prozessor.

Die Installation von Kata Containers ist ganz einfach:

Installieren Sie Dienstprogramme für die Arbeit mit Repositorys:

# yum -y install yum-utils

Deaktivieren Sie Selinux (es ist korrekter zu konfigurieren, aber der Einfachheit halber deaktiviere ich es):

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

Wir verbinden das Repository und führen die Installation durch

# 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

Einstellung

Ich werde die Arbeit mit Docker einrichten, die Installation ist typisch, ich werde sie nicht näher beschreiben:

# 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

Wir nehmen Änderungen an daemon.json vor:

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

Docker neu starten:

# service docker restart

Funktionsprüfung

Wenn Sie den Container starten, bevor Sie Docker neu starten, können Sie sehen, dass uname die Version des Kernels angibt, der auf dem Hauptsystem ausgeführt wird:

# 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

Nach einem Neustart sieht die Kernel-Version so aus:

# 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

Mehr Teams!

# 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

Schneller Lasttest

Um die Verluste durch die Virtualisierung einzuschätzen, führe ich als Hauptbeispiel Sysbench aus Nehmen Sie diese Option.

Ausführen von Sysbench mit Docker+Container

Prozessortest

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-Test

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

Ausführen von Sysbench mit Docker+Kata-Containern

Prozessortest

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-Test

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

Im Prinzip ist die Situation bereits klar, optimaler ist es jedoch, die Tests mehrmals durchzuführen, Ausreißer zu entfernen und die Ergebnisse zu mitteln, daher mache ich noch keine weiteren Tests.

Befund

Trotz der Tatsache, dass der Start solcher Container etwa fünf- bis zehnmal länger dauert (die typische Zeit zum Ausführen ähnlicher Befehle bei Verwendung von Containerd beträgt weniger als eine Drittelsekunde), arbeiten sie immer noch recht schnell, wenn wir die absolute Startzeit nehmen ( (oben gibt es Beispiele, Befehle werden im Durchschnitt in drei Sekunden ausgeführt). Nun, die Ergebnisse eines Schnelltests von CPU und RAM zeigen fast die gleichen Ergebnisse, was nur erfreulich ist, insbesondere angesichts der Tatsache, dass die Isolation durch einen so gut funktionierenden Mechanismus wie kvm gewährleistet wird.

Ankündigung

Der Artikel ist eine Rezension, gibt Ihnen aber die Möglichkeit, die alternative Laufzeit zu spüren. Viele Anwendungsbereiche werden nicht abgedeckt, beispielsweise beschreibt die Seite die Möglichkeit, Kubernetes auf Kata Containers laufen zu lassen. Darüber hinaus können Sie eine Reihe von Tests durchführen, die sich auf das Auffinden von Sicherheitsproblemen, das Festlegen von Einschränkungen und andere interessante Dinge konzentrieren.

Ich bitte alle, die hier gelesen und zurückgespult haben, an der Umfrage teilzunehmen, von der künftige Veröffentlichungen zu diesem Thema abhängen werden.

An der Umfrage können nur registrierte Benutzer teilnehmen. Einloggenbitte.

Soll ich weiterhin Artikel über Kata Containers veröffentlichen?

  • 80,0%Ja, schreibe mehr!28

  • 20,0%Nein, nicht...7

35 Benutzer haben abgestimmt. 7 Benutzer enthielten sich der Stimme.

Source: habr.com

Kommentar hinzufügen