¿Qué es OpenVZ?
OpenVZ es una herramienta de virtualización de sistema operativo basada en software que permite la implementación, administración y modificación de entornos Linux virtuales aislados desde una distribución host de Linux. Una amplia gama de plantillas de SO preconstruidas en una variedad de distribuciones de Linux permite a los usuarios descargar e implementar rápidamente entornos virtuales con facilidad.
Antes de comenzar
-
Trabajar con este tutorial requiere una cuenta de usuario raíz y está escrito como si los comandos se emitieran como usuario raíz. Los lectores que elijan usar una cuenta de usuario limitada deberán anteponer los comandos con sudo
donde sea requerido. Si todavía tiene que crear una cuenta de usuario limitada, siga los pasos de la guía Configuración y protección de una instancia informática.
-
Las instrucciones de esta guía se escribieron y probaron solo en Debian 9. Es poco probable que funcionen para otras distribuciones de Debian o Ubuntu.
-
Se requieren ciertas modificaciones esenciales en su sistema Debian 9 para ejecutar OpenVZ, incluida la eliminación y el reemplazo de Systemd con SystemV, y el uso de un kernel de Linux personalizado. Antes de continuar, asegúrese de que todo el software actualmente instalado en la máquina sea compatible con estos cambios.
Nota Aunque no es obligatorio, se recomienda crear una partición de sistema de archivos Ext4 independiente para las plantillas de OpenVZ. De forma predeterminada, tanto el instalador de Debian 9 como el Linode Manager formatean las particiones recién creadas con Ext4. Para obtener información sobre cómo realizar esta configuración, siga los pasos para crear un disco en la guía Administrar discos y almacenamiento en un Linode.
Opcional:Cree una partición separada para plantillas OpenVZ
Si tiene la intención de dedicar un Linode VPS completo a ejecutar OpenVZ y ningún otro servicio, se recomienda crear particiones separadas para el servidor host y sus procesos, y cualquier plantilla de servidor virtual OpenVZ. La siguiente tabla ilustra el esquema de partición recomendado:
Partición | Descripción | Tamaño típico |
| Partición raíz | 4-12 GB |
intercambiar | Partición de paginación | 2 veces RAM o RAM + 2 GB (según el espacio disponible en el disco duro) |
/vz | Partición para alojar plantillas OpenVZ | Todo el espacio restante en el disco duro |
-
Inicie sesión en su Linode Manager y seleccione su Linode. Apague la máquina y verifique que el trabajo se completó viendo la Cola de trabajos del host sección. Debajo de los Discos pestaña, haga clic en Crear un nuevo disco . Agregue una etiqueta de su elección, seleccione "ext4" en el Tipo menú desplegable y asigne todo el espacio que pueda en Tamaño campo. Haga clic en Guardar cambios; una configuración óptima se parecerá a la imagen de abajo.
-
En el Panel de control pestaña, haga clic en su perfil de configuración principal. En Bloquear asignación de dispositivo pestaña, asigne su nueva partición a un dispositivo abierto. Haga clic en Guardar cambios cuando haya terminado.
-
Inicie el Linode e inicie sesión a través de SSH. Ejecute el siguiente comando para verificar que el nuevo disco se haya creado correctamente. La salida mostrará su disco recién creado.
fdisk -l
-
Cree un punto de montaje para el nuevo dispositivo:
mkdir /vztemp
-
Monte el nuevo disco. Asegúrese de reemplazar /dev/sdc con el nombre de su dispositivo:
mount /dev/sdc /vztemp
Antes de poder instalar OpenVZ, el sistema debe configurarse para compatibilidad. Debian 9 admite una nueva función de suma de comprobación que es incompatible con los núcleos OpenVZ personalizados. Según sus preferencias, puede optar por eliminar metadata_csum de una partición montada o volver a formatear la partición afectada a un volumen Ext4 compatible. Elija cualquiera de los métodos y siga las instrucciones en la sección correspondiente a continuación.
-
Muestra las particiones de disco disponibles.
lsblk
-
Compruebe si "metadata_csum" está instalado en cualquier partición de disco montada que se muestra en el Paso 1 (sin incluir la partición SWAP). Siga el formato a continuación para cada partición, reemplazando /dev/sda1
con el nombre de volumen apropiado. Si el siguiente comando no genera ningún resultado para los volúmenes de disco montados, puede omitir esta sección.
dumpe2fs -h /dev/sda1 2>/dev/null | grep -e metadata_csum
-
Ejecute los siguientes comandos para agregar código a fsck
archivo:
echo "copy_exec /sbin/e2fsck" | sudo tee -a /usr/share/initramfs-tools/hooks/fsck
echo "copy_exec /sbin/tune2fs" | sudo tee -a /usr/share/initramfs-tools/hooks/fsck
-
Cree un nuevo archivo en el directorio designado a continuación y asígnele el nombre tune . Copie y pegue el texto a continuación en este nuevo archivo y guárdelo:
- Archivo:/ etc/initramfs-tools/scripts/local-premount/tune
1
2
3
4
5
6
7
8
9
| #!/bin/sh
if [ "$readonly" != "y" ] ;
then exit 0 ;
fi
e2fsck -f $Volume
tune2fs -O -metadata_csum $Volume
e2fsck -f $Volume |
-
Actualice las propiedades del archivo y la imagen initramfs existente para cargar el tune guión:
chmod 755 /etc/initramfs-tools/scripts/local-premount/tune
update-initramfs -u -k all
-
Reinicie su sistema y ejecute el siguiente comando para verificar que metadata_csum se deshabilitó de todas las particiones afectadas. Nuevamente, reemplace "/dev/sda1" con los nombres de volumen correctos.
dumpe2fs -h /dev/sda1 2>/dev/null | grep -e metadata_csum
-
Elija el volumen Ext4 que le gustaría formatear y emita el siguiente comando, reemplazando /dev/sda3
con el volumen seleccionado. Una salida de "0" indica éxito.
Precaución Formatear un volumen con mkfs
el comando puede provocar la pérdida de datos.
mkfs -t ext4 -O -metadata_csum /dev/sda3
Reemplazar Systemd con SystemV
-
Instale las utilidades de SystemV.
apt install sysvinit-core sysvinit-utils
-
Desde Linode Manager, reinicie su máquina para liberar Systemd.
-
Quite Systemd de su máquina:
apt --auto-remove remove systemd
-
Crear archivo avoid-systemd
y pega el contenido a continuación:
- Archivo:/ etc/apt/preferences.d/evitar-systemd
1
2
3
| Package: *systemd*
Pin: release *
Pin-Priority: -1 |
Agregar repositorio OpenVZ
-
Cree un nuevo archivo fuente de repositorio y pegue el contenido a continuación:
- Archivo:/ etc/apt/sources.list.d/openvz.list
deb http://download.openvz.org/debian jessie main
deb http://download.openvz.org/debian wheezy main
-
Agregue la clave del repositorio a su sistema:
wget -qO - http://ftp.openvz.org/debian/archive.key | sudo apt-key add -
-
A partir de la fecha de publicación de esta guía, la clave del repositorio de OpenVZ no es válida y se emite la apt update
El comando generará una advertencia del sistema. El comando debería tener éxito. Si no es así, actualice el sistema con el siguiente argumento:
apt --allow-unauthenticated update
Instalar paquetes OpenVZ
-
Instale OpenVZ con los paquetes necesarios.
KPackage="linux-image-openvz-$(dpkg --print-architecture)"
sudo apt --allow-unauthenticated --install-recommends install $KPackage vzdump ploop initramfs-tools dirmngr
-
La instalación debería crear un nuevo directorio, /vz
. Si este directorio no existe después de la instalación, cree un enlace simbólico usando el siguiente comando:
ln -s /var/lib/vz/ /vz
-
Crear archivo vznet.conf
y pegue en la línea de abajo:
- Archivo:/ etc/vz/vznet.conf
1
| EXTERNAL_SCRIPT="/usr/sbin/vznetaddbr" |
-
Este paso es opcional y hará que las instancias virtuales de OpenVZ se detengan cuando se detenga el servicio de OpenVZ. Si desea este comportamiento, emita el siguiente comando.
echo 'VE_STOP_MODE=stop' | sudo tee -a /etc/vz/vznet.conf
Iniciar en el kernel OpenVZ
El sistema debe estar configurado para iniciar el kernel OpenVZ cada vez que se reinicia el servidor.
-
Abra el grub.cfg
archivo en less
, o su editor de texto preferido:
less /boot/grub/grub.cfg
-
Dentro de grub.cfg
archivo, busque una sección similar a la siguiente:
- Archivo:/ arranque/grub/grub.cfg
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
| . . .
menuentry 'Debian GNU/Linux' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-e025e52b-91c4-4f64-962d-79f244caa92a' {
gfxmode $linux_gfx_mode
insmod gzio
if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
insmod ext2
set root='hd0'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd0 --hint-efi=hd0 --hint-baremetal=ahci0 e025e52b-91c4-4f64-962d-79f244caa92a
else
search --no-floppy --fs-uuid --set=root e025e52b-91c4-4f64-962d-79f244caa92a
fi
echo 'Loading Linux 4.9.0-3-amd64 ...'
linux /boot/vmlinuz-4.9.0-3-amd64 root=/dev/sda ro console=ttyS0,19200n8 net.ifnames=0
echo 'Loading initial ramdisk ...'
initrd /boot/initrd.img-4.9.0-3-amd64
}
submenu 'Advanced options for Debian GNU/Linux' $menuentry_id_option 'gnulinux-advanced-e025e52b-91c4-4f64-962d-79f244caa92a'
. . . |
Copy the text entry preceeding `submenu`, in this example the text would be: **Advanced options for Debian GNU/Linux**.
-
Dentro de grub.cfg
archivo debajo de la línea "submenú", verá varias secciones de "entrada de menú" con sangría. Estos representan los núcleos disponibles. A partir de estos, debe ubicar la entrada del menú del kernel de OpenVZ recién instalada. Debería verse similar al contenido a continuación. Tenga en cuenta que algunos serán núcleos de recuperación y deben ignorarse:
- Archivo:/ arranque/grub/grub.cfg
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| . . .
menuentry 'Debian GNU/Linux, with Linux 2.6.32-openvz-042stab123.9-amd64' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-2.6.32-openvz-042stab123.9-amd64-advanced-e025e52b-91c4-4f64-962d-79f244caa92a' {
gfxmode $linux_gfx_mode
insmod gzio
if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
insmod ext2
set root='hd0'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd0 --hint-efi=hd0 --hint-baremetal=ahci0 e025e52b-91c4-4f64-962d-79f244caa92a
else
search --no-floppy --fs-uuid --set=root e025e52b-91c4-4f64-962d-79f244caa92a
fi
echo 'Loading Linux 2.6.32-openvz-042stab123.9-amd64 ...'
linux /boot/vmlinuz-2.6.32-openvz-042stab123.9-amd64 root=/dev/sda ro console=ttyS0,19200n8 net.ifnames=0
echo 'Loading initial ramdisk ...'
initrd /boot/initrd.img-2.6.32-openvz-042stab123.9-amd64
}
. . . |
Again, write down the text directly after "menuentry" in single quotes. Here, the text to copy is **Debian GNU/Linux, with Linux 2.6.32-openvz-042stab123.9-amd64**.
-
Cierre grub.cfg archivo y abra /etc/default/grub en su editor de texto preferido. Localice la línea que comienza con GRUB_DEFAULT=
. Elimine el valor predeterminado para este parámetro e ingrese el texto que copió en los pasos anteriores, siguiendo el formato a continuación. Con el ejemplo anterior, el valor sería el siguiente:
GRUB_DEFAULT="Advanced options for Debian GNU/Linux>Debian GNU/Linux, with Linux 2.6.32-openvz-042stab123.9-amd64"
Tenga en cuenta que ambas cadenas copiadas están separadas con el carácter de zanahoria ">".
-
Guarde y cierre el grub y emita el siguiente comando para recargar el cargador de arranque grub con el nuevo valor del kernel:
update-grub
-
De forma predeterminada, la carga del kernel no la maneja Grub, sino Linode Manager. Inicie sesión en su Linode Manager y seleccione su Linode. Haga clic en su perfil de configuración. En la sección "Configuración de arranque", seleccione "GRUB 2" en la lista desplegable del Kernel (vea la imagen a continuación). Guarde sus cambios y salga.
-
Reinicie su servidor y emita el siguiente comando para verificar que se cargó el kernel de OpenVZ:
uname -r
Si no se cargó el kernel de OpenVZ, lo más probable es que sea el grub archivo que está mal configurado. Verifique y asegúrese de que se haya elegido e ingresado correctamente el núcleo correcto.
Descargar e implementar una plantilla de sistema operativo
-
Inicie el servicio OpenVZ:
service vz start
service vz status
-
Regístrese en el repositorio de plantillas oficial de OpenVZ:
sudo gpg --recv-keys $(echo $(sudo gpg --batch --search-keys [email protected] 2>&1 | grep -ie ' key.*created' | sed -e 's|key|@|g' | cut -f 2 -d '@') | cut -f 1 -d ' ' | cut -f 1 -d ',')
-
Edite /etc/vz/vz.conf
y cambie la siguiente línea para usar simfs
en lugar de ploop
:
- Archivo:/ etc/vz/vz.conf
1
| VE_LAYOUT=simfs |
-
Lista de plantillas de SO disponibles para descargar:
vztmpl-dl --list-remote
-
De la lista de plantillas disponibles, seleccione una para descargar. Usando el formato a continuación, emita el siguiente comando, reemplazando centos7-x86_64 con la plantilla que seleccionó:
vztmpl-dl --gpg-check centos7-x86_64
-
OpenVZ se refiere a cada plantilla de SO instalada como un "Contenedor". Debe crear un ID de contenedor (CTID) para cada plantilla descargada. Ejecute el siguiente comando, reemplazando [CTID] con cualquier número (se recomienda 101) y el nombre de la plantilla de CentOS 7 con su plantilla descargada.
vzctl create [CTID] --ostemplate centos7-x86_64
-
Si configura una partición de disco separada para las plantillas de OpenVZ, use el siguiente comando para crear el contenedor dentro del nuevo disco. Reemplazar –ostemplate con el nombre de su plantilla y –name con un nombre descriptivo de su elección:
vzctl create [CTID] --ostemplate debian-8.0-x86_64 --layout simfs --name centos7 --private /vztemp/vz/private/$VEID --root /vztemp/vz/root/$VEID --config basic
-
Ahora se habrá creado un archivo de configuración para su plantilla de sistema operativo. La ubicación de este archivo se especifica como parte de la salida del comando anterior. Abra este archivo ahora para realizar los siguientes cambios a continuación. El archivo de configuración se nombrará en formato [CTID].conf.
- Dé a su entorno virtual una dirección IP. El formato recomendado es 192.168.0.[CTID]. En este caso sería 192.168.0.101.
- Proporcione un servidor de nombres. El servidor de nombres de Google (8.8.8.8) debería ser suficiente.
- Si tiene problemas para iniciar su entorno virtual, puede intentar cambiar VE_LAYOUT volver a
ploop
de simfs
.
También puede configurar otras opciones a su discreción, como SWAP y asignación de RAM. Guarde y cierre cuando termine.
- Archivo:/ etc/vz/conf/101.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
| . . .
# RAM
PHYSPAGES="0:256M"
# Swap
SWAPPAGES="0:512M"
# Disk quota parameters (in form of softlimit:hardlimit)
DISKSPACE="2G:2.2G"
DISKINODES="131072:144179"
QUOTATIME="0"
# CPU fair scheduler parameter
CPUUNITS="1000"
NETFILTER="stateless"
VE_ROOT="/var/lib/vz/root/$VEID"
VE_PRIVATE="/var/lib/vz/private/$VEID"
VE_LAYOUT="simfs"
OSTEMPLATE="centos7-x86_64"
ORIGIN_SAMPLE="vswap-256m"
NAMESERVER="8.8.8.8"
IP_ADDRESS="192.168.0.101/24"
HOSTNAME="centos-7" |
-
Arranque en su contenedor recién creado usando los comandos a continuación. Reemplace [CTID] con el número CTID de su contenedor. Para salir de cualquier sesión de contenedor mientras deja el entorno virtual en ejecución, escriba exit
en la línea de comando.
vzctl start [CTID]
vzctl enter [CTID]
Los contenedores no tienen forma de acceder a Internet o ser accedidos desde Internet. El servidor host debe estar configurado para transmitir solicitudes hacia y desde cada entorno virtual instalado.
Configurar acceso desde contenedor a Internet
Nota Es posible que deba iniciar sesión como root con su -
para ejecutar los comandos iptables-save en esta sección.
-
En el servidor host, emita el siguiente comando usando Iptables. Reemplace los corchetes y el contenido con la información adecuada. Para la dirección IP del contenedor, asegúrese de incluirla en notación CIDR. Incluya la dirección IP y la subred, o xxx.xxx.xxx.xxx/xx
, para abarcar un rango de direcciones IP que permitirán el acceso a cualquier contenedor agregado en el futuro. Por ejemplo, ingresar 192.168.0.0/24 configurará el enrutamiento para las direcciones IP 192.168.0.0 a 192.168.0.255:
iptables -t nat -A POSTROUTING -s [container IP] -o eth0 -j SNAT --to [host server IP]
-
Si tiene iptables-persistent
instalado, omita este paso. Guarde las nuevas reglas de Iptables:
iptables-save > /etc/iptables.conf
-
Configure su firewall para permitir solicitudes reenviadas. Si no está utilizando iptables-persistent
guarda la regla:
iptables -A FORWARD -s 192.168.0.0/24 -j ACCEPT
iptables-save > /etc/iptables.conf
-
Ahora debería tener acceso a Internet desde el entorno de su contenedor. Intente actualizar paquetes desde su contenedor para verificar la conexión.
-
Si necesita acceder a un servicio específico en su contenedor desde Internet, deberá reservar un puerto en la máquina host y enrutar el acceso a través de él. Ejecute el siguiente comando, reemplazando cualquier valor entre paréntesis con la información adecuada:
iptables -t nat -A PREROUTING -p tcp -d [host_ip] --dport [host_port_number] -i eth0 -j DNAT --to-destination [container_ip:container_port_number]
-
Guarde su nueva regla. Omita este paso si tiene iptables-persistent
instalado:
iptables-save > /etc/iptables.conf
Dónde ir desde aquí
Después de instalar OpenVZ, descargar una plantilla, crear un contenedor y configurar el acceso a Internet, su entorno virtual funcionará exactamente como cualquier entorno Linux normal:requiere actualizaciones periódicas, configuración de seguridad, etc. La mayoría de las configuraciones se pueden realizar desde el servidor host a través de los comandos de OpenVZ. .
Consulte el enlace "Operaciones básicas de OpenVZ" en los Recursos externos sección para familiarizarse con los comandos básicos de administración. También se pueden descargar plantillas adicionales creadas por el usuario, que no están incluidas en la lista de plantillas principal. Puede encontrarlos siguiendo el enlace "Plantillas aportadas por usuarios de OpenVZ".
Es posible que desee consultar los siguientes recursos para obtener información adicional sobre este tema. Si bien estos se proporcionan con la esperanza de que sean útiles, tenga en cuenta que no podemos garantizar la precisión o la puntualidad de los materiales alojados externamente.
- Operaciones básicas de OpenVZ
- Plantillas aportadas por usuarios de OpenVZ