Siguiente: , Anterior: , Subir: Servicios   [Índice general][Índice]


10.8.26 Servicios de virtualización

El módulo (gnu services virtualization) proporciona servicios para los daemon libvirt y virtlog, así como otros servicios relacionados con la virtualización.

Daemon de Libvirt

libvirtd is the server side daemon component of the libvirt virtualization management system. This daemon runs on host servers and performs required management tasks for virtualized guests.

Variable Scheme: libvirt-service-type

Este es el tipo para el daemon de libvirt. Su valor debe ser un objeto libvirt-configuration.

(service libvirt-service-type
         (libvirt-configuration
          (unix-sock-group "libvirt")
          (tls-port "16555")))

Los campos disponibles de libvirt-configuration son:

parámetro de libvirt-configuration: package libvirt

Paquete libvirt.

parámetro de libvirt-configuration: boolean listen-tls?

Opción para la escucha de conexiones seguras TLS en el puerto TCP/IP público. Debe haberse proporcionado valor a listen para que tenga algún efecto.

Es necesario configurar una autoridad de certificación (CA) y emitir certificados de servidor antes de usar esta característica.

El valor predeterminado es ‘#t

parámetro de libvirt-configuration: boolean listen-tcp?

Escucha de conexiones TCP sin cifrar en el puerto TCP/IP público. Debe haberse proporcionado valor a listen para que tenga algún efecto.

El uso del socket TCP necesita de manera predeterminada identificación SASL. Únicamente se permiten mecanismos SASL que implementen cifrado de datos. Estos son DIGEST_MD5 y GSSAPI (Kerberos5).

El valor predeterminado es ‘#f

parámetro de libvirt-configuration: string tls-port

Puerto en el que se aceptan conexiones seguras. Puede ser un número de puerto o un nombre de servicio.

El valor predeterminado es ‘"16514"’.

parámetro de libvirt-configuration: string tcp-port

Puerto en el que se aceptan conexiones inseguras. Puede ser un número de puerto o un nombre de servicio.

El valor predeterminado es ‘"16509"’.

parámetro de libvirt-configuration: string listen-addr

Dirección IP o nombre de máquina usado para las conexiones de clientes.

El valor predeterminado es ‘"0.0.0.0"’.

parámetro de libvirt-configuration: boolean mdns-adv?

Opción que determina el anuncio mDNS del servicio libvirt.

De manera alternativa puede desactivarse para todos los servicios en una máquina parando el daemon Avahi.

El valor predeterminado es ‘#f

parámetro de libvirt-configuration: string mdns-name

Nombre predeterminado del anuncio mDNS. Debe ser único en la red de distribución inmediata.

El valor predeterminado es ‘"Virtualization Host <hostname>"’.<

parámetro de libvirt-configuration: string unix-sock-group

Grupo propietario del socket de dominio de UNIX. Puede usarse para permitir a un conjunto de usuarias “de confianza” acceso a las funcionalidades de gestión sin convertirse en root.

El valor predeterminado es ‘"root"’.

parámetro de libvirt-configuration: string unix-sock-ro-perms

Permisos del socket UNIX de sólo lectura38. Se usa únicamente para monitorizar el estado de las máquinas virtuales.

El valor predeterminado es ‘"0777"’.

parámetro de libvirt-configuration: string unix-sock-rw-perms

Permisos del socket UNIX de lectura/escritura39. El valor predeterminado únicamente permite acceso a root. Si PolicyKit se encuentra activo en el socket, el valor predeterminado cambiará para permitir acceso universal (es decir, 0777).

El valor predeterminado es ‘"0770"’.

parámetro de libvirt-configuration: string unix-sock-admin-perms

Permisos del socket UNIX de administración. El valor predeterminado únicamente permite acceso a la propietaria (root), no lo cambie a menos que esté completamente segura de a quién expone el acceso.

El valor predeterminado es ‘"0777"’.

parámetro de libvirt-configuration: string unix-sock-dir

Directorio en el que los sockets se encuentran/crean.

El valor predeterminado es ‘"/var/run/libvirt"’.

parámetro de libvirt-configuration: string auth-unix-ro

Esquema de identificación para los sockets de solo-lectura de UNIX. Los permisos predeterminados del socket permiten la conexión de cualquier usuaria.

El valor predeterminado es ‘"polkit"’.

parámetro de libvirt-configuration: string auth-unix-rw

Esquema de identificación para los sockets de lectura/escritura de UNIX. Los permisos predeterminados del socket permiten la conexión únicamente a root. Si se activó en la compilación de libvirt la interoperabilidad con PolicyKit, el valor predeterminado es usar la identificación “policykit”.

El valor predeterminado es ‘"polkit"’.

parámetro de libvirt-configuration: string auth-tcp

Esquema de identificación para los sockets TCP. Si no activa SASL, todo el tráfico TCP estará en texto plano. No lo haga más allá de un escenario de desarrollo/pruebas.

El valor predeterminado es ‘"sasl"’.

parámetro de libvirt-configuration: string auth-tls

Esquema de identificación para los sockets TLS. Los sockets TLS ya se encuentran cifrados gracias a la capa TLS, y una identificación limitada se realiza con los certificados.

También es posible hacer uso de cualquier mecanismo de identificación SASL proporcionando “sasl” en esta opción.

El valor predeterminado es ‘"none"’.

parámetro de libvirt-configuration: lista-opcional access-drivers

Esquema de la API de control de acceso.

De manera predeterminada una usuaria identificada puede acceder a todas las API. Los controladores de acceso pueden incluir restricciones de acceso sobre ello.

El valor predeterminado es ‘()’.

parámetro de libvirt-configuration: string key-file

Ruta del archivo con la clave del servidor. Si se proporciona una cadena vacía, no se carga ninguna clave privada.

El valor predeterminado es ‘""’.

parámetro de libvirt-configuration: string cert-file

Ruta del archivo con la clave del servidor. Si se proporciona una cadena vacía, no se carga ningún certificado.

El valor predeterminado es ‘""’.

parámetro de libvirt-configuration: string ca-file

Ruta del archivo con la clave del servidor. Si se proporciona una cadena vacía, no se carga ningún certificado de CA.

El valor predeterminado es ‘""’.

parámetro de libvirt-configuration: string crl-file

Ruta de la lista de revocaciones de certificado. Si se proporciona una cadena vacía, no se carga ninguna lista.

El valor predeterminado es ‘""’.

parámetro de libvirt-configuration: boolean tls-no-sanity-cert

Desactiva la verificación de los propios certificados del servidor.

Cuando libvirtd arranca, realiza algunas comprobaciones básicas sobre sus propios certificados.

El valor predeterminado es ‘#f

parámetro de libvirt-configuration: boolean tls-no-verify-cert

Desactiva la verificación de certificados de clientes.

La verificación de certificados de cliente es el mecanismo primario de identificación. Se rechazará cualquier cliente que no presente un certificado firmado por la autoridad de certificación (CA).

El valor predeterminado es ‘#f

parámetro de libvirt-configuration: lista-opcional tls-allowed-dn-list

Lista de nombres distinguidos (DN) x509 permitidos.

El valor predeterminado es ‘()’.

parámetro de libvirt-configuration: lista-opcional sasl-allowed-usernames

Lista de nombres de usuaria SASL permitidos. El formato para el nombre de la usuaria depende del mecanismo de identificación SASL.

El valor predeterminado es ‘()’.

parámetro de libvirt-configuration: string tls-priority

Cambia el valor de la cadena de prioridad de TLS predeterminada en tiempo de compilación. El valor predeterminado habitualmente es ‘"NORMAL"’ a menos que se cambiase en tiempo de compilación. Proporcione este valor únicamente si desea que libvirt se desvíe de la configuración global predeterminada.

El valor predeterminado es ‘"NORMAL"’.

parámetro de libvirt-configuration: integer max-clients

Número máximo de conexiones concurrentes de clientes permitidas en todos los sockets combinados.

El valor predeterminado es ‘5000’.

parámetro de libvirt-configuration: integer max-queued-clients

Longitud máxima de la cola de conexiones a la espera de ser aceptadas por el daemon. Fíjese que algunos protocolos que implementan la retransmisión pueden obedecer esto de manera que un intento posterior de conexión tenga éxito.

El valor predeterminado es ‘1000’.

parámetro de libvirt-configuration: integer max-anonymous-clients

Longitud máxima de la cola de clientes aceptados pero no identificados todavía. Proporcione el valor cero para desactivar esta característica.

El valor predeterminado es ‘20’.

parámetro de libvirt-configuration: integer min-workers

Número de procesos de trabajo que se lanzarán inicialmente.

El valor predeterminado es ‘5’.

parámetro de libvirt-configuration: integer max-workers

Número máximo de hilos de trabajo.

Si el número de clientes excede min-workers, se lanzan más hilos, hasta el límite max-workers. Habitualmente se desea que max-workers sea igual al número máximo de clientes permitido.

El valor predeterminado es ‘20’.

parámetro de libvirt-configuration: integer prio-workers

Número de procesos de trabajo prioritarios. Si todos los hilos de trabajo del conjunto previo se encuentran bloqueados, algunas llamadas marcadas como de alta prioridad (notablemente domainDestroy) pueden ejecutarse en este conjunto de hilos.

El valor predeterminado es ‘5’.

parámetro de libvirt-configuration: integer max-requests

Límite global total de llamadas RPC concurrentes.

El valor predeterminado es ‘20’.

parámetro de libvirt-configuration: integer max-client-requests

Límite de peticiones concurrentes desde una única conexión de cliente. Para evitar que un cliente monopolice el servidor esto debe ser una pequeña fracción de los parámetros globales “max_requests” y “max_workers”.

El valor predeterminado es ‘5’.

parámetro de libvirt-configuration: integer admin-min-workers

Igual que min-workers pero para la interfaz de administración.

El valor predeterminado es ‘1’.

parámetro de libvirt-configuration: integer admin-max-workers

Igual que max-workers pero para la interfaz de administración.

El valor predeterminado es ‘5’.

parámetro de libvirt-configuration: integer admin-max-clients

Igual que max-clients pero para la interfaz de administración.

El valor predeterminado es ‘5’.

parámetro de libvirt-configuration: integer admin-max-queued-clients

Igual que max-queued-clients pero para la interfaz de administración.

El valor predeterminado es ‘5’.

parámetro de libvirt-configuration: integer admin-max-client-requests

Igual que max-client-requests pero para la interfaz de administración.

El valor predeterminado es ‘5’.

parámetro de libvirt-configuration: integer log-level

Nivel de registro. 4 errores, 3 avisos, 2 información, 1 depuración.

El valor predeterminado es ‘3’.

parámetro de libvirt-configuration: string log-filters

Filtros del registro.

Un filtro permite la selección de un nivel de registro diferente para una categoría dada de registros. El formato del filtro es uno de los siguientes:

donde nombre es una cadena contra la que se compara la categoría proporcionada en la llamada VIR_LOG_INIT() al principio de cada archivo de fuentes de libvirt, por ejemplo ‘"remote"’, ‘"qemu"’ o ‘"util.json"’ (el nombre en el filtro puede ser una subcadena del nombre completo de la categoría, para aceptar múltiples categorías con nombres similares), el prefijo opcional ‘"+"’ indica a libvirt que registre la pila de llamadas en cada mensaje con el nombre correspondiente, y x es el nivel mínimo de los mensajes que deben registrarse:

Se pueden definir en una única sentencia múltiples filtros, únicamente hace falta separarlos por espacios.

El valor predeterminado es ‘"3:remote 4:event"’.

parámetro de libvirt-configuration: string log-outputs

Salidas de log.

Una salida es uno de esos lugares para almacenar información de logging. El formato para una salida puede ser:

x:stderr

la salida va a stderr

x:syslog:nombre

usa syslog para la salida y usa el nombre proporcionado como identificador

x:file:ruta_archivo

encamina la salida a un archivo, con la ruta proporcionada

x:journald

usa el sistema de logging journald

En todos los casos el prefijo x es el nivel mínimo, que actúa como filtro

Se pueden definir salidas múltiples, únicamente deben separarse por espacios.

El valor predeterminado es ‘"3:stderr"’.

parámetro de libvirt-configuration: integer audit-level

Permite la alteración del uso del sistema de auditoría.

El valor predeterminado es ‘1’.

parámetro de libvirt-configuration: boolean audit-logging

Envía los mensajes de auditoría a través de la infraestructura de registro de libvirt.

El valor predeterminado es ‘#f

parámetro de libvirt-configuration: string-opcional host-uuid

Host UUID. UUID must not have all digits be the same.

El valor predeterminado es ‘""’.

parámetro de libvirt-configuration: string host-uuid-source

Fuente de lectura del UUID de la máquina anfitriona.

Si dmidecode no proporciona un UUID válido, se generará un UUID temporal.

El valor predeterminado es ‘"smbios"’.

parámetro de libvirt-configuration: integer keepalive-interval

Un mensaje “keepalive” se envía al cliente tras keepalive_interval segundos de inactividad para comprobar si el cliente todavía responde. Si se proporciona el valor -1, libvirtd nunca enviará peticiones “keepalive”; no obstante los clientes todavía pueden mandarlas y el daemon enviará las respuestas.

El valor predeterminado es ‘5’.

parámetro de libvirt-configuration: integer keepalive-count

Número máximo de mensajes “keepalive” que se permite enviar a un cliente sin obtener respuesta antes de considerar que se ha roto la conexión.

En otras palabras, la conexión se cierra automáticamente tras keepalive_interval * (keepalive_count + 1) segundos tras la última recepción de un mensaje desde el cliente. Cuando keepalive_count tiene valor 0, las conexiones se cerrarán automáticamente tras keepalive-interval segundos de inactividad sin mandar ningún mensaje “keepalive”.

El valor predeterminado es ‘5’.

parámetro de libvirt-configuration: integer admin-keepalive-interval

Igual que la opción anterior pero para la interfaz de administración.

El valor predeterminado es ‘5’.

parámetro de libvirt-configuration: integer admin-keepalive-count

Igual que la opción anterior pero para la interfaz de administración.

El valor predeterminado es ‘5’.

parámetro de libvirt-configuration: integer ovs-timeout

Plazo máximo para las llamadas a Open vSwitch.

La utilidad ovs-vsctl se usa para la configuración y su opción de plazo máximo (timeout) tiene un valor de 5 segundos de manera predeterminada para evitar que esperas potencialmente infinitas bloqueen libvirt.

El valor predeterminado es ‘5’.

Daemon Virtlog

El servicio virtlogd es un daemon del que se compone el lado servidor de libvirt cuya finalidad es la gestión del registro de las consolas de las máquinas virtuales.

This daemon is not used directly by libvirt client applications, rather it is called on their behalf by libvirtd. By maintaining the logs in a standalone daemon, the main libvirtd daemon can be restarted without risk of losing logs. The virtlogd daemon has the ability to re-exec() itself upon receiving SIGUSR1, to allow live upgrades without downtime.

Variable Scheme: virtlog-service-type

Este es el tipo del daemon virtlog. Su valor debe ser un objeto virtlog-configuration.

(service virtlog-service-type
         (virtlog-configuration
          (max-clients 1000)))
parámetro de virtlog-configuration: integer log-level

Nivel de registro. 4 errores, 3 avisos, 2 información, 1 depuración.

El valor predeterminado es ‘3’.

parámetro de virtlog-configuration: string log-filters

Filtros del registro.

Un filtro permite la selección de un nivel de registro diferente para una categoría dada de registros. El formato del filtro es uno de los siguientes:

donde nombre es una cadena contra la que se compara la categoría proporcionada en la llamada VIR_LOG_INIT() al principio de cada archivo de fuentes de libvirt, por ejemplo "remote", "qemu" o "util.json" (el nombre en el filtro puede ser una subcadena del nombre completo de la categoría, para aceptar múltiples categorías con nombres similares), el prefijo opcional "+" indica a libvirt que registre la pila de llamadas en cada mensaje con el nombre correspondiente, y x es el nivel mínimo de los mensajes que deben registrarse:

Se pueden definir en una única sentencia múltiples filtros, únicamente hace falta separarlos por espacios.

El valor predeterminado es ‘"3:remote 4:event"’.

parámetro de virtlog-configuration: string log-outputs

Salidas de log.

Una salida es uno de esos lugares para almacenar información de logging. El formato para una salida puede ser:

x:stderr

la salida va a stderr

x:syslog:nombre

usa syslog para la salida y usa el nombre proporcionado como identificador

x:file:ruta_archivo

encamina la salida a un archivo, con la ruta proporcionada

x:journald

usa el sistema de logging journald

En todos los casos el prefijo x es el nivel mínimo, que actúa como filtro

Se pueden definir salidas múltiples, únicamente deben separarse por espacios.

El valor predeterminado es ‘"3:stderr"’.

parámetro de virtlog-configuration: integer max-clients

Número máximo de conexiones concurrentes de clientes permitidas en todos los sockets combinados.

El valor predeterminado es ‘1024’.

parámetro de virtlog-configuration: integer max-size

Tamaño máximo del archivo antes de pasar al siguiente.

El valor predeterminado es ‘2MB’.

parámetro de virtlog-configuration: integer max-backups

Número máximo de archivos de backup que se deben mantener.

El valor predeterminado es ‘3’.

Emulación transparente con QEMU

qemu-binfmt-service-type proporciona la capacidad de emular transparentemente programas binarios construidos para arquitecturas diferentes—por ejemplo, le permite ejecutar de manera transparente un programa de ARMv7 en una máquina x86_64. Esto se consigue mediante la combinación del emulador QEMU y la característica binfmt_misc del núcleo Linux. Esta característica únicamente le permite emular GNU/Linux en una arquitectura diferente, pero más adelante puede ver como implementar también GNU/Hurd.

Variable Scheme: qemu-binfmt-service-type

Este es el tipo del servicio de emulación transparente QEMU/binfmt. Su valor debe ser un objeto qemu-binfmt-configuration, que especifica el paquete QEMU usado así como las arquitecturas que se desean emular:

En este ejemplo se activa la emulación transparente para las plataformas ARM y aarch64. La ejecución de herd stop qemu-binfmt la desactiva, y la ejecución de herd start qemu-binfmt la vuelve a activar (véase the herd command en The GNU Shepherd Manual).

Tipo de datos: qemu-binfmt-configuration

Esta es la configuración para el servicio qemu-binfmt.

platforms (predeterminadas: '())

Lista de plataformas de QEMU emuladas. Cada elemento debe ser un objeto de plataforma como los devueltos por lookup-qemu-platforms (véase a continuación).

Por ejemplo, supongamos que está en una máquina x86_64 y tiene este servicio:

Puede ejecutar:

guix build -s armhf-linux inkscape

and it will build Inkscape for ARMv7 as if it were a native build, transparently using QEMU to emulate the ARMv7 CPU. Pretty handy if you’d like to test a package build for an architecture you don’t have access to!

qemu (predeterminado: qemu)

El paquete QEMU usado.

Procedimiento Scheme: lookup-qemu-platforms plataformas

Devuelve la lista de objetos de plataforma de QEMU que corresponden a plataformas…. plataformas debe ser una lista de cadenas que correspondan con nombres de plataforma, como "arm", "sparc", "mips64el", etcétera.

Procedimiento Scheme: qemu-platform? obj

Devuelve verdadero si obj es un objeto de plataforma.

Procedimiento Scheme: qemu-platform-name plataforma

Devuelve el nombre de plataforma—una cadena como "arm".

Hurd en una máquina virtual

El servicio hurd-vm implementa la ejecución de GNU/Hurd en una máquina virtual (VM), llamado childhurd. Este servicio está destinado para su uson GNU/Linux y la configuración de sistema operativo de GNU/Hurd se compila de manera cruzada. La máquina virtual es un servicio de Shepherd al que se puede hacer referencia a través de los nombres hurd-vm y childhurd y se puede controlar mediante órdenes como las siguientes:

herd start hurd-vm
herd stop childhurd

Cuando el servicio se encuentra en ejecución, puede ver su consola a través de una conexión con un cliente VNC, por ejemplo con:

guix environment --ad-hoc tigervnc-client -- \
         vncviewer localhost:5900

La configuración predeterminada (véase hurd-vm-configuration a continuación) lanza un servidor del intérprete de órdenes seguro (SSH) en su sistema GNU/Hurd, el cual QEMU (el emulador de máquina virtual) redirige al puerto 10222 de la máquina anfitriona. Por tanto se puede conectar a Hurd a través de SSH con:

ssh root@localhost -p 10022

childhurd es volátil y carece de estado: comienza con un sistema de archivos raíz creado de cero cada vez que lo reinicia. No obstante de manera predeterminada todos los archivos en la ruta /etc/childhurd de la máquina anfitriona se copian al sistema de archivos raíz de childhurd cuando arranca. Esto permite que configure “secretos” dentro de la máquina virtual: claves de SSH de la máquina, claves de sustituciones autorizadas, etcétera—véase la explicación de secret-root a continuación.

Variable Scheme: hurd-vm-service-type

El tipo del servicio que ejecuta Hurd en una máquina virtual. Su valor debe ser un objeto hurd-vm-configuration, que especifica el sistema operativo (véase Referencia de operating-system) y el tamaño del disco para la máquina virtual de Hurd, el paquete de QEMU usado así como las opciones de ejecución.

Por ejemplo:

(service hurd-vm-service-type
         (hurd-vm-configuration
          (disk-size (* 5000 (expt 2 20))) ;5G
          (memory-size 1024)))             ;1024MiB

crearía una imagen de disco suficientemente grande para construir GNU Hello, con algo de memoria adicional.

Tipo de datos: hurd-vm-configuration

Tipo de datos que representa la configuración de hurd-vm-service-type.

os (predeterminado: %hurd-vm-operating-system)

El sistema operativo instanciado. El valor predeterminado es un sistema mínimo con un daemon del intérprete de comandos seguro OpenSSH configurado de forma permisiva asociado al puerto 2222 (véase openssh-service-type).

qemu (predeterminado: qemu-minimal)

El paquete QEMU usado.

image (predeterminado: hurd-vm-disk-image)

El procedimiento usado para construir la imagen de disco construida a partir de esta configuración.

disk-size (predeterminado: 'guess)

El tamaño de la imagen de disco.

memory-size (predeterminado: 512)

El tamaño de la memoria de la máquina virtual en mebibytes.

options (predeterminadas: '("--snapshot"))

Opciones adicionales para ejecutar QEMU.

id (predeterminado: #f)

Si se proporciona un valor, debe ser un entero positivo no nulo usado para parametrizar las instancias Childhurd. Se añade al nombre del servicio, por ejemplo childhurd1.

net-options (predeterminado: hurd-vm-net-options)

El procedimiento usado para producir la lista de opciones de red para QEMU.

De manera predeterminada produce

'("--device" "rtl8139,netdev=net0"
  "--netdev" "user,id=net0\
              ,hostfwd=tcp:127.0.0.1:secrets-port-:1004\
              ,hostfwd=tcp:127.0.0.1:ssh-port-:2222\
              ,hostfwd=tcp:127.0.0.1:vnc-port-:5900")

con los siguientes puertos redirigidos:

secrets-port: (+ 11004 (* 1000 ID))
ssh-port: (+ 10022 (* 1000 ID))
vnc-port: (+ 15900 (* 1000 ID))
secret-root (predeterminado: /etc/childhurd)

El directorio raíz que contiene los secretos fuera-de-banda que serán instalados en childhurd cuando se ejecute. Los childhurd son volátiles lo que significa que cada arranque los secretos como las claves de SSH de la máquina y la clave de firma de Guix se regeneran.

Si el directorio /etc/childhurd no existe, el servicio secret-service que se ejecuta en childhurd recibirá una lista vacía de secretos.

De manera predeterminada el servicio crea /etc/childhurd con los siguientes secretos no volátiles, a no ser que ya existan:

/etc/childhurd/etc/guix/acl
/etc/childhurd/etc/guix/signing-key.pub
/etc/childhurd/etc/guix/signing-key.sec
/etc/childhurd/etc/ssh/ssh_host_ed25519_key
/etc/childhurd/etc/ssh/ssh_host_ecdsa_key
/etc/childhurd/etc/ssh/ssh_host_ed25519_key.pub
/etc/childhurd/etc/ssh/ssh_host_ecdsa_key.pub

Estos archivos se envían automáticamente a la máquina virtual de Hurd cuando arranca, incluyendo sus permisos.

Tener todos estos archivos en un único lugar significa que únicamente faltan un par de detalles para permitir a la máquina anfitriona delegar las construcciones de i586-gnu en childhurd:

  1. Autorizar la clave de childhurd en la máquina anfitriona de modo que esta acepte las construcciones que provengan de childhurd, lo que puede hacerse de este modo:
    guix archive --authorize < \
      /etc/childhurd/etc/guix/signing-key.pub
    
  2. Añadir childhurd a /etc/guix/machines.scm (véase Configuración de delegación del daemon).

Estamos trabajando para que esto se haga de forma automática—¡póngase en contacto con nosotras a través de guix-devel@gnu.org para hablar sobre ello!

Tenga en cuenta que la imagen de la máquina virtual es volátil, es decir, los contenidos se pierden cuando se para. Si desea una imagen que mantenga el estado puede modificar la configuración de image y options sin la opción --snapshot usando algo parecido a esto:

(service hurd-vm-service-type
         (hurd-vm-configuration
          (image   (const "/no/almacen/y/perm/escritura/hurd.img"))
          (options '())))

Ganeti

Nota: Este servicio se considera experimental. Las opciones de configuración pueden cambiar de manera incompatible con versiones previas, y no todas las características han sido probadas en profundidad. Se recomienda a quienes usen este servicio que compartan su experiencia en guix-devel@gnu.org.

Ganeti es un sistema de gestión de máquinas virtuales. Está diseñado para mantener máquinas virtuales ejecutándose en un cluster de servidores incluso en casos de fallos de hardware, y para facilitar las tareas de mantenimiento y recuperación. Consiste en múltiples servicios que se describen a lo largo de esta sección. Además del servicio de Ganeti, necesitará el servicio OpenSSH (véase openssh-service-type), y actualizar el archivo /etc/hosts (véase hosts-file) con el nombre del cluster y su dirección (o usar un servidor DNS).

Todos los nodos que participan en el cluster de Ganeti deben tener la misma configuración de Ganeti y en el archivo /etc/hosts. A continuación se encuentra un ejemplo de configuración para un nodo del cluster de Ganeti que implementa varios motores de almacenamiento, e instala los proveedores de sistema operativo debootstrap y guix:

(use-package-modules virtualization)
(use-service-modules base ganeti networking ssh)
(operating-system
  ;; …
  (host-name "nodo1")
  (hosts-file (plain-file "hosts" (format #f "
127.0.0.1       localhost
::1             localhost

192.168.1.200   ganeti.example.com
192.168.1.201   nodo1.example.com nodo1
192.168.1.202   nodo2.example.com nodo2
")))

  ;; Instala QEMU de modo que podamos usar instancias basadas en KVM,
  ;; y LVM, DRBD y Ceph para usar los motores de almacenamiento
  ;; "plain", "drbd" y "rbd".
  (packages (append (map specification->package
                         '("qemu" "lvm2" "drbd-utils" "ceph"
                           ;; Añade los proveedores de SO guix...
                           "ganeti-instance-guix"
                           ;; ... y debootstrap.
                           "ganeti-instance-debootstrap"))
                    %base-packages))
  (services
   (append (list (static-networking-service "eth0" "192.168.1.201"
                                            #:netmask "255.255.255.0"
                                            #:gateway "192.168.1.254"
                                            #:name-servers '("192.168.1.252"
                                                             "192.168.1.253"))

                 ;; Ganeti usa SSH para la comunicación entre nodos.
                 (service openssh-service-type
                          (openssh-configuration
                           (permit-root-login 'without-password)))

                 (service ganeti-service-type
                          (ganeti-configuration
                           ;; Esta lista especifica las rutas del
                           ;; sistema de archivos permitidas para el
                           ;; almacenamiento de imágenes de máquinas
                           ;; viruales.
                           (file-storage-paths '("/srv/ganeti/almacenamiento"))
                           ;; Esta variable configura una única
                           ;; "variación" tanto para Debootstrap como
                           ;; Guix que funciona con KVM.
                           (os %default-ganeti-os))))
           %base-services)))

Se recomienda la lectura de la guía de administración de Ganeti a quienes usen este software para aprender distintas opciones del cluster y operaciones diarias. También existe este articulo del blog que describe cómo configurar e inicializar un pequeño cluster.

Variable Scheme: ganeti-service-type

Tipo de servicio que incluye todos los distintos servicios que los nodos Ganeti deben ejecutar.

Su valor es un objeto ganeti-configuration que define usado para las operaciones de línea de órdenes, así como la configuración para varios daemon. Las rutas de almacenamiento permitidas y los sistemas operativos disponibles para hospedar también se configuran a través de este tipo de datos.

Tipo de datos: ganeti-configuration

El servicio ganeti proporciona las siguientes opciones de configuración:

ganeti (predeterminado: ganeti)

El paquete ganeti usado. Dicho paquete se instala en el perfil del sistema y hace que las órdenes gnt-cluster, gnt-instance, etcétera, estén disponibles. Tenga en cuenta que el valor especificado aquí no afecta a otros servicios ya que cada uno hace referencia a su paquete ganeti específico (véase a continuación).

noded-configuration (predeterminado: (ganeti-noded-configuration))
confd-configuration (predeterminado: (ganeti-confd-configuration))
wconfd-configuration (predeterminado: (ganeti-wconfd-configuration))
luxid-configuration (predeterminado: (ganeti-luxid-configuration))
rapi-configuration (predeterminado: (ganeti-rapi-configuration))
kvmd-configuration (predeterminado: (ganeti-kvmd-configuration))
mond-configuration (predeterminado: (ganeti-mond-configuration))
metad-configuration (predeterminado: (ganeti-metad-configuration))
watcher-configuration (predeterminado: (ganeti-watcher-configuration))
cleaner-configuration (predeterminado: (ganeti-cleaner-configuration))

Estas opciones controlan los distintos daemon y trabajos de cron que se distribuyen con Ganeti. Los posibles valores se describen en detalle a continuación. Para modificar el valor de un elemento de la configuración se debe usar el tipo de configuración para dicho servicio:

(service ganeti-service-type
         (ganeti-configuration
          (rapi-configuration
           (ganeti-rapi-configuration
            (interface "eth1"))))
          (watcher-configuration
           (ganeti-watcher-configuration
            (rapi-ip "10.0.0.1"))))
file-storage-paths (predeterminada: '())

Lista de directorios permitidos para el motor de almacenamiento de archivos.

os (predeterminado: %default-ganeti-os)

Lista de registros <ganeti-os>.

En esencia ganeti-service-type es una abreviación para declara cada uno de los servicios individualmente:

Además de una extensión del servicio etc-service-type que configura el motor de almacenamiento de archivos y las variantes de sistema operativo.

Tipo de datos: ganeti-os

Tipo de datos adecuado para proporcionarse como parámetro os de ganeti-configuration. Tiene los siguientes parámetros:

name

Nombre para este proveedor de sistema operativo. Solo se usa para especificar dónde termina la configuración. Proporcionar el valor “debootstrap” indica la creación de /etc/ganeti/instance-debootstrap.

extension

La extensión de archivo para las variaciones de este tipo de sistema operativo. Por ejemplo .conf o .scm.

variants (predeterminadas: '())

Lista de objetos ganeti-os-variant para este SO.

Tipo de datos: ganeti-os-variant

Tipo de datos que representa una variante de SO Ganeti. Este tipo tiene los siguientes parámetros:

name

El nombre de esta variación.

configuration

Un archivo de configuración para esta variación.

Variable Scheme: %default-debootstrap-hooks

Esta variable contiene extensiones (“hook”) para la configuración de la red y el cargador de arranque GRUB.

Variable Scheme: %default-debootstrap-extra-pkgs

Esta variable contiene una lista de paquetes adecuada para una máquina completamente virtualizada.

Tipo de datos: debootstrap-configuration

Este tipo de datos crea archivos de configuración adecuados para la orden de generación de sistemas operativos debootstrap.

hooks (predeterminada: %default-debootstrap-hooks)

Cuando no es #f debe ser una expresión-G que especifique el directorio con los guiones que deberán ejecutarse cuando se instale el sistema operativo. También puede ser una lista de pares (nombre . obj-tipo-archivo). Por ejemplo:

`((99-hola-mundo . ,(plain-file "#!/bin/sh\necho '¡Hola mundo!'")))

Esto crea un directorio con un ejecutable que se llama 99-hola-mundo y se ejecuta cada vez que se instale esta variación. Si se proporciona #f, se usarán los archivos del directorio /etc/ganeti/instance-debootstrap/hooks, si existe alguno.

proxy (predeterminado: #f)

Valor opcional de la pasarela HTTP usada.

mirror (predeterminado: #f)

El servidor espejo de Debian. Habitualmente es algo como http://ftp.no.debian.org/debian. El valor predeterminado cambia dependiendo de la distribución.

arch (predeterminada: #f)

La arquitectura de dpkg. Proporcione armhf para generar con debootstrap una instancia de ARMv7 en una máquina AArch64. El valor predeterminado corresponde a la arquitectura del sistema en uso.

suite (predeterminada: "stable")

Si se proporciona debe ser el identificador de una entrega o “suite” de distribución de Debian, como por ejemplo buster o focal. Si se proporciona #f, se usael valor predeterminado del proveedor de sistema operativo.

extra-pkgs (predeterminados: %default-debootstrap-extra-pkgs)

Lista de paquetes adicionales que dpkg instala junto al sistema mínimo.

components (predeterminado: #f)

Si se proporciona un valor debe ser una lista de “componentes” de repositorio de Debian. Por ejemplo '("main" "contrib").

generate-cache? (predeterminado: #t)

Determina si se almacena en caché de manera automática el archivo de debootstrap que se haya generado.

clean-cache (predeterminado: 14)

Descarta el contenido de la caché tras este número de días. Use #f para no descartar contenido de la caché nunca.

partition-style (predeterminado: 'msdos)

Tipo de partición creado. Cuando se proporciona un valor debe ser 'msdos, 'none o una cadena.

partition-alignment (predeterminada: 2048)

Alineación de la partición en sectores.

Procedimiento Scheme: debootstrap-variant nombre configuración

Procedimiento auxiliar que crea un registro ganeti-os-variant. Toma dos parámetros: un nombre y un objeto debootstrap-configuration.

Procedimiento Scheme: debootstrap-os variantes

Procedimiento auxiliar que crea un registro ganeti-os. Toma como parámetro una lista de variaciones creada con debootstrap-variant.

Procedimiento Scheme: guix-variant nombre configuración

Procedimiento auxiliar que crea un registro ganeti-os-variant para ser usado por el proveedor de sistema operativo Guix. Toma como parámetros un nombre y una expresión-G que devuelve un objeto “tipo-archivo” (véase objetos “tipo-archivo”) que contiene configuración para el sistema Guix.

Procedimiento Scheme: guix-os variantes

Procedimiento auxiliar que crea un registro ganeti-os. Toma como parámetros una lista de variaciones producida por guix-variant.

Variable Scheme: %default-debootstrap-variants

Variable de conveniencia para que el proveedor debootstrap funcione “automágicamente” sin que quienes lo usan tengan que declarar variaciones manualmente. Contiene una única variación de debootstrap con la configuración predeterminada:

Variable Scheme: %default-guix-variants

Variable de conveniencia para que el proveedor de sistema operativo Guix funcione sin ninguna configuración adicional. Crea una máquina virtual que tiene un servidor SSH, consola serie y autoriza las claves de SSH de las máquinas de Ganeti.

(list (guix-variant
       "default"
       (file-append ganeti-instance-guix
                    "/share/doc/ganeti-instance-guix/examples/dynamic.scm")))

Se pueden implementar proveedores de SO no disponibles en Guix mediante la extensión de los registros ganeti-os y ganeti-os-variant de manera apropiada. Por ejemplo:

(ganeti-os
 (name "personalizado")
 (extension ".conf")
 (variants
  (list (ganeti-os-variant
         (name "cosa")
         (configuration (plain-file "archivo" "Esto va bien"))))))

Este ejemplo crearía /etc/ganeti/instance-personalizado/variants/cosa.conf, el cual apunta a un archivo en el almacén cuyo contenido es esto va bien. También se crearía /etc/ganeti/instance-personalizado/variants/variants.list con el contenido cosa.

Obviamente es posible que esto no funcione con todos los proveedores de sistema operativo existentes. Si está interfaz le está limitando en su implementación, por favor, contacte con guix-devel@gnu.org.

El resto de esta sección documenta los distintos servicios incluidos en ganeti-service-type.

Variable Scheme: ganeti-noded-service-type

ganeti-noded es el daemon responsable de las funciones específicas del nodo dentro del sistema Ganeti. El valor de este servicio debe ser un objeto ganeti-noded-configuration.

Tipo de datos: ganeti-noded-configuration

Esta es la configuración para el servicio ganeti-noded.

ganeti (predeterminado: ganeti)

El paquete ganeti usado para este servicio.

port (predeterminado: 1811)

Puerto TCP en el que escucha el daemon del nodo a la espera de peticiones a través de la red.

address (predeterminado: "0.0.0.0")

La dirección de red a la que el daemon se enlaza. La dirección predeterminada significa que el daemon se enlaza a todas las direcciones disponibles.

interface (predeterminado: #f)

En caso de proporcionarse un valor, debe especificar el nombre de la interfaz de red (por ejemplo, eth0 a la que el daemon se enlaza.

max-clients (predeterminado: 20)

Establece un límite en el número máximo de conexiones simultaneas de clientes que el daemon manejará. Las conexiones que excedan dicho número se aceptan, pero no se envía respuesta hasta que hayan cerrado suficientes conexiones.

ssl? (predeterminado: #t)

Determina si se usa SSL/TLS para cifrar las comunicaciones a través de la red. El cluster proporciona automáticamente el certificado y se puede rotar con gnt-cluster renew-crypto.

ssl-key (predeterminado: "/var/lib/ganeti/server.pem")

Puede usarse para proporcionar una clave de cifrado específica para comunicaciones TLS.

ssl-cert (predeterminado: "/var/lib/ganeti/server.pem")

Puede usarse para proporcionar un certificado específico para comunicaciones TLS.

debug? (predeterminado: #f)

Cuando es verdadero, el daemon almacena registros adicionales con propósitos de depuración. Tenga en cuenta que esto puede exponer detalles de cifrado en los archivos de registro, por lo que debe usarse con precaución.

Variable Scheme: ganeti-confd-service-type

ganeti-confd responde a las consultas relacionadas con la configuración del cluster Ganeti. El propósito de este daemon es tener una forma rápida y con alta disponibilidad de consultar los valores de configuración del cluster. Se activa de manera automática en todas las máquinas candidatas de ser coordinadoras. El valor de este servicio debe ser un objeto ganeti-confd-configuration.

Tipo de datos: ganeti-confd-configuration

Esta es la configuración para el servicio ganeti-confd.

ganeti (predeterminado: ganeti)

El paquete ganeti usado para este servicio.

port (predeterminado: 1814)

El puerto UDP en el que esperarán peticiones a través de la red.

address (predeterminado: "0.0.0.0")

Dirección de red a la que el daemon se asocia.

debug? (predeterminado: #f)

Cuando es verdadero, el daemon almacena registros adicionales con propósitos de depuración.

Variable Scheme: ganeti-wconfd-service-type

ganeti-wconfd es el daemon que proporciona una autoridad de conocimiento sobre la configuración del cluster y es la única entidad que puede aceptar cambios sobre ella. Todos las trabajos que necesiten modificar la configuración deben hacerlo enviando las peticiones adecuadas a este daemon. Únicamente se ejecuta en el nodo coordinador y se desactiva automáticamente en otros nodos.

El valor de este servicio debe ser un objeto ganeti-wconfd-configuration.

Tipo de datos: ganeti-wconfd-configuration

Esta es la configuración para el servicio ganeti-wconfd.

ganeti (predeterminado: ganeti)

El paquete ganeti usado para este servicio.

no-voting? (predeterminado: #f)

El daemon se negará a arrancar si la mayoría de los nodos del cluster no coinciden en que se está ejecutando en el nodo coordinador. Proporcione #t para arrancar incluso cuando no se puede alcanzar dicha mayoría (peligroso, úsese con precaución).

debug? (predeterminado: #f)

Cuando es verdadero, el daemon almacena registros adicionales con propósitos de depuración.

Variable Scheme: ganeti-luxid-service-type

ganeti-luxid es un daemon que responde a las peticiones relacionadas con la configuración del estado actual del cluster Ganeti. De manera adicional, es el daemon que tiene el control sobre la cola de trabajos de Ganeti. Los trabajos se pueden emitir a través de este daemon y éste los planifica y arranca.

Recibe un objeto ganeti-luxid-configuration.

Tipo de datos: ganeti-luxid-configuration

Esta es la configuración para el servicio ganeti-wconfd.

ganeti (predeterminado: ganeti)

El paquete ganeti usado para este servicio.

no-voting? (predeterminado: #f)

El daemon se negará a arrancar si no puede verificar que la mayoría de los nodos del cluster creen que éste se está ejecutando en el nodo coordinador. Proporcione #t para ignorar dichas comprobaciones y arrancar en cualquier caso (puede ser peligroso).

debug? (predeterminado: #f)

Cuando es verdadero, el daemon almacena registros adicionales con propósitos de depuración.

Variable Scheme: ganeti-rapi-service-type

ganeti-rapi proporciona una API remota para cluster de Ganeti. Se ejecuta en el nodo coordinador y se puede usar para realizar programática acciones en el cluster a través de un protocolo de llamada de procedimientos remotos (RPC) basado en JSON.

Se permiten la mayoría de las operaciones de consulta sin identificación (a no ser que se especifique require-authentication?), mientras que las operaciones de escritura necesitan autorización explícita a través del archivo /var/lib/ganeti/rapi/users. Véase la documentación de la API remota de Ganeti para obtener más información.

El valor de este servicio debe ser un objeto ganeti-rapi-configuration.

Tipo de datos: ganeti-rapi-configuration

Configuración para el servicio ganeti-rapi.

ganeti (predeterminado: ganeti)

El paquete ganeti usado para este servicio.

require-authentication? (predeterminado: #f)

Determina si se requiere identificación incluso para operaciones únicamente de lectura.

port (predeterminado: 5080)

El puerto TCP en el que esperarán peticiones de la API.

address (predeterminado: "0.0.0.0")

La dirección de red a la que se asocia el servicio. De manera predeterminada el servicio se asocia a todas las direcciones configuradas.

interface (predeterminado: #f)

Si se proporciona un valor, debe especificar el nombre de la interfaz de red, como por ejemplo eth0, a la que el daemon se asocia.

max-clients (predeterminado: 20)

Número máximo de conexiones simultaneas de clientes que se manejan. Las conexiones que excedan dicho número se aceptan, pero no se envía respuesta hasta que hayan cerrado suficientes conexiones.

ssl? (predeterminado: #t)

Determina si se usa cifrado SSL/TLS en el puerto de la API remota.

ssl-key (predeterminado: "/var/lib/ganeti/server.pem")

Puede usarse para proporcionar una clave de cifrado específica para comunicaciones TLS.

ssl-cert (predeterminado: "/var/lib/ganeti/server.pem")

Puede usarse para proporcionar un certificado específico para comunicaciones TLS.

debug? (predeterminado: #f)

Cuando es verdadero, el daemon almacena registros adicionales con propósitos de depuración. Tenga en cuenta que esto puede exponer detalles de cifrado en los archivos de registro, por lo que debe usarse con precaución.

Variable Scheme: ganeti-kvmd-service-type

ganeti-kvmd es responsable de determinar si una instancia KVM determinada ha sido apagada por una usuaria o una administradora. Normalmente Ganeti reiniciará una instancia que no se haya parado a través de Ganeti. Si la opción del cluster user_shutdown es verdadera, este daemon monitoriza el puerto QMP que proporciona QEMU y escucha eventos de apagado en él, y marca la instancia como USER_down en vez de ERROR_down cuando el daemon la apaga de manera adecuada.

Recibe un objeto ganeti-kvmd-configuration.

Tipo de datos: ganeti-kvmd-configuration
ganeti (predeterminado: ganeti)

El paquete ganeti usado para este servicio.

debug? (predeterminado: #f)

Cuando es verdadero, el daemon almacena registros adicionales con propósitos de depuración.

Variable Scheme: ganeti-mond-service-type

ganeti-mond es un daemon opcional que proporciona la funcionalidad de monitorización de Ganeti. Es responsable de la ejecución de los recolectores de datos y la publicación de la información obtenida a través de una interfaz HTTP.

Recibe un objeto ganeti-mond-configuration.

Tipo de datos: ganeti-mond-configuration
ganeti (predeterminado: ganeti)

El paquete ganeti usado para este servicio.

port (predeterminado: 1815)

Puerto en el que el daemon espera conexiones.

address (predeterminado: "0.0.0.0")

La dirección de red a la que se asocia el daemon. De manera predeterminada se asocia a todas las interfaces disponibles.

debug? (predeterminado: #f)

Cuando es verdadero, el daemon almacena registros adicionales con propósitos de depuración.

Variable Scheme: ganeti-metad-service-type

ganeti-metad es un daemon opcional que se puede usar para proporcionar información del cluster a instancias o guiones de instalación de sistema operativo.

Recibe un objeto ganeti-metad-configuration.

Tipo de datos: ganeti-metad-configuration
ganeti (predeterminado: ganeti)

El paquete ganeti usado para este servicio.

port (predeterminado: 80)

Puerto en el que el daemon espera conexiones.

address (predeterminada: #f)

Si se proporciona un valor el daemon se asociará únicamente a esta dirección. Si no se proporciona valor el comportamiento depende de la configuración del cluster.

debug? (predeterminado: #f)

Cuando es verdadero, el daemon almacena registros adicionales con propósitos de depuración.

Variable Scheme: ganeti-watcher-service-type

ganeti-watcher es un guión diseñado para su ejecución periódica en la que comprueba el estado la salud del cluster. Reinicia automáticamente las instancias que se han parado sin el consentimiento de Ganeti, y repara los enlaces DRBD en caso de que un nodo se haya reiniciado. También archiva los trabajos antiguos del cluster y reinicia los daemon de Ganeti si no se están ejecutando. Si se ha proporcionado valor al parámetro del cluster ensure_node_health, este proceso también apagará las instancias y dispositivos DRBD si el nodo que las ejecute se ha declarado fuera de línea por alguna de las máquinas candidatas de coordinación conocidas.

Se puede pausar en todos los nodos con gnt-cluster watcher pause.

Este servicio toma como valor un objeto ganeti-watcher-configuration.

Tipo de datos: ganeti-watcher-configuration
ganeti (predeterminado: ganeti)

El paquete ganeti usado para este servicio.

schedule (predeterminado: '(next-second-from (next-minute (range 0 60 5))))

Cada cuanto se ejecuta el guión. El valor predeterminado es cada 5 minutos.

rapi-ip (predeterminada: #f)

Esta opción se debe especificar únicamente si el daemon de API remota se ha configurado para usar una interfaz o dirección de red concreta. De manera predeterminada se usa la dirección del cluster.

job-age (predeterminados: (* 6 3600))

Archiva los trabajos del cluster cuya antigüedad sea mayor que el el número de segundos proporcionado. El valor predeterminado son 6 horas. Esto mantiene la lista proporcionada gnt-job list dentro de límites gestionables.

verify-disks? (predeterminado: #t)

Si es #f, el proceso de vigilancia (“watcher”) no intentará reparar los enlaces de DRBD rotos de manera automática. Esto significa que quienes administren el sistema deberán usar gnt-cluster verify-disks manualmente para realizar dicha tarea.

debug? (predeterminado: #f)

Cuando es #t, el guión registra información adicional para facilitar la depuración.

Variable Scheme: ganeti-cleaner-service-type

ganeti-cleaner es un guión diseñado para su ejecución periódica en la que elimina archivos antiguos del cluster. Este tipo de servicio controla dos trabajos de cron: uno para el nodo coordinador que elimina de manera permanente trabajos antiguos del cluster, y otro para todos los nodos que elimina certificados X509 y claves que hayan expirado así como información desactualizada de ganeti-watcher. Como todos los servicios de Ganeti, se puede incluir también en los nodos que no son coordinadores y se desactivará por si mismo si es necesario.

Recibe un objeto ganeti-cleaner-configuration.

Tipo de datos: ganeti-cleaner-configuration
ganeti (predeterminado: ganeti)

El paquete ganeti usado para la orden gnt-cleaner.

master-schedule (predeterminado: "45 1 * * *")

Cada cuanto se ejecuta el trabajo principal de limpieza. El valor predeterminado representa su ejecución una vez al día, a las 01:45:00.

node-schedule (predeterminada: "45 2 * * *")

La frecuencia del trabajo de limpieza del nodo. El valor predeterminado es una vez al día, a las 02:45:00.


Notas al pie

(38)

R/O: Read-Only en inglés.

(39)

R/W: Read-Write en inglés.


Siguiente: , Anterior: , Subir: Servicios   [Índice general][Índice]