KVM puede utilizar iSCSI como backend de almacenamiento, si se cuenta con una SAN (Storage Area Network) pueden asignarse LUN’s (Logical Unit Numbers) y presentarlas a las máquinas virtuales. El pool es creado en el almacenamiento pero libvirt no puede crearlo o eliminarlo.

Instalación Servidor iSCSI
Hostname: target.local
IP Address: 192.168.100.127
Comenzamos con la instalación.
]$ sudo yum install -y targetd targetcli
]$ sudo systemctl enable --now target
Habilitamos el servicio en el cortafuegos.
]$ sudo firewall-cmd --add-service=iscsi-target --permanent
]$ sudo firewall-cmd --reload
success
En este punto ya contamos con un lvm de 30 GB sin montar, en este caso /dev/vg1/lv1.
[tusysadmin@target ~]$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sr0 11:0 1 1024M 0 rom
vda 252:0 0 6G 0 disk
├─vda1 252:1 0 5G 0 part
│ ├─rl-root 253:0 0 4.4G 0 lvm /
│ └─rl-swap 253:1 0 616M 0 lvm [SWAP]
└─vda2 252:2 0 1G 0 part /boot
vdb 252:16 0 30G 0 disk
└─vdb1 252:17 0 30G 0 part
└─vg1-lv1 253:2 0 30G 0 lvm
Lanzamos la utilidad targetcli.
[root@target ~]# targetcli
targetcli shell version 2.1.53
Copyright 2011-2013 by Datera, Inc and others.
For help on commands, type 'help'.
/> ls
o- / ............................................................... [...]
o- backstores .................................................... [...]
| o- block ........................................ [Storage Objects: 0]
| o- fileio ....................................... [Storage Objects: 0]
| o- pscsi ........................................ [Storage Objects: 0]
| o- ramdisk ...................................... [Storage Objects: 0]
o- iscsi .................................................. [Targets: 0]
o- loopback ............................................... [Targets: 0]
/>
Crearemos un dispositivo de bloques, esto lo hacemos dentro de backstores/block.
/> backstores/block create vms_store /dev/vg1/lv1
Created block storage object vms_store using /dev/vg1/lv1.
/>
Creamos el IQN (iSCSI Qualified Name).
/> cd iscsi
/iscsi> create iqn.2022-05.com.target:vms
Created target iqn.2022-05.com.target:vms.
Created TPG 1.
Global pref auto_add_default_portal=true
Created default portal listening on all IPs (0.0.0.0), port 3260.
/iscsi>
Creamos el LUN asociado al bloque vms_store.
/iscsi> cd iqn.2022-05.com.target:vms/tpg1
/iscsi/iqn.20...rget:vms/tpg1> luns/ create /backstores/block/vms_store
Created LUN 0.
/iscsi/iqn.20...rget:vms/tpg1>
Ahora creamos una ACL (Access Control List) en el que indicamos el IQN del cliente al que presentaremos la LUN.
/iscsi/iqn.20...rget:vms/tpg1> acls/ create iqn.2022-05.com.iniciator:vms
Created Node ACL for iqn.2022-05.com.iniciator:vms
Created mapped LUN 0.
/iscsi/iqn.20...rget:vms/tpg1>
Salimos de targetcli y verificamos que el puerto este abierto.
[tusysadmin@target ~]$ ss -an | grep 3260
tcp LISTEN 0 256 *:3260 *:*
Configurar iniciador
Ahora toca configurar el iniciador iSCSI en nuestro servidor de máquinas virtuales para posteriormente presentarlo a KVM.
[tusysadmin@localhost ~]$ sudo yum install iscsi-initiator-utils -y
Editamos el archivo initiatorname.iscsi
~]$ sudo vi /etc/iscsi/initiatorname.iscsi
En este archivo ponemos el nombre que anteriormente agregamos en la ACL.
InitiatorName=iqn.2022-05.com.iniciator:vms
Probamos la configuración.
[tusysadmin@localhost ~]$ sudo iscsiadm -m discovery -t st -p target.local
192.168.100.127:3260,1 iqn.2022-05.com.target:vms
Hacemos el login al target.
~]$ sudo iscsiadm --mode node --targetname iqn.2022-05.com.target:vms --portal target.local --login
Logging in to [iface: default, target: iqn.2022-05.com.target:vms, portal: 192.168.100.127,3260]
Login to [iface: default, target: iqn.2022-05.com.target:vms, portal: 192.168.100.127,3260] successful.
Crear el pool
Con la conexión establecida a nuestra servidor de maquina virtuales ya podemos crear el pool iSCSI y usarlo en nuestras maquinas virtuales. Creamos el archivo iscsipool.xml con el siguiente contenido.
<pool type='iscsi'>
<name>iscsipool</name>
<source>
<host name='192.168.100.127'/>
<device path='iqn.2022-05.com.target:vms'/>
</source>
<initiator>
<iqn name='iqn.2022-05.com.iniciator:vms' />
</initiator>
<target>
<path>/dev/disk/by-path</path>
</target>
</pool>
Básicamente es la información del target y del iniciador lista para ser agregada a KVM. Ahora definimos, iniciamos y auto iniciamos el pool.
[tusysadmin@localhost ~]$ sudo virsh pool-define --file iscsipool.xml
El grupo iscsipool ha sido definido desde iscsipool.xml
[tusysadmin@localhost ~]$ sudo virsh pool-start --pool iscsipool
Se ha iniciado el grupo iscsipool
[tusysadmin@localhost ~]$ sudo virsh pool-autostart --pool iscsipool
El grupo iscsipool ha sido marcado como iniciable automáticamente
Listamos el pool la información de el mismo.
[tusysadmin@localhost ~]$ sudo virsh pool-info iscsipool
Nombre: iscsipool
UUID: 80ba818f-14da-4c77-aee4-55f82dcefc34
Estado: ejecutando
Persistente: si
Autoinicio: si
Capacidad: 30.00 GiB
Ubicación: 30.00 GiB
Disponible: 0.00 B
Con esto, el pool ya puede ser usado en KVM como otro pool para presentarse a las maquinas virtuales.
