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, llamadas contenedores, servidores privados virtuales (VPS) o entornos virtuales (VEs). OpenVZ es similar a Solaris Containers y LXC .
Desarrollador (es) | Virtuozzo y la comunidad OpenVZ |
---|---|
Versión inicial | 2005 |
Repositorio | |
Escrito en | C |
Sistema operativo | Linux |
Plataforma | x86 , x86-64 |
Disponible en | inglés |
Tipo | Virtualización a nivel de sistema operativo |
Licencia | GPLv2 |
Sitio web | openvz |
OpenVZ en comparación con otras tecnologías de virtualización
Si bien las tecnologías de virtualización como VMware , Xen y KVM brindan virtualización completa y pueden ejecutar múltiples sistemas operativos y diferentes versiones de kernel, OpenVZ usa un solo kernel de Linux y, por lo tanto, solo puede ejecutar Linux. Todos los contenedores OpenVZ comparten la misma arquitectura y versión de kernel. Esto puede ser una desventaja en situaciones en las que los invitados requieren versiones de kernel diferentes a las del host. Sin embargo, como no tiene la sobrecarga de un verdadero hipervisor , es muy rápido y eficiente. [1]
La asignación de memoria con OpenVZ es suave en el sentido de que la memoria que no se usa en un entorno virtual puede ser usada por otros o para el almacenamiento en caché del disco . Si bien las versiones anteriores de OpenVZ usaban un sistema de archivos común (donde cada entorno virtual es solo un directorio de archivos que se aísla mediante chroot ), las versiones actuales de OpenVZ permiten que cada contenedor tenga su propio sistema de archivos. [2]
Núcleo
El kernel de OpenVZ es un kernel de Linux , modificado para agregar soporte para contenedores OpenVZ. El kernel modificado proporciona virtualización, aislamiento, administración de recursos y puntos de control . A partir de vzctl 4.0, OpenVZ puede funcionar con kernels Linux 3.x sin parches, con un conjunto de funciones 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 el suyo:
- Archivos
- Bibliotecas del sistema , aplicaciones , cerraduras virtualizadas
/proc
y/sys
virtualizadas , etc.
- Usuarios y grupos
- Cada contenedor tiene su propio usuario raíz , así como otros usuarios y grupos .
- Árbol de proceso
- Un contenedor solo ve sus propios procesos (a partir de init ). Los PID están virtualizados, por lo que el PID de inicio es 1 como debería ser.
- La red
- Dispositivo de red virtual , que permite que un contenedor tenga sus propias direcciones IP , así como un conjunto de netfilter (
iptables
) y reglas de enrutamiento .
- Dispositivos
- Si es necesario, cualquier contenedor puede tener acceso a dispositivos reales como interfaces de red , puertos serie , particiones de disco , etc.
- Objetos IPC
- Memoria compartida , semáforos , mensajes .
Administracion de recursos
La administración de recursos de OpenVZ consta de cuatro componentes: cuota de disco de dos niveles, programador de CPU justo, programador de E / S de disco y contadores de beans de usuario (ver más abajo). Estos recursos se pueden cambiar durante el tiempo de ejecución del contenedor , lo que elimina la necesidad de reiniciar .
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 una cantidad de archivos). Dentro del contenedor, es posible utilizar herramientas estándar para establecer cuotas de disco por usuario y por grupo de UNIX .
Programador de CPU
El programador de CPU en OpenVZ es una implementación de dos niveles de la estrategia de programación de reparto justo .
En el primer nivel, el programador decide a qué contenedor le dará el segmento de tiempo de la CPU, según los valores de cpuunits por contenedor . En el segundo nivel, el programador 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 la CPU se distribuirá proporcionalmente a estos valores.
Además de lo anterior, OpenVZ proporciona [4] 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
); - vincular un contenedor a un conjunto específico de CPU (
--cpumask
).
Planificador de E / S
Similar al planificador de la CPU se ha descrito anteriormente, I / O planificador en OpenVZ es también de dos niveles, utilizando Jens Axboe 's CFQ planificador de E / S 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 de acuerdo con las prioridades asignadas. Por tanto, ningún contenedor puede saturar un canal de E / S.
Beancounters de usuario
User Beancounters es un conjunto de contadores, límites y garantías por contenedor, destinado a evitar que un solo contenedor monopolice los recursos del sistema. En los kernels OpenVZ actuales (042stab * basado en RHEL6) hay dos parámetros principales ( ram y swap , también conocidos como physpages y swappages ), y otros son opcionales. [5]
Otros recursos son principalmente memoria y varios objetos en el kernel, como segmentos de memoria compartida de comunicación entre procesos y búferes de red. Cada recurso se puede ver en / proc / user_beancounters y tiene cinco valores asociados: uso actual, uso máximo (durante la vida útil de un contenedor), barrera, límite y contador de fallas. El significado de barrera y límite depende del parámetro; en resumen, se puede pensar en ellos como un límite suave y un límite estricto. Si algún recurso alcanza el límite, el contador de fallos aumenta. Esto permite al propietario detectar problemas al monitorear / proc / user_beancounters en el contenedor.
Puntos de control y migración en vivo
A mediados de abril de 2006 se lanzó una función de migración en vivo y puntos de control para OpenVZ. Esto hace posible mover un contenedor de un servidor físico a otro sin cerrar el contenedor. El proceso se conoce como punto de control: un contenedor se congela y todo su estado se guarda en un archivo en el disco. Este archivo se puede transferir a otra máquina y un contenedor se puede descongelar (restaurar) allí; el retraso es de unos pocos segundos. Debido a que el estado generalmente se conserva por completo, esta pausa puede parecer un retraso computacional ordinario.
Limitaciones
De forma predeterminada, OpenVZ restringe el acceso al contenedor a dispositivos físicos reales (lo que hace que un contenedor sea independiente del hardware). Un administrador de OpenVZ puede permitir el acceso del contenedor a varios dispositivos reales, como unidades de disco, puertos USB, [6] dispositivos PCI [7] o tarjetas de red físicas. [8]
/ dev / loopN a menudo está restringido en implementaciones (ya que los dispositivos de bucle usan subprocesos del kernel que pueden ser un problema de seguridad), lo que restringe la capacidad de montar imágenes de disco. Una solución alternativa es utilizar FUSE .
OpenVZ se limita a proporcionar solo algunas tecnologías VPN basadas en PPP (como PPTP / L2TP) y TUN / TAP. IPsec es compatible con contenedores desde el kernel 2.6.32.
En 2007 se intentó una interfaz gráfica de usuario llamada EasyVZ, [9] pero no avanzó más allá 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 .
Ver también
- Comparación de software de virtualización de plataformas
- Virtualización a nivel de sistema operativo
- Entorno virtual Proxmox
Referencias
- ^ http://www.hpl.hp.com/techreports/2007/HPL-2007-59R1.html?jumpid=reg_R1002_USEN
- ^ http://wiki.openvz.org/Ploop
- ^ 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 de manual de vzctl (8), sección de parámetros del programador justo de CPU, http://openvz.org/Man/vzctl.8#CPU_fair_scheduler_parameters
- ^ http://openvz.org/VSwap
- ^ Página de manual de vzctl (8), subsección de administración de acceso al dispositivo, http://wiki.openvz.org/Man/vzctl.8#Device_access_management
- ^ Página de manual de vzctl (8), sección de administración de dispositivos PCI, http://wiki.openvz.org/Man/vzctl.8#PCI_device_management
- ^ página de manual de vzctl (8), sección de dispositivos de red, http://wiki.openvz.org/Man/vzctl.8#Network_devices_control_parameters
- ^ EasyVZ: Grafische Verwaltung für OpenVZ. Frontend für freie Linux-Virtualisierung
enlaces externos
- Página web oficial