Administrando un servidor OpenVZ (III)

Hola a todos de nuevo. Hoy continuaremos con esta serie artículos sobre la administración de OpenVZ. En el anterior post cubrimos todo lo referente a la instalación de OpenVZ.

Por lo tanto, si todo ha salido bien, ya deberíamos tener nuestro servidor OpenVZ instalado y listo para empezar a trabajar con él.

Hoy hablaremos de todo lo relacionado con la administración de los contenedores, tanto de su creación como de su configuración y manejo.

Creación de los contenedores

Los contenedores o VEs son lon entornos virtuales (máquinas virtuales) que crearemos y administraremos con nuestro servidor OpenVZ. Para poder crearlos necesitamos disponer de un template.

Los templates son el modelo a partir del cual se construirá el contenedor. Contienen los distintos paquetes necesarios para el funcionamiento del sistema y algunas aplicaciones básicas, así como todos los metadatos (template cache) para construir y configurar la máquina.

Existen templates de distintas distribuciones de Linux. Algunos de ellos son mantenidos oficialmente y otros son aportes de la comunidad.

La forma más simple de obtenerlos es usar uno de los templates precreados. Estos se han obtenido creando un contenedor a partir de un template y luego empaquetándolo en un archivo gzip.

Esos archivos comprimidos serán los que descargaremos y partir de los cual crearemos nuestros propios contenedores. De esta forma la creación de los contenedores es mucho más rápida y fácil que antiguamente, cuando la cache había de ser generada a mano. Lo único que hay que hacer hoy en día es descargar el archivo de la distribución elegida desde esta página:

http://openvz.org/Download/template/precreated

Una vez descargado, lo guardamos tal cual está en este directorio de nuestro servidor:

/vz/template/cache

Ahora ya podemos crear nuestros contenedores a partir de los templates instalados. Lo primero que hay que tener en cuenta es que cada contenedor tiene asociado un id numérico que sirve para identificar los VEs y que no puede repetirse dentro de un mismo host físico.

Además, el ID ha de ser mayor que 100, ya que los IDs de 0 al 100 son usados por el sistema.

Para administrar los contenedores, el comando más importante es vzctl. Para crear un nuevo contenedor se usa la sintaxis siguiente:

#vzctl create --ostemplate template --config config_file

En ostemplate ponemos el nombre de la template que hemos descargado antes. El parámetro config es opcional. En él se pone el nombre de un archivo con configuraciones predefinidas para los contenedores.

Si no lo especificamos, tendremos que ponerlas a mano. Los archivos de configuración se encuentran en:

/etc/sysconfig/vz-scripts

Los nombres de los archivos tienen esta estructura:

ve-nombre_config.conf-sample

El más común es el basic (ve-basic.conf-sample). Podemos usar aquellos que están creados por defecto o hacer los nuestros propios. En cualquier caso, todos los valores que se especifiquen pueden ser modificados posteriormente.

Por ejemplo, para crear un contenedor con ID 101, a partir de un template de debian que descargamos antes y usando la configuración básica, ejecutamos:

#vzctl create 101 --ostemplate debian-6.0-x86 --config basic

Configuración de los contenedores

Ahora que ya hemos creado nuestro contenedor, podemos pasar a configurarlo. Para ello usamos la siguiente sintaxis:

#vzctl set --parametro valor --parámetro valor […]

Existen multitud de parámetros que podemos configurar. Para consultarlos, todos podemos acudir al manual de vzctl (#man vzctl) o a la wiki de openvz.

Para que los cambiamos que hagamos se mantengan después de apagar el sistema hemos de añadir –save al final del comando. Si no, solo durará hasta el próximo apagado.

A continuación explicaremos algunos de los comandos más básicos:

Configura que el contenedor se inicie al arrancarse el equipo o no.
onboot [yes/no]

Especifica el hostname del equipo
hostname

Añade un dirección ip al equipo. Se añaden de forma acumulativa.
ipadd

Si queremos borrar alguna de las configuradas anteriormente hemos de usar:
ipdel dir_ip|all

Configura la dirección de los servidores DNS. Se puede usar esta opción varias veces en un mismo comando para configurar varios servidores. Al hacerlo, se sobreescribirán todos los nameserver anteriormente configurados.
nameserver

Configura la contraseña para un usuario del sistema. Si no existe, lo crea. Es recomendable no usar este parámetro junto a otros. No necesita que se use save con este parámetro.

userpasswd user:password

Indica el orden en el que se iniciará la máquina al arrancar. Cuanto mayor sea el número, mayor prioridad tendrá. Si no está configurado, se considera que tiene la menor prioridad y cualquier otro contenedor que sí esté configurado se iniciará antes.

bootorder

Finalmente, os dejo como ejemplo la ejecución de una configuración básica para el contenedor 101

#vzctl set 101 --onboot yes --hostname virtualhost --ipadd 192.168.1.10
--nameserver 8.8.8.8 --nameserver 4.4.4.4 --save
#vzctl set 101 --userpasswd root:1234

Administración de los contenedores

Una vez tenemos nuestros contenedores creados y configurados, podemos administrarlos. Para ello, de nuevo haremos uso del comandos vzctl. A continuanción se listan algunos de los comandos básicos para administrar los contenedores:

Inicia el contenedor
#vzctl start ID

Detiene el contenedor
#vzctl stop ID

Detiene el contenedor sin esperar a que todos sus procesos se detengan
#vzctl stop ID --fast

Nos dice el estado del contenedor
#vzctl status ID

Destruye el contenedor. Antes es necesario haberlo detenido.
#vzctl destroy ID

Se entra en la máquina a través de la linea de comandos como si hubiéramos accedido por ssh.
#vzctl enter ID

Ejecuta un comando dentro del contenedor.
#vzctl exec ID comando

Lista los contenedores que están activos en el servidor. Con la opción -a lista también los detenidos.
#vzlist

Esto es todo por hoy. Con esto damos por finalizado la parte más básica de la administración de OpenVZ.

En los próximos artículos hablaremos de procedimientos más avanzados, como la administración de recursos, la realización de backups o el uso de ploop.

Hasta entonces, podéis ir probando todo lo que hemos explicado hasta ahora. Como siempre, dejad cualquier duda que tengáis en los comentarios y nos vemos pronto. Larga vida y prosperidad.


17 comentarios, deja el tuyo

Deja tu comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*

*

  1. Responsable de los datos: Miguel Ángel Gatón
  2. Finalidad de los datos: Controlar el SPAM, gestión de comentarios.
  3. Legitimación: Tu consentimiento
  4. Comunicación de los datos: No se comunicarán los datos a terceros salvo por obligación legal.
  5. Almacenamiento de los datos: Base de datos alojada en Occentus Networks (UE)
  6. Derechos: En cualquier momento puedes limitar, recuperar y borrar tu información.

  1.   elav dijo

    Excelente artículo!! 😉

    1.    Kamisama666 dijo

      ¡Muchísimas gracias!. Estoy muy contento por haber podido publicar estos artículos. Seguiré esforzándome y colaborando en lo que pueda. Larga vida y prosperidad.

  2.   ocz dijo

    Interesantísimos artículos sobre OpenVZ. A ver si me animan a probarlo, que hace tiempo le tengo puesto el ojo al asunto. Aquí dejo un par de comentarios:

    Desconozco por completo el funcionamiento de OpenVZ, y una de la grandes dudas que tengo es por qué es necesario establecer la configuración de red a mano para cada máquina. ¿No puede dejarse que lo obtenga de un servidor DHCP? Es decir, ¿se le puede otorgar una MAC+bridge y que luego las máquinas se apañen solas par sacar la configuración de red? (Porque en los artículos sobre OpenVZ que he podido leer siempre se configura con IPv4, ¿pero que pasa con IPv6?)

    Es más, si tuviera que establecer estáticamente la configuración de red, que tiene de malo hacerlo desde «dentro» de la máquina? ¿Y que es eso de asignar un hostname desde el anfitrión? En definitiva, me parece algo redundante y superfluo, y me gustaría saber por qué es necesario o recomendable.

    Por cierto, no se si va a tocar el tema, pero a mi me interesaría un artículo sobre la seguridad y privacidad en el uso de OpenVZ. En VirtualBox estoy acostumbrado que no se «vean» entre ellas o con el anfitrión excepto si yo quiero vía red o carpetas compartidas. Me pregunto por ejemplo, que riesgo hay en montar un honeypot con OpenVZ. Lo comento como idea por si se quiere escribir sobre ello.

    1.    Kamisama666 dijo

      Me alegro muchísimo de que te estén gustando los post y te animo a que pruebes OpenVZ. Verás que es increíblemente fácil de administrar.

      Respecto a tus dudas, la mayoría tienen que ver con cosas que de las que no hemos hablado todavía. Pero te haré una pequeña introducción para resolverlas.

      Lo primera que tienes que saber es que en OpenVZ hay dos tipos de configuraciones para la red. Se puede usar venet o veth. La primera es similar a una red privada, es decir, solo accesible desde los contendores y el host físico. A ojos de otras máquinas de la red es como si no existieran. Por otro lado, veth es una tarjeta de red virtual que hace que el contenedor funcione como un equipo más de la red y pueda ser accedido por otras máquinas. Además permite opciones más avanzadas como el uso de DHCP o la configuración de red desde dentro del contenedor.

      Respecto a IPv6, ambos modos lo soportan. Puedes usar el comando ipadd con una direccion ipv6 sin problemas. Eso sí, con venet no funcionan todas las características. Dado que la tarjeta venet no tiene una MAC asociada, cosas como el neighbor discovery o el router advertisements no funcionan.

      Respecto a que tengas que configurar las características externamente, en mi opinion, es una forma de facilitar el trabajo de los administradores. Permite cambiar las caracteristicas fácilmente y pudiendo automatizarlo casi sin esfuerzo. Y, como menciono en el articulo, puedes crear tu propio modelo de configuración a partir del que crear las máquinas quitándote así de muchos quebraderos de cabeza.

      Por último, respecto a la seguridad, usar OpenVZ para la creación de honeypot es enormemente recomendable. OpenVZ aísla completamente los contenedores del sistema físico y parece real a ojos del atacante. Y todo eso con un consumo de recursos bajísimos. E una gran opción para construir honeypots (aunque hay opciones más simples y enfocadas específicamente para ello).

      Espero haber resuelto tus dudas. Si tienes alguna otra o algún tema que te gustaría que tratara, no dudes en decirlo. Nos vemos pronto. Larga vida y prosperidad.

  3.   Gabriel dijo

    Hola, es muy buena esta serie de post, te quería consultar lo siguiente: estoy intentando restaurar unos backups de unos containers de OpenVZ (unos archivos .tar) que se encuentran corriendo en un host con Ubuntu Server, los mismos se realizan con el siguiente comando:

    vzdump –suspend ID –mailto root –dumpdir /backups/archivo

    Este host tiene la siguiente versión: vzctl version 3.0.22
    Ahora la idea sería poder restaurar estos containers en un servidor CentOS 6. Al crear nuevas VM no tengo problemas, pero no encuentro la forma de restaurar estos backups (en el CentOS tengo la siguiente versión: vzctl version 4.7.2)

    Eh leído esto:
    https://openvz.org/Quick_Installation_CentOS_6
    http://wiki.centos.org/HowTos/Virtualization/OpenVZ
    http://www.howtoforge.com/installing-and-using-openvz-on-centos-6.4-p2
    Y por supuesto que esta seríe de post 😉 😀

    Por lo que vi la mayoría hablan de usar vzrestore, o vzdump –restore, pero no logro hacer que funcione la restauración. (en CentOS 6 no tengo vzrestore y en tampoco el flag –restore en vzdump) Seguramente se me esta escapando alguna cosa por la falta de experiencia en el tema 😛

    Aquí vienen las preguntas:
    ¿Es posible hacer lo que deseo? ¿Algún impedimento?
    ¿Cual sería la forma de hacerlo? ¿Debo instalar vzrestore de alguna forma?
    ¿Recomendación?¿Lectura?

    Gracias por tus aportes, saludos

    1.    Kamisama666 dijo

      Hola, gracias por tu comentario.

      Respecto a tus preguntas, en principio no debería haber ningún problema. De hecho, recuerdo que con esto ya me topé hace tiempo y lo solucioné en su momento. Pero ahora mismo no tengo acceso a la documentación que me hice y, como hace algún tiempo que no lo toco, no soy capaz de acordarme. Pero no desesperes, que voy a instalarme en un momento una maquina con OpenVZ y en un rato te lo soluciono. Y así de paso a lo mejor retomo esta serie de posts, que la tengo un poco abandonada.

      Larga vida y prosperidad.

      1.    Gabriel dijo

        Gracias por tu respuesta, realmente te agradecería mucho si podes verlo.
        (ademas que seguro son de mucha utilidad los nuevos post que pueden salir sobre el tema)

        Una de las cosas que me llama la atención es que en el CentOS 6.5 que instale estas son las herramientas que me instala :
        vzcalc, vzcptcheck, vzctl, vzdqdump, vzeventd, vzifup-post, vzmemcheck, vznetaddbr, vzoversell, vzquota, vzstats, vzubc, vzcfgvalidate, vzcpucheck, vzdqcheck, vzdqload, vzfsync, vzlist, vzmigrate, vznetcfg, vzpid, vzsplit, vztmpl-dl

        Al seguir los pasos de la documentación oficial: https://openvz.org/Quick_Installation_CentOS_6
        Y en los flags que veo en el man de vzdqdump no tengo un flag –restore. También veo que en el man de vzctl tengo algunos flags –snapshot* pero no se si es lo que busco o como usarlos exactement.

    2.    Kamisama666 dijo

      Bueno, tras pelearme con openvz y la insoportable levedad de su documentación, creo que por fin lo he averiguado. Evectivamente necesitas usar vzrestore, que viene junto con vzdump. Pero en CentOS no vienen instalados y hay que hacerlo a mano. El proceso es un poco enreversado (lo justo para darte de cabezazos contra el teclado) así que he improvisado un articulo en un blog mío que abrí hace poco.

      la url es : https://kamisama666.github.io/2014/07/instalacion-vzdump-centos6/

      Espero haberte sido de ayuda, ya me contarás que tal te ha ido. Ah, y ya que lo preguntas, la opción de «snapshot» solo sirve para contenedores de tipo ploop, que es una forma de alamcenamiento diferente a la habitual en openvz. Más interesante es «suspend» y «restore», que son capaces de salvar el estado de un contenedor y restaurarlo luego (pero no, no es compatible con vzdump). En fin, a ver si reauno los posts y hablo de estas cosas.

      Larga vida y prosperidad.

      1.    Gabriel dijo

        No tenes una idea lo que te agradezco ese post. El Lunes lo pruebo y te cuento, espero con muchas ansias que reanudes una nueva serie de post sobre el tema. Y por supuesto que voy a compartir tu post que seguro a alguno más le resulta de utilidad 😉 Te cuento como me fue el Lunes, saludos.

    3.    Kamisama666 dijo

      Me aligro de que te haya servido de ayuda. De hecho, ya que tenía el post hecho, he aprovechado y lo he publicado también en desdelinux para que lo vea más gente. Lo puedes encontrar aquí:

      https://blog.desdelinux.net/vzdump-instalarlo-centos-6-5/

      Larga vida y prosperidad

  4.   jcrisdro dijo

    Amigo, tengo un inconveniente siguiendo los pasos de la configuracion, la cuestion es que desde la maquina donde configuro es visible mi nueva VM, pero desde el segmento de la red no lo es, por ejemplo:

    Tengo un segmento 1.*, mi host A tiene la 1.50 y la nueva VM B tiene la 1.201, desde la la maquina A puedo ver la B, pero no desde otro equipo conectado a la misma red,

    tu me podrias ilustrarme en que estoy fallando

  5.   dario dijo

    Excelente el articulo y me ayudo mucho, ahora una consulta, tengo un contenedor ya en producción con una plantilla de debian-7 y quiero actualizarlo a debian-8 el mismo contenedor como debo hacer?

    1.    Kamisama666 dijo

      Hola, muchas gracias. Llevo un tiempo desconectado de OpenVZ pero intentaré ayudarte en lo que pueda.

      En primer lugar te diría que, si te es posible, consideraras crear un nuevo contenedor que el template de Debian 8 y migrar poco a poco los datos y la configuración del antiguo contenedor al nuevo. Después no tienes más que poner la IP de la máquina antigua a la nueva y apañado. Es la manera más fácil y sencilla que hay.

      Por otro lado, si esto no te es posible por la razón que sea, en teoría es posible actualizar la distro desde dentro del propio contenedor como lo harías en cualquier otra máquina con Debian. Pero he oído de gente a la que esto le ha dado problemas, así que antes de nada pruébalo con otro contenedor cualquiera. Y si te da problemas aquí hay un par de sitios que hablan de como solucionarlos (en inglés):

      https://www.skelleton.net/2015/05/04/upgrading-debian-guests-on-proxmox-to-jessie/
      http://forum.openvz.org/index.php?t=msg&goto=51280&
      http://justinfranks.com/linux-administration/upgrade-openvz-vps-from-debian-7-wheezy-64-bit-to-debian-8-jessie-64-bit

      Especialmente échale un vistazo al primero, que es el más reciente y te lo explica todo paso por paso.

      Eso sí, antes de hacer ningún cambio en tu contenedor en producción, no hace falta ni que te diga que hagas un backup del contenedor, en frío o en caliente según te convenga, por si cualquier cosa fuese mal.

      Espero haberte ayudado. Larga vida y prosperidad.

    2.    Kamisama666 dijo

      Hola, muchas gracias. Llevo algo de tiempo desconectado de OpenVZ pero espero poder ayudarte.

      En primer lugar, si no hay nada que te lo impida, te recomiendo que te crees un nuevo contenedor con la template de Debian 8 y vayas migrando todas las configuraciones, datos y software allí. Una vez esté todo funcionando solo tienes que cambiar la IP del contenedor antiguo y ponerla en el nuevo . Es la forma más sencilla y rápida realmente.

      Si por alguna razón no te es posible hacer esto, en teoría es posible actualizar la distribución desde dentro del propio contenedor. Solo tienes que hacerlo como lo harías con un máquina con Debian normal. Pero he oído de gente a la que le ha dado problemas, aunque no debería ocurrir si mantienes actualizado el kernel del host. De todas formas lo mejor que puedes hacer es probar a actualizar con otro contenedor con debian 7 para asegurarte de que no da problemas. Y si encuentras alguno, aquí hay algunas páginas que hablan de como solucionarlo (en inglés):

      https://www.skelleton.net/2015/05/04/upgrading-debian-guests-on-proxmox-to-jessie/
      http://justinfranks.com/linux-administration/upgrade-openvz-vps-from-debian-7-wheezy-64-bit-to-debian-8-jessie-64-bit
      http://forum.openvz.org/index.php?t=msg&goto=51280&

      Especialmente interesante es el primero, que es el más reciente y te lo explica todo paso a paso.

      Aun así no hace falta que te diga que, decidas lo que decidas, no hagas nada con el contenedor en producción sin antes haber hecho un backup, ya sea en frío o en caliente, por si ocurriera algo.

      Espero haberte ayudad. Larga vida y prosperidad

      1.    dario dijo

        Gracias por responder, buenísima la ayuda, voy a leer el articulo y voy hacer un par de pruebas y después les cuento cual fue la mejor, un saludo.

  6.   ramoncin dijo

    Hola buenas, me ha surgido un error con los contenedores de openvz y no logro encontrar ni lógica. Al ver este blog con parte de comentarios lanzo la consulta aquí por si pudiera alguien ayudarme.

    He instalado openvz sin problema y creado contenedores sin problema, montado un servicio web simple en uno de ellos y accedido.

    El caso es que al tratar de realizar un update, por ejemplo:»apt-get update» este me indica que no tiene conexión con las ips de los repositorios y no descarga nada, por lo que no puedo actualizar, ni instalar nuevos paquetes. Si realiza ping a dichas ips hay algo que se me escape??

    Gracias de ante mano

    1.    ramoncin dijo

      Hola de nuevo.

      He tardado mucho en contestar pero la solución la encontré hace ya mucho y no quería dejarla al aire.

      El problema residía mayormente en que no soy muy listo, suele ser la fuente de la mayoría de mis problemas, tenia un nateo que redirigía todo lo que llegaba por el puerto 80 al reverse proxy, al hacer el apt-get update, lo lanzaba pero las respuestas se redirigían a dicho equipo, configurando bien las iptables se soluciona y todo va como la seda, como es lógico.

      Gracias por el aporte sobre OpenVZ, me ayudó a configurarlo medianamente bien

      PD: Aprendí que los updates los hace por el puerto 80, pensé que usaría uno aleatorio a partir del 1000…

      Un saludo.