Aperçu et configuration des Kata Containers

Aperçu et configuration des Kata Containers
Cet article examinera le principe de fonctionnement Kata Containers, et il y aura également une partie pratique sur leur connexion à Docker.

Sur les problĂšmes gĂ©nĂ©raux avec Docker et les solutions possibles, il a dĂ©jĂ  Ă©tĂ© Ă©crit, aujourd'hui je vais briĂšvement dĂ©crire la mise en Ɠuvre de Kata Containers. Kata Containers est un environnement d'exĂ©cution (runtime) de conteneurs basĂ© sur des machines virtuelles lĂ©gĂšres. Le travail avec eux se dĂ©roule comme avec d'autres conteneurs, mais il y a une isolation plus robuste en utilisant la technologie de virtualisation matĂ©rielle. Le projet a commencĂ© en 2017, la communautĂ© Ă©ponyme a alors terminĂ© la fusion des meilleures idĂ©es d'Intel Clear Containers et de Hyper.sh RunV, aprĂšs quoi le travail a continuĂ© sur le support de diffĂ©rentes architectures, y compris AMD64, ARM, IBM p- et z-series. De plus, le travail Ă  l'intĂ©rieur des hyperviseurs QEMU, Firecracker est pris en charge, ainsi qu'une intĂ©gration avec containerd. Le code est disponible sur GitHub sous licence MIT.

Fonctionnalités principales

  • Le travail avec un noyau distinct assure ainsi l'isolation rĂ©seau, la mĂ©moire et les opĂ©rations d'entrĂ©e-sortie, offrant la possibilitĂ© d'utiliser de maniĂšre forcĂ©e l'isolation matĂ©rielle basĂ©e sur des extensions de virtualisation.
  • Le support des normes industrielles, y compris OCI (format de conteneurs), Kubernetes CRI.
  • Performance stable des conteneurs Linux classiques, augmentation de l'isolation sans surcoĂ»t affectant la performance des machines virtuelles classiques.
  • Élimination de la nĂ©cessitĂ© de faire fonctionner des conteneurs Ă  l'intĂ©rieur de machines virtuelles complĂštes, des interfaces standard simplifient l'intĂ©gration et le dĂ©marrage.

Installation

Oui de nombreux pour les variantes d'installation, je vais examiner l'installation à partir des dépÎts, basée sur le systÚme d'exploitation Centos 7.
Important: le fonctionnement de Kata Containers n'est pris en charge que sur du matériel, le passage de la virtualisation ne fonctionne pas toujours, de plus le processeur doit prendre en charge sse4.1. du processeur.

L'installation de Kata Containers est assez simple :

Nous installons les utilitaires pour travailler avec les dépÎts :

# yum -y install yum-utils

Nous dĂ©sactivons Selinux (idĂ©alement — le configurer, mais pour la simplicitĂ©, je le dĂ©sactive) :

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

Nous connectons le dépÎt et procédons à l'installation

# 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

Configuration

Je vais procéder à la configuration pour travailler avec docker, son installation est standard, je ne vais pas la détailler davantage :

# 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

Nous apportons des modifications au daemon.json :

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

Nous redémarrons docker :

# service docker restart

Vérification de la fonctionnalité

Si nous lançons un conteneur avant le redémarrage de docker, nous pouvons voir que uname affiche la version du noyau en cours d'exécution sur le systÚme principal :

# 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

AprĂšs le redĂ©marrage — la version du noyau apparaĂźt ainsi :

# 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

Plus de commandes !

# 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

Test de charge rapide

Pour Ă©valuer les pertes dues Ă  la virtualisation – je lance sysbench, comme exemples principaux je prends cette option.

Lancement de sysbench avec Docker+containerd

Test du processeur

sysbench 1.0 : benchmark d'évaluation systÚme multi-threadé

Exécution du test avec les options suivantes :
Nombre de threads : 1
Initialisation du générateur de nombres aléatoires à partir de l'heure actuelle

Limite des nombres premiers : 20000

Initialisation des threads de travail...

Threads démarrés !

Statistiques générales :
    temps total :                          36,7335s
    nombre total d'événements :              10000
    temps total pris par l'exécution de l'événement : 36,7173s
    temps de réponse :
         min :                                  3,43ms
         moy. :                                  3,67ms
         max :                                  8,34ms
         approx. percentile 95 :               3,79ms

ÉquitĂ© des threads :
    événements (moy/stdev) :           10000,0000/0,00
    temps d'exécution (moy/stdev) :   36,7173/0,00

Test de la mémoire vive

sysbench 1.0 : benchmark d'évaluation systÚme multi-threadé

Exécution du test avec les options suivantes :
Nombre de threads : 1
Initialisation du générateur de nombres aléatoires à partir de l'heure actuelle

Initialisation des threads de travail...

Threads démarrés !

Opérations effectuées : 104857600 (2172673,64 ops/sec)

102400,00 MiB transférés (2121,75 MiB/sec)

Statistiques générales :
    temps total :                          48,2620s
    nombre total d'événements :              104857600
    temps total pris par l'exécution de l'événement : 17,4161s
    temps de réponse :
         min :                                  0,00ms
         moy. :                                  0,00ms
         max :                                  0,17ms
         approx. percentile 95 :               0,00ms

ÉquitĂ© des threads :
    événements (moy/stdev) :           104857600,0000/0,00
    temps d'exécution (moy/stdev) :   17,4161/0,00

Lancement de sysbench avec Docker+Kata Containers

Test du processeur

sysbench 1.0 : benchmark d'évaluation systÚme multi-threadé

Exécution du test avec les options suivantes :
Nombre de threads : 1
Initialisation du générateur de nombres aléatoires à partir de l'heure actuelle

Limite des nombres premiers : 20000

Initialisation des threads de travail...

Threads démarrés !

Statistiques générales :
    temps total :                          36,5747s
    nombre total d'événements :              10000
    temps total pris par l'exécution de l'événement : 36,5594s
    temps de réponse :
         min :                                  3,43ms
         moy. :                                  3,66ms
         max :                                  4,93ms
         approx. percentile 95 :               3,77ms

ÉquitĂ© des threads :
    événements (moy/stdev) :           10000,0000/0,00
    temps d'exécution (moy/stdev) :   36,5594/0,00

Test de la mémoire vive

sysbench 1.0 : benchmark d'évaluation systÚme multi-threadé

Exécution du test avec les options suivantes :
Nombre de threads : 1
Initialisation du générateur de nombres aléatoires à partir de l'heure actuelle

Initialisation des threads de travail...

Threads démarrés !

Opérations effectuées : 104857600 (2450366,94 ops/sec)

102400,00 MiB transférés (2392,94 MiB/sec)

Statistiques générales :
    temps total :                          42,7926s
    nombre total d'événements :              104857600
    temps total pris par l'exécution de l'événement : 16,1512s
    temps de réponse :
         min :                                  0,00ms
         moy. :                                  0,00ms
         max :                                  0,43ms
         approx. percentile 95 :               0,00ms

ÉquitĂ© des threads :
    événements (moy/stdev) :           104857600,0000/0,00
    temps d'exécution (moy/stdev) :   16,1512/0,00

La situation est déjà claire, mais il est préférable de lancer les tests plusieurs fois, en éliminant les valeurs aberrantes et en moyenne les résultats, donc je ne fais pas encore plus de tests.

Conclusions

Bien que le lancement de tels conteneurs prenne environ cinq Ă  dix fois plus de temps (le temps typique de lancement de commandes similaires avec containerd est infĂ©rieur Ă  un tiers de seconde) — ils fonctionnent toujours assez rapidement en tenant compte du temps de lancement absolu (ci-dessus, des exemples montrent que les commandes s'exĂ©cutent en moyenne en trois secondes). Les rĂ©sultats du test rapide du CPU et de la RAM montrent en fait des rĂ©sultats identiques, ce qui est rĂ©jouissant, d'autant plus que l'isolement est assurĂ© par un mĂ©canisme aussi Ă©prouvĂ© que kvm.

Annonce

Cet article est une revue, mais il permet d'explorer un runtime alternatif. De nombreux domaines d'application ne sont pas couverts, par exemple, le site décrit la possibilité de lancer Kubernetes au-dessus de Kata Containers. De plus, il est possible de réaliser une série de tests visant à identifier des problÚmes de sécurité, à appliquer des restrictions et d'autres aspects intéressants.

Je demande à tous ceux qui ont lu jusqu'ici de participer à ce sondage, dont dépendra la publication future sur ce sujet.

Seuls les utilisateurs enregistrés peuvent participer au sondage. Connectez-vous, s'il vous plaßt.

Faut-il continuer Ă  publier des articles sur Kata Containers ?

  • 80,0%Oui, Ă©cris encore !28

  • 20,0%Non, ce n'est pas nĂ©cessaire
7

35 utilisateurs ont voté. 7 utilisateurs se sont abstenu.

Source : habr.com

Acheter un hĂ©bergement fiable pour les sites avec protection DDoS, serveurs VPS VDS đŸ”„ Acheter un hĂ©bergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster