githubixx.iscsi_target

ansible-role-iscsi_target

此角色在 Linux 主机上使用 targetcli 配置基于 Linux-LIO 的 iSCSI 目标。此外,此角色还包含 Python 模块以与 targetcli 命令交互,可以单独用于更高级的操作。模块实现了检查、创建和删除功能。

测试过的系统:

  • Ubuntu 20.04
  • Ubuntu 22.04
  • Archlinux

关于 LIO 和 Target 的文档可以在 这里 找到。

需求

此角色不创建任何磁盘、分区或逻辑卷(LV)。预期这些已经存在于机器上,或者由其他角色创建。例如:githubixx.lvm

更新日志

请查看 CHANGELOG

角色变量

# iSCSI 目标通过嵌套变量 "iscsi_targets" 配置。
# 一个相当简单的设置如下示例:
#
# iscsi_targets:
#   - name: "iqn.2021-11.blog.tauceti:{{ ansible_facts['nodename'] }}"
#     disks:
#       - name: lun_node1
#         path: /dev/vdb
#         type: block
#         lunid: 0
#     initiators:
#       - name: iqn.2021-07.blog.tauceti:node1
#         authentication:
#           userid: node1user
#           password: node1pw
#           userid_mutual: node1sharedkey
#           password_mutual: node1sharedsecret
#         mapped_luns:
#           - mapped_lunid: 0
#             lunid: 0
#     portals:
#       - ip: "0.0.0.0"
#
# 更多信息请见 README。
iscsi_targets: []

上述配置将创建一个 iSCSI 设置,其输出将如下所示(使用 targetcli 'ls' 生成的输出):

# o- / .................................................................................... [...]
#   o- backstores ......................................................................... [...]
#   | o- block ............................................................. [存储对象: 1]
#   | | o- lun_node1 ................................... [/dev/vdb (1.0GiB) 写入通过激活]
#   | |   o- alua .............................................................. [ALUA 组: 1]
#   | |     o- default_tg_pt_gp .................................. [ALUA 状态: 活动/优化]
#   | o- fileio ............................................................ [存储对象: 0]
#   | o- pscsi ............................................................. [存储对象: 0]
#   | o- ramdisk ........................................................... [存储对象: 0]
#   o- iscsi ....................................................................... [目标: 1]
#   | o- iqn.2021-11.blog.tauceti:ubuntu .............................................. [TPGs: 1]
#   |   o- tpg1 .......................................................... [无生成 ACLs, 没有认证]
#   |     o- acls ..................................................................... [ACLs: 1]
#   |     | o- iqn.2021-07.blog.tauceti:node1 .................................. [已映射 LUNs: 1]
#   |     |   o- mapped_lun0 ........................................ [lun0 block/lun_node1 (rw)]
#   |     o- luns ..................................................................... [LUNs: 1]
#   |     | o- lun0 ............................. [block/lun_node1 (/dev/vdb) (default_tg_pt_gp)]
#   |     o- portals ............................................................... [门户: 1]
#   |       o- 0.0.0.0:3260 ................................................................ [OK]
#   o- loopback .................................................................... [目标: 0]
#   o- vhost ....................................................................... [目标: 0]
#   o- xen-pvscsi .................................................................. [目标: 0]

iscsi_targets.name 指定了 iSCSI 目标的名称(可以说是 iSCSI 服务器)。如上所示,此条目将在 targetcli 输出的 iscsi 节点下出现。

disks 用于创建一个或多个块存储对象。在这种情况下,它将被称为 lun_node1,LUN ID 将为 0。存储类型将是一个 block 设备,在这个例子中位于 /dev/vdb。当然,这个设备也可以(可能应该)是一个逻辑卷。

initiators 定义了所有 iSCSI 发起者(iSCSI 客户端——如果你愿意的话,想要访问上面指定的 iSCSI 目标)。每个想要连接到 iSCSI 目标(服务器)的 iSCSI 发起者主机(客户端)都需要在这里有一个条目。iSCSI 发起者名称通常可以在每个发起者(客户端)的 /etc/iscsi/initiatorname.iscsi 中找到,前提是已经安装了 open-iscsi 软件包。authentication 对象包含 useridpassword,可选地也包含 userid_mutualpassword_mutual

mapped_luns 将映射的 LUNs(逻辑单元)分配给发起者。通常 mapped_lunidlunid 匹配 iscsi_targets.disks 中相同的 lunid。但也可以不同。

portals 允许指定 iSCSI 目标服务应监听的 IP 地址。例如,如果指定 0.0.0.0,则服务将在 3260 端口上监听所有接口。当然,也可以使用 Ansible 事实,例如 {{ ansible_default_ipv4.address | default(ansible_all_ipv4_addresses[0]) }}

#######################################
# 仅适用于 Archlinux 的设置
#######################################

# 配置 iSCSI 目标需要 "targetcli-fb" 包。对于 Archlinux
# 此包需要从 AUR 安装。这需要像 "yay"、"paru"、"pacaur"、"trizen" 或 "pikaur" 这样的 AUR 安装助手。如果在目标主机上已经安装了这样的助手,那么就不需要通过此角色安装它。
# 在这种情况下,"iscsi_archlinux_aur_helper" 需要设置为 ""(空字符串),此角色将跳过 AUR 助手的安装。
# 安装任务选择上述提到的 AUR 辅助程序之一(按顺序)来安装 iSCSI 包。
iscsi_archlinux_aur_helper: yay

# 尽管 Ansible 期望以 root 身份进行 SSH,但 makepkg 或 AUR 辅助程序不允许以 root 执行操作,它们会失败并显示 "you cannot perform this
# operation as root"。因此,建议有一个非 root 的用户,但不需要密码。如果设置了 "iscsi_archlinux_aur_helper"
# 变量,则假定 AUR 助手用户尚不存在,因此将创建该用户。该用户将成为 "wheel" 组的一部分。
iscsi_archlinux_aur_helper_user: aur_builder

依赖项

对于 Archlinux,使用 kewlfft.aur Ansible 集合来 1) 安装 AUR 助手,例如 yay,以及 2) 从 Archlinux 用户仓库安装 targetcli 工具。

示例剧本

- hosts: your-host
  become: true
  gather_facts: true
  roles:
    - githubixx.iscsi_target
  vars:
    iscsi_targets:
      - name: "iqn.2021-11.blog.tauceti:{{ ansible_facts['nodename'] }}"
        disks:
          - name: lun_node1
            path: /dev/vdb
            type: block
            lunid: 0
        initiators:
          - name: iqn.2021-07.blog.tauceti:node1
            authentication:
              userid: node1user
              password: node1pw
              userid_mutual: node1sharedkey
              password_mutual: node1sharedsecret
            mapped_luns:
              - mapped_lunid: 0
                lunid: 0
        portals:
          - ip: "0.0.0.0"

测试

此角色有一个小型测试设置,使用 Molecule、libvirt(vagrant-libvirt)和 QEMU/KVM 创建。请参阅我的博客文章 使用 Molecule、libvirt(vagrant-libvirt)和 QEMU/KVM 测试 Ansible 角色 了解设置方法。测试配置可以在 这里 找到。

之后可以执行摩尔生:

molecule converge

这将设置几个虚拟机(VM),使用不同受支持的 Linux 操作系统,并安装 iscsi_target 角色。

要进行一些测试:

molecule verify

要清理,请运行

molecule destroy

许可证

MIT/BSD

作者信息

原始作者:Ondrej Famera ansible.targetcli
附加作者:Ricardo Sanchez ansible-role-iscsi_target
附加作者(此角色版本):https://www.tauceti.blog

关于项目

Configure iSCSI target role

安装
ansible-galaxy install githubixx.iscsi_target
许可证
mit
下载
4.5k
拥有者
Senior System Engineer - Python, Go, Cloud, Kubernetes, Commodore, Retro, 80's ;-)