
En este artículo se abordará el principio de funcionamiento , así como también habrá una parte práctica con su conexión a Docker.
Sobre los problemas generales con Docker y sus posibles soluciones ya , hoy describiré brevemente la implementación de Kata Containers. Kata Containers es un entorno seguro de ejecución (runtime) de contenedores basado en máquinas virtuales ligeras. El trabajo con ellos se realiza de la misma manera que con otros contenedores, pero se ofrece una mayor aislamiento utilizando tecnología de virtualización de hardware. El proyecto comenzó en 2017, cuando la comunidad del mismo nombre completó la fusión de las mejores ideas de Intel Clear Containers y Hyper.sh RunV, después de lo cual el trabajo continuó para admitir diversas arquitecturas, incluyendo AMD64, ARM, IBM p- y z-series. Además, se admite la operación dentro de hipervisores como QEMU, Firecracker, y también hay integración con containerd. El código está disponible en bajo licencia MIT.
Principales características
- El trabajo con un núcleo separado garantiza así el aislamiento de red, memoria y operaciones de entrada/salida, hay posibilidad de forzar el uso de aislamiento hardware basado en extensiones de virtualización
- Soporte de normas industriales, incluyendo OCI (formato de contenedores), Kubernetes CRI
- Rendimiento estable de contenedores Linux comunes, aumento del aislamiento sin sobrecargas que afecten el rendimiento de las máquinas virtuales convencionales
- Eliminación de la necesidad de ejecutar contenedores dentro de máquinas virtuales completas, las interfaces estándar simplifican la integración y el lanzamiento
Instalación
Hay Para las opciones de instalación, revisaré la instalación desde los repositorios, basado en el sistema operativo Centos 7.
Importante: el funcionamiento de Kata Containers solo se admite en hardware, el paso de virtualización no siempre funciona, además se requiere soporte sse4.1 del procesador.
La instalación de Kata Containers es bastante simple:
Instalamos las utilidades para trabajar con repositorios:
# yum -y install yum-utilsDesactivamos Selinux (lo correcto sería configurarlo, pero por simplicidad lo desactivaré):
# setenforce 0
# sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/configConectamos el repositorio y procedemos con la instalación
# 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-shimConfiguración
Realizaré la configuración para trabajar con Docker, su instalación es estándar, no la detallaré más:
# 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 369ce74a3cRealizamos cambios en daemon.json:
# cat <<EOF > /etc/docker/daemon.json
{
"default-runtime": "kata-runtime",
"runtimes": {
"kata-runtime": {
"path": "/usr/bin/kata-runtime"
}
}
}
EOFReiniciamos Docker:
# service docker restartVerificación de funcionamiento
Si se inicia un contenedor antes de reiniciar Docker, se puede ver que uname presenta la versión del núcleo en ejecución en el sistema 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/LinuxDespués del reinicio, la versión del núcleo se ve así:
# 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¡Más comandos!
# 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.050sPruebas de carga rápidas
Para evaluar las pérdidas por virtualización, ejecuto sysbench, como ejemplos principales .
Ejecución de sysbench utilizando Docker+containerd
Prueba del procesador
sysbench 1.0: evaluación de sistemas en múltiples hilos
Ejecutando la prueba con las siguientes opciones:
Número de hilos: 1
Inicializando el generador de números aleatorios desde el tiempo actual
Límite de números primos: 20000
Inicializando hilos trabajadores...
¡Hilos iniciados!
Estadísticas generales:
tiempo total: 36.7335s
número total de eventos: 10000
tiempo total tomado por ejecución de eventos: 36.7173s
tiempo de respuesta:
mínimo: 3.43ms
promedio: 3.67ms
máximo: 8.34ms
aproximadamente 95 percentil: 3.79ms
Equidad entre hilos:
eventos (promedio/desviación estándar): 10000.0000/0.00
tiempo de ejecución (promedio/desviación estándar): 36.7173/0.00Prueba de la memoria RAM
sysbench 1.0: evaluación de sistemas en múltiples hilos
Ejecutando la prueba con las siguientes opciones:
Número de hilos: 1
Inicializando el generador de números aleatorios desde el tiempo actual
Inicializando hilos trabajadores...
¡Hilos iniciados!
Operaciones realizadas: 104857600 (2172673.64 ops/seg)
102400.00 MiB transferidos (2121.75 MiB/seg)
Estadísticas generales:
tiempo total: 48.2620s
número total de eventos: 104857600
tiempo total tomado por ejecución de eventos: 17.4161s
tiempo de respuesta:
mínimo: 0.00ms
promedio: 0.00ms
máximo: 0.17ms
aproximadamente 95 percentil: 0.00ms
Equidad entre hilos:
eventos (promedio/desviación estándar): 104857600.0000/0.00
tiempo de ejecución (promedio/desviación estándar): 17.4161/0.00Ejecución de sysbench utilizando Docker+Kata Containers
Prueba del procesador
sysbench 1.0: evaluación de sistemas en múltiples hilos
Ejecutando la prueba con las siguientes opciones:
Número de hilos: 1
Inicializando el generador de números aleatorios desde el tiempo actual
Límite de números primos: 20000
Inicializando hilos trabajadores...
¡Hilos iniciados!
Estadísticas generales:
tiempo total: 36.5747s
número total de eventos: 10000
tiempo total tomado por ejecución de eventos: 36.5594s
tiempo de respuesta:
mínimo: 3.43ms
promedio: 3.66ms
máximo: 4.93ms
aproximadamente 95 percentil: 3.77ms
Equidad entre hilos:
eventos (promedio/desviación estándar): 10000.0000/0.00
tiempo de ejecución (promedio/desviación estándar): 36.5594/0.00Prueba de la memoria RAM
sysbench 1.0: evaluación de sistemas en múltiples hilos
Ejecutando la prueba con las siguientes opciones:
Número de hilos: 1
Inicializando el generador de números aleatorios desde el tiempo actual
Inicializando hilos trabajadores...
¡Hilos iniciados!
Operaciones realizadas: 104857600 (2450366.94 ops/seg)
102400.00 MiB transferidos (2392.94 MiB/seg)
Estadísticas generales:
tiempo total: 42.7926s
número total de eventos: 104857600
tiempo total tomado por ejecución de eventos: 16.1512s
tiempo de respuesta:
mínimo: 0.00ms
promedio: 0.00ms
máximo: 0.43ms
aproximadamente 95 percentil: 0.00ms
Equidad entre hilos:
eventos (promedio/desviación estándar): 104857600.0000/0.00
tiempo de ejecución (promedio/desviación estándar): 16.1512/0.00En principio, la situación ya está clara, pero es más óptimo ejecutar las pruebas varias veces, eliminando los valores atípicos y promediando los resultados; por lo tanto, no haré más pruebas por ahora.
Conclusiones
A pesar de que ejecutar estos contenedores toma aproximadamente de cinco a diez veces más tiempo (el tiempo típico de inicio de comandos similares al usar containerd es menos de un tercio de segundo) — aún funcionan bastante rápido, si consideramos el tiempo absoluto de inicio (más arriba hay ejemplos, los comandos se ejecutan en promedio en tres segundos). Y los resultados de la prueba rápida de CPU y RAM muestran resultados prácticamente idénticos, lo cual es alentador, especialmente dado que el aislamiento se logra con un mecanismo tan bien probado como kvm.
Anuncio
El artículo es un resumen, pero permite explorar un runtime alternativo. No se cubren muchas áreas de aplicación, por ejemplo, en el sitio se describe la posibilidad de ejecutar Kubernetes sobre Kata Containers. También se pueden realizar varias pruebas orientadas a la búsqueda de problemas de seguridad, establecer restricciones y otros aspectos interesantes.
Pido a todos los que han leído o saltado aquí que participen en la encuesta, de la que dependerán las futuras publicaciones sobre este tema.
Solo los usuarios registrados pueden participar en la encuesta. , por favor.
¿Deberíamos seguir publicando artículos sobre Kata Containers?
80,0%¡Sí, escribe más!28
20,0%No, no es necesario…7
Votaron 35 usuarios. Se abstuvieron 7 usuarios.
Fuente: habr.com
