OpenVZ ( Open Virtuozzo ) es una tecnología de virtualización a nivel de sistema operativo para Linux . Permite que un servidor físico ejecute múltiples instancias aisladas del sistema operativo, y admite la contenerización , servidores virtuales privados (VPS) y entornos virtuales (VE). OpenVZ es similar a Solaris Containers y LXC .
OpenVZ en comparación con otras tecnologías de virtualización.
Si bien las tecnologías de virtualización como VMware , Xen y KVM ofrecen virtualización completa y pueden ejecutar múltiples sistemas operativos y diferentes versiones del kernel, OpenVZ utiliza un único kernel de Linux y, por lo tanto, solo puede ejecutar Linux. Todos los contenedores OpenVZ comparten la misma arquitectura y versión del kernel. Esto puede ser una desventaja en situaciones donde los invitados requieren versiones del kernel diferentes a las del host. Sin embargo, al no tener la sobrecarga de un hipervisor real , es muy rápido y eficiente. [ 1 ]
La asignación de memoria con OpenVZ es flexible, lo que significa que la memoria no utilizada en un entorno virtual puede ser utilizada por otros o para el almacenamiento en caché de disco . Mientras que las versiones antiguas de OpenVZ utilizaban un sistema de archivos común (donde cada entorno virtual era simplemente un directorio de archivos aislado mediante chroot ), las versiones actuales de OpenVZ permiten que cada contenedor tenga su propio sistema de archivos. [ 2 ]
Núcleo
El kernel OpenVZ es un kernel de Linux modificado para añadir soporte para contenedores OpenVZ. El kernel modificado proporciona virtualización, aislamiento, gestión de recursos y puntos de control . A partir de vzctl 4.0, OpenVZ puede funcionar con kernels de Linux 3.x sin parchear, aunque con un conjunto de características reducido. [ 3 ]
Virtualización y aislamiento
Cada contenedor es una entidad separada y se comporta en gran medida como lo haría un servidor físico. Cada uno tiene sus propias:
- Archivos
- Bibliotecas del sistema , aplicaciones , virtualizadas
/procy , bloqueos/sysvirtualizados , etc. - Usuarios y grupos
- Cada contenedor tiene su propio usuario raíz , así como otros usuarios y grupos .
- Árbol de procesos
- Un contenedor solo ve sus propios procesos (empezando por
init). Los PID se virtualizan, de modo que el PID de inicialización es 1, como debería ser. - Red
- Dispositivo de red virtual , que permite que un contenedor tenga sus propias direcciones IP , así como un conjunto de reglas de enrutamiento y de filtro de red (
iptables) . - Dispositivos
- Si es necesario, se puede otorgar a cualquier contenedor acceso a dispositivos reales como interfaces de red , puertos serie , particiones de disco , etc.
- Objetos IPC
- Memoria compartida , semáforos , mensajes .
Gestión de recursos
La gestión de recursos de OpenVZ consta de cuatro componentes: cuota de disco de dos niveles, planificador de CPU equitativo, planificador de E/S de disco y contadores de beans de usuario (véase más abajo). Estos recursos se pueden modificar durante la ejecución del contenedor , lo que elimina la necesidad de reiniciarlo .
- Cuota de disco de dos niveles
- Cada contenedor puede tener sus propias cuotas de disco , medidas en términos de bloques de disco e inodos (aproximadamente el número de archivos). Dentro del contenedor, es posible utilizar herramientas estándar para establecer cuotas de disco UNIX por usuario y por grupo .
- Planificador de CPU
- El planificador de CPU en OpenVZ es una implementación de dos niveles de la estrategia de planificación de reparto equitativo. En el primer nivel, el planificador decide a qué contenedor asignará la porción de tiempo de CPU, basándose en los valores de cpuunits por contenedor . En el segundo nivel, el planificador estándar de Linux decide qué proceso ejecutar en ese contenedor, utilizando las prioridades de proceso estándar de Linux. Es posible establecer diferentes valores para las CPU en cada contenedor. El tiempo real de CPU se distribuirá proporcionalmente a estos valores. Además, OpenVZ proporciona formas de establecer límites estrictos de CPU, como el 10 % del tiempo total de CPU (
--cpulimit), limitar el número de núcleos de CPU disponibles para el contenedor (--cpus) y vincular un contenedor a un conjunto específico de CPU (--cpumask). [ 4 ] - Planificador de E/S
- De forma similar al planificador de CPU descrito anteriormente, el planificador de E/S en OpenVZ también es de dos niveles, utilizando el planificador de E/S CFQ de Jens Axboe en su segundo nivel. A cada contenedor se le asigna una prioridad de E/S, y el planificador distribuye el ancho de banda de E/S disponible según las prioridades asignadas. De esta manera, ningún contenedor puede saturar un canal de E/S.
- Contadores de frijoles de usuario
- User Beancounters es un conjunto de contadores, límites y garantías por contenedor, diseñados para evitar que un solo contenedor monopolice los recursos del sistema. En los kernels OpenVZ actuales (basados en RHEL6, 042stab*) hay dos parámetros principales, y otros son opcionales. [ 5 ] Otros recursos son principalmente memoria y varios objetos dentro del kernel, como segmentos de memoria compartida para la comunicación entre procesos y búferes de red. Cada recurso se puede ver desde
/proc/user_beancountersy tiene cinco valores asociados: uso actual, uso máximo (durante la vida útil de un contenedor), barrera, límite y contador de fallos. El significado de barrera y límite depende del parámetro; en resumen, se pueden considerar como un límite flexible y un límite estricto. Si algún recurso alcanza el límite, el contador de fallos para ese recurso aumenta. Esto permite al propietario detectar problemas monitorizando /proc/user_beancounters en el contenedor.
Puntos de control y migración en vivo
A mediados de abril de 2006, se lanzó para OpenVZ una función de migración en vivo y creación de puntos de control. Esto permite mover un contenedor de un servidor físico a otro sin apagarlo. El proceso se conoce como creación de puntos de control: un contenedor se congela y su estado completo se guarda en un archivo en el disco. Este archivo se puede transferir a otra máquina y allí se puede descongelar (restaurar) el contenedor; la demora es de aproximadamente unos segundos. Dado que el estado generalmente se conserva por completo, esta pausa puede parecer una demora computacional normal. El proyecto es de código abierto: CRIU.
Limitaciones
Por defecto, OpenVZ restringe el acceso de los contenedores a dispositivos físicos reales (lo que hace que un contenedor sea independiente del hardware). Un administrador de OpenVZ puede habilitar el acceso de los contenedores a diversos dispositivos reales, como unidades de disco, puertos USB, [ 6 ] dispositivos PCI [ 7 ] o tarjetas de red físicas. [ 8 ]
/dev/loopNA menudo está restringido en las implementaciones (ya que los dispositivos de bucle usan subprocesos del kernel, lo que podría ser un problema de seguridad), lo que restringe la capacidad de montar imágenes de disco. Una solución alternativa es usar FUSE .
OpenVZ se limita a proporcionar solo algunas tecnologías VPN basadas en PPP (como PPTP/L2TP) y TUN/TAP. IPsec es compatible dentro de los contenedores desde el kernel 2.6.32.
En 2007 se intentó crear una interfaz gráfica de usuario llamada EasyVZ, [ 9 ] pero no pasó de la versión 0.1. Hasta la versión 3.4, Proxmox VE podía utilizarse como un entorno de virtualización de servidor basado en OpenVZ con una GUI, aunque las versiones posteriores cambiaron a LXC .
Véase también
- Comparación de software de virtualización de plataformas
- Virtualización a nivel de sistema operativo
- Entorno virtual Proxmox
Referencias
- ^ "Evaluación del rendimiento de las tecnologías de virtualización para la consolidación de servidores" . Archivado del original el 15 de enero de 2009.
- ^ "Ploop - Wiki de contenedores Linux OpenVZ" . Archivado del original el 26 de marzo de 2012.
- ^ Kolyshkin, Kir (6 de octubre de 2012). "OpenVZ cumple 7 años, ¡hay regalos disponibles!" . Blog de OpenVZ . Consultado el 17 de enero de 2013 .
- ^ Página man de vzctl(8), sección de parámetros del planificador equitativo de CPU, http://openvz.org/Man/vzctl.8#CPU_fair_scheduler_parameters Archivado el 14/04/2017 en Wayback Machine
- ^ "VSwap - Wiki de contenedores Linux OpenVZ" . Archivado del original el 13 de febrero de 2013.
- ^ Página man de vzctl(8), subsección de administración de acceso a dispositivos, http://wiki.openvz.org/Man/vzctl.8#Device_access_management
- ^ Página man de vzctl(8), sección de administración de dispositivos PCI, http://wiki.openvz.org/Man/vzctl.8#PCI_device_management
- ^ Página man de vzctl(8), sección Dispositivos de red, http://wiki.openvz.org/Man/vzctl.8#Network_devices_control_parameters
- ^ EasyVZ: Verwaltung gráfico para OpenVZ. Frontend para virtualización gratuita de Linux
Enlaces externos
- Software libre programado en C
- Software de virtualización gratuito
- Contenedores Linux
- Seguridad del sistema operativo
- Software de virtualización para Linux