Cómo usar Ansible para automatizar el administrador de volumen lógico (LVM) en Linux

2

Como parte de la serie LVM hemos visto cómo exportar e importar volúmenes lógicos entre diferentes máquinas en el artículo anterior. En este artículo veremos cómo use ansible para automatizar la configuración del administrador de volumen lógico (LVM) en linux

Ansible es una herramienta de automatización simple y fácil de usar que ofrece diferentes módulos para trabajar con la administración de discos en Linux. Cuando tiene más máquinas para instalar y configurar el sistema operativo con la misma configuración, ansible es de gran utilidad. Un caso de uso particular que se me ocurre es cuando está creando un clúster en el que todos los servidores tienen el mismo espacio de almacenamiento y necesitan el mismo esquema de partición LVM.

La creación manual de un volumen lógico consta de 4 pasos.

  • PASO 1: Inicialice la unidad como el volumen físico.
  • PASO 2: Cree un grupo de volúmenes para el volumen físico.
  • PASO 3: Cree el volumen lógico a partir del grupo de volúmenes.
  • ETAPA 4: Formatee el volumen lógico y monte el sistema de archivos.

Para aprender cómo realizar los 4 pasos anteriores manualmente, eche un vistazo a nuestro artículo de introducción a LVM.

Guía de Linux Logical Volume Manager (LVM) para principiantes

Como primer paso, debe recopilar información relacionada con el disco para el host de destino. Esta es una tarea útil cuando desea decidir la asignación de espacio dinámicamente.

Puede hacerlo manualmente o usar el mecanismo de hechos ansible que recopila los hechos relacionados con el disco. El siguiente libro de jugadas recuperará la información relacionada con el disco del host de destino.

                      ---
- name: LVM Setup
 hosts: localhost
 connection: local
 gather_facts: true

 tasks:
   - name: Collect stats for hardware
     ansible.builtin.setup:
       gather_subset:
         - hardware

   - name: Print the stat output for devices
     ansible.builtin.debug:
       var: hostvars[inventory_hostname].ansible_devices
                    

El libro de jugadas anterior recopilará primero los detalles del hardware utilizando el configuración módulo. En la segunda tarea, la salida de ansible_devices solo se imprimirá.

Recopile información relacionada con el almacenamiento de Ansible Facts

Además, puede aplicar todo tipo de filtros según sus requisitos para obtener datos específicos y calcular valores dinámicos para nuevas creaciones de particiones. Para examplela siguiente tarea imprimirá todos los dispositivos que comienzan con sd* y su tamaño .

                      - name: Print the disk size only for sd disks
 ansible.builtin.debug:
   msg: "{{ ansible_devices[item].size }}"
 loop: "{{ ansible_devices.keys() | map('regex_search', 'sd.*') | select('string') | list }}"
                    

Como solo tengo un disco, imprime el sda tamaño del disco

                      TASK [Print the disk size only for sd disks] **********************************************
ok: [localhost] => (item=sda) => {
    "msg": "931.51 GB"
}
                    

Guía de Ansible para crear LVM

Usaré el siguiente libro de jugadas para la demostración. Puede replicar el mismo código cambiando el nombre del disco y el tamaño de la partición según sus requisitos. Lo guiaré a través de cada tarea en el libro de jugadas con su salida en las secciones subsiguientes.

                      ---
- name: LVM Testing
 hosts: localhost
 become: true
 gather_facts: False

 tasks:
   - name: Partition /dev/sdd disk
     community.general.parted:
       device: /dev/sdd
       number: 1
       flags: [ lvm ]
       state: present
       part_end: 5GiB

   - name: Task for PV and VG
     community.general.lvg:
         vg: ostechnixlab
         pvs: /dev/sdd1

   - name: Logical volume with 1GB size
     community.general.lvol:
       vg: ostechnixlab
       lv: labpart1
       size: 1G

   - name: Format the volume with ext4 fs
     community.general.filesystem:
       fstype: ext4
       dev: /dev/ostechnixlab/labpart1

   - name: Target directory under /opt/
     ansible.builtin.file:
       path: /opt/lvm_test/
       state: directory
       mode: '0755'

   - name: mount the lv on /data1
     ansible.posix.mount:
       path: /opt/lvm_test/
       src: /dev/ostechnixlab/labpart1
       fstype: ext4
       state: mounted
                    

Crear volumen usando el módulo Parted

Como primer paso, debe crear un volumen desde el disco sin formato con lvm como el tipo . Puede usar todo el disco o particionar más el disco y usar solo esa partición en particular para LVM.

Usos de Ansible módulo separado para crear particiones. Esto es similar a comando separado en Linux que se utiliza para configurar particiones de dispositivos.

Aviso: parted en un módulo comunitario que se envía con el community.general espacio de nombres Si no tiene módulos comunitarios instalados, instálelos usando el siguiente comando.

                      $ ansible-galaxy collection install community.general
                    

tengo un disco /dev/sdd con 15GB en tamaño.

                      
                        $ lsblk /dev/sdd
                      
                      
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdd    8:48   0  15G  0 disk 
                    

Voy a crear una partición que es /dev/sdd1 de tamaño 5GB . La siguiente tarea utiliza el parted modulo a particionar /dev/sdd1 de 5GB con lvm como tipo .

  • dispositivo: Proporcione el nombre del dispositivo de bloque como /dev/sda , /dev/sdb etc.
  • número: El número de particiones que se crearán. Aquí se establece como 1 .
  • banderas: Establece el tipo de su partición. En este caso lo es LVM .
  • estado: Establecer el estado en present creará la partición.
  • parte_fin: Tamaño de la partición.
                      - name: Partition /dev/sdd disk
 community.builtin.parted:
   device: /dev/sdd
   number: 1
   flags: [lvm]
   state: present
   part_end: 5GiB
                    

A continuación se muestra el resultado de la tarea anterior.

Crear volumen usando el módulo Parted

ejecutar el lsblk comando para comprobar la partición.

                      
                        $ lsblk /dev/sdd
                      
                      
NAME   MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdd      8:48   0  15G  0 disk 
└─sdd1   8:49   0   5G  0 part 
                    

Crear volumen físico y grupo de volúmenes

El siguiente paso es inicializar /dev/sdd1 como volumen físico y agregarlo a un grupo de volúmenes. Utilizar el modulo lvg que también se mantiene bajo el espacio de nombres community.general.

La siguiente tarea se inicializará /dev/sdd1 como volumen físico y agréguelo al grupo de volúmenes denominado ostechnixlab .

                      - name: Task for PV and VG
  lvg:
      vg: ostechnixlab
      pvs: /dev/sdd1
                    

A continuación se muestra el resultado de la tarea anterior.

Crear volumen físico y grupo de volúmenes Crear volumen físico y grupo de volúmenes

También puede inicializar varios volúmenes físicos y agregarlos al grupo de volúmenes.

                      - name: Task for PV and VG
  lvg:
      vg: ostechnixlab
      pvs: /dev/sdd1, /dev/sdd2, /dev/sdd3
                    

También puede definir el tamaño de la extensión. De forma predeterminada, está configurado para 4 MB .

                      - name: Task for PV and VG
  lvg:
      vg: ostechnixlab
      pvs: /dev/sdd1, /dev/sdd2, /dev/sdd3
      pesize: 8
                    

Puede verificar el estado del grupo de volúmenes ejecutando el siguiente comando.

                      
                        $ sudo vgs ostechnixlab
                      
                      
  VG           #PV #LV #SN Attr   VSize  VFree 
  ostechnixlab   1   0   0 wz--n- <5.00g <5.00g
                    

Crear volumen lógico

El siguiente paso es crear el volumen lógico utilizando el mantenimiento de la comunidad módulo lvol .

En la siguiente tarea, estoy creando un volumen lógico llamado lbapart1 del grupo de volumen ostechnixlab . El tamaño total del grupo de volúmenes es 5GB y el volumen lógico se establece en 1 GB en tamaño.

                      - name: Logical volume with 1GB size
  community.general.lvol:
    vg: ostechnixlab
    lv: labpart1
    size: 1G
                    

A continuación se muestra el resultado de la tarea anterior.

Crear volumen lógico Crear volumen lógico

ejecutar el lvs Comando para comprobar el volumen creado.

                      
                        $ sudo lvs
                      
                      
   LV       VG            Attr       LSize Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  labpart1 ostechnixlab  -wi-a----- 1.00g    
                    

Monte el volumen lógico

En este paso, montará el volumen lógico para comenzar a consumirlo. En primer lugar, debe formatear el volumen con cualquier tipo de sistema de archivos compatible y montar el volumen.

Dividiré los pasos anteriores en 3 tareas.

  1. La primera tarea formateará el volumen con el ext4 sistema de archivos Para esto módulo de sistema de archivos debe utilizarse, que es parte de la community.general espacio de nombres
  2. La segunda tarea utilizará el módulo de archivo para crear un directorio con el volumen que se montará. Para ello se debe utilizar el módulo de archivo que forma parte del ansible.builtin espacio de nombres
  3. La tercera tarea montará el volumen formateado en el sistema de archivos que creamos en la segunda tarea. Para esto, el módulo de montaje debe utilizarse, que es parte de la ansible.posix espacio de nombres
                      - name: Format the volume with ext4 fs
  community.general.filesystem:
   fstype: ext4
   dev: /dev/ostechnixlab/labpart1

- name: Target directory under /opt/
  ansible.builtin.file:
   path: /opt/lvm_test/
   state: directory
   mode: '0755'

- name: mount the lv on /data1
 ansible.posix.mount:
   path: /opt/lvm_test/
   src: /dev/ostechnixlab/labpart1
   fstype: ext4
   state: mounted
                    

A continuación se muestra el resultado de las tareas anteriores.

Montar volumen lógico Montar volumen lógico

Puedes usar el mount y/o df Comando para verificar el tipo de sistema de archivos y el estado de montaje.

                      
                        $ mount | grep -i labpart1
                      
                      
/dev/mapper/ostechnixlab-labpart1 on /opt/lvm_test type ext4 (rw,relatime)
                    
                      
                        $ df -h /opt/lvm_test/
                      
                      
Filesystem                         Size  Used Avail Use% Mounted on
/dev/mapper/ostechnixlab-labpart1  974M   24K  907M   1% /opt/lvm_test
                    

Conclusión

En este artículo hemos visto cuáles son los diferentes módulos de ansible que podemos utilizar para crear particiones, volumen lógico y montar el sistema de archivos. Puede crear un rol dedicado para LVM y reutilizarlo dinámicamente en diferentes entornos simplemente pasando argumentos.

Related Posts