RH358访问基于块的网络存储--自动化配置iSCSI initiator

IT民工金鱼哥
运维领域新星创作者
2022-01-22 23:53:15

RH358访问基于块的网络存储--自动化配置iSCSI initiator

本章节介绍如何使用Ansible连接iSCSI存储和管理。

RH358专栏地址:https://blog.csdn.net/qq_41765918/category_11532281.html

目录

RH358访问基于块的网络存储--自动化配置iSCSI initiator

1. 使用Ansible连接iSCSI Targets

2. 格式化iSCSI设备

3. 课本练习

总结


1. 使用Ansible连接iSCSI Targets

使用Ansible open_iscsi模块发现并登录远程iSCSl target。该模块依赖于iscsiadm命令,该命令由iscsi-initiator-utils包提供。

下面的剧本演示了如何使用open_iscsi模块。

---
- name: Ensure logged in to iSCSI target on 192.168.0.10
  hosts: host.example.com
  become: true
  
  tasks:
- name: the iscsi-initiator-utils package is installed
# 使用Ansible yum模块安装iscsi-initiator-utils包。
      yum:
        name: iscsi-initiator-utils
        state: present
        
- name: the IQN is set for the initiator
# 使用copy或template模块在/etc/iscsi/ initiatorname.iscsi文件中设置启动器IQN。本例中的任务使用ansible_facts['hostname ']变量中的系统短主机名来设置IQN中的可选字符串。当IQN发生变化时,任务通知restart iscsid处理器重新启动iscsid服务
      copy:
        dest: /etc/iscsi/initiatorname.iscsi
        content: "InitiatorName=iqn.2014-06.com.example:{{ ansible_facts['hostname'] }}\n"
        mode: '644'
        owner: root
        group: root
      notify: restart iscsid
      
- meta: flush_handlers
# flush_handlers元任务强制通知的处理程序在该点运行。如果上述任务更改了IQN,则启动器登录目标器之前必须运行重启iscsid服务的处理程序。
    
- name: the iSCSI target is discovered and available
#使用 open_iscsi 模块来 discover 并 login 到指定的 target。discover: yes 选项执行发现,但是 target: iqn.2014-06.com.example:rack1 和 login: yes 执行登录特定的IQN(如果可用)。通过 register 指令记录输出,可在后续任务中引用这些设备
      open_iscsi:
        portal: 192.168.0.10
        port: '3260'
        target: iqn.2014-06.com.example:rack1
        discover: yes
        login: yes
      register: target
      
- name: display the discovered devices
# debug任务显示目标变量的内容。这对play来说不是必要的,但是显示了open_iscsi模块可以通过注册变量提供的信息。
      debug:
        var: target
        
  handlers:
    - name: restart iscsid
      service:
        name: iscsid
        state: restarted

下面的输出显示了剧本的执行。

[root@host ~]$ ansible-playbook playbook.yml
PLAY [Ensure the iSCSI target on host is discovered] *********************
​
TASK [Gathering Facts] ***************************************************
ok: [host.example.com]
​
TASK [the iscsi-initiator-utils package is installed] ********************
changed: [host.example.com]
​
TASK [the IQN is set for the initiator] **********************************
changed: [host.example.com]
​
RUNNING HANDLER [restart iscsid] *****************************************
changed: [host.example.com]
​
TASK [the iSCSI target is discovered and available] **********************
changed: [host.example.com]
​
TASK [display the discovered devices] ************************************
ok: [host.example.com] => {
    "target": {
        "automatic_changed": false,
        "cache_updated": true,
        "changed": true,
        "connection_changed": true,
        "devicenodes": [
            "/dev/sdc",
            "/dev/sde",
            "/dev/sdd"
        ],
        "failed": false
    }
}
​
PLAY RECAP ******************************************************************
host.example.com : ok=6 changed=4 unreachable=0 failed=0 ...

target变量包含open_iscsi模块任务的注册输出的字典。在该字典中,devicenodes变量包含使用门户192.168.0.10:3260执行发现后创建的本地设备列表。您可以使用loop遍历target['devicenodes ']中的列表,或者尝试直接从列表中提取特定项。

例如,要获取列表中第一项的值,可以使用该变量目标器'devicenodes',值为/dev/sdc,第二个项目可以作为目标'devicenodes '引用(在前面的例子中它的值是/dev/sdd)。很多时候,目标只提供一个LUN,您可以只引用列表中的第一项。

当目标提供多个设备时,例如在前面的输出中,没有简单的方法从列表中识别特定的设备。一种解决方案是在open_iscsi任务之后调用setup模块来刷新Ansible事实。ansible_facts['devices']字典对系统上所有设备的信息进行分组,并提供关于新设备的详细信息。

[root@host ~]$ ansible host.example.com -m setup
...output omitted...
        "ansible_devices": {
            "sdc": {
                "holders": [],
                "host": "",
                "links": {
                    "ids": [
                        "scsi-36001405b1c74dbfcce04ccda76f8c21f",
                        "wwn-0x6001405b1c74dbfcce04ccda76f8c21f"
                    ],
                    "labels": [],
                    "masters": [],
                    "uuids": []
                },
                "model": "target.disk1",
                "partitions": {},
                "removable": "0",
                "rotational": "1",
                "sas_address": null,
                "sas_device_handle": null,
                "scheduler_mode": "mq-deadline",
                "sectors": "2097152",
                "sectorsize": "512",
                "size": "1.00 GB",
                "support_discard": "0",
                "vendor": "LIO-ORG",
                "virtual": 1,
                    "wwn": "0x6001405b1c74dbfcce04ccda76f8c21f"
                },
            "sdd": {
                "holders": [],
                "host": "",
                "links": {
                    "ids": [
                        "scsi-360014058f584b514fe943b59d9931965",
                        "wwn-0x60014058f584b514fe943b59d9931965"
                ],
                ...output omitted...

断开与 target 的连接

使用 open_iscsi 模块来从远程 iSCSI target 注销。将 discover、login 和 auto_node_startup 参数设置为 no。以下任务会将 initiator 从 iqn.2014-06.com.example:rack1 target 断开连接

- name: the iSCSI target is disconnected
  open_iscsi:
    portal: 192.168.0.10
    port: '3260'
    target: iqn.2014-06.com.example:rack1
    discover: no
    login: no
    auto_node_startup: no

2. 格式化iSCSI设备

rhel-system-roles包提供了Ansible存储系统角色,可以使用该角色格式化和持久地挂载新设备。

该角色可以在未分区的磁盘上设置LVM,或者直接用文件系统格式化该磁盘。角色在整个磁盘上工作。它不能创建分区,也不能使用已经分区的磁盘。

下面的脚本使用存储系统角色将/dev/sdc磁盘格式化和持久挂载/data下。

---
- name: Ensure the device is formatted and mounted
  hosts: host.example.com
  become: true
    
  roles:
    - role: rhel-system-roles.storage
      storage_volumes:
        - name: datadisk
          state: present
          type: disk
# type参数指定角色是在磁盘(LVM)上设置LVM,还是直接格式化整个磁盘(disk)。
          disks:
# disks参数列出了需要配置的设备。在配置LVM时,角色将这些磁盘作为物理卷使用。如果将type设置为disk,则只能在该列表中提供一个磁盘。
            - sdc
          mount_point: /data
# mount_point参数提供文件系统挂载点。如果目录不存在,角色将创建该目录。
          fs_type: ext4
# 参数fs_type表示文件系统类型。
          mount_options: '_netdev'
# mount_options参数提供了挂载选项。角色将这些选项添加到/etc/fstab

警告:如果修改角色以在fs_type参数中指定不同的格式,然后重新运行playbook,角色将用新的文件系统类型重新格式化设备。此操作将破坏旧文件系统上以前的所有数据。

 

擦除iSCSI设备

可以使用Ansible存储系统角色卸载和擦除文件系统。为此,将state参数设置为absent。

roles:
  - role: rhel-system-roles.storage
    storage_volumes:
      - name: datadisk
        state: absent
        type: disk
        disks:
        - sdc
        mount_point: /data
        fs_type: ext4
        mount_options: '_netdev'

警告:如果state设置为absent,存储系统角色将卸载文件系统,将其从/etc/fstab中删除,并销毁设备上的所有数据。要持久地卸载文件系统,但保留其数据,请使用state设置为absent的Ansible mount模块。下面的任务使用mount模块卸载/data,并从/etc/fstab中删除它的条目。

- name: the device is not mounted
  mount:
    path: /data
    state: absent

 

3. 课本练习

[student@workstation ~]$ lab iscsi-automation start

在本练习中,您将使用Ansible在服务器上配置iSCS Iinitiator来访问服务器提供的target。将生成的块设备格式化并挂载到/data下。

1. 熟悉项目及其现状。

[student@workstation ~]$ cd /home/student/iscsi-automation
[student@workstation iscsi-automation]$ tree
.
├── ansible.cfg
├── cleanup.yml
├── inventory
├── playbook.yml
├── solution
│   └── playbook.yml
├── templates
│   └── initiatorname.iscsi.j2
└── unmount.yml
​
2 directories, 7 files

2. 回顾并完成playbook.yml Ansible剧本。

该脚本在服务器上配置iSCSI启动器,从服务器发现并登录iSCSI目标,然后将新的块设备格式化并挂载在/data下。

[student@workstation iscsi-automation]$ cat playbook.yml 
---
- name: Ensure /data is mounted from serverd iSCSI target
  hosts: initiators
  become: true
​
  tasks:
    - name: the iscsi-initiator-utils package is installed
      yum:
        name: iscsi-initiator-utils
        state: present
​
    - name: the IQN is set for the initiator
      template:
        dest: /etc/iscsi/initiatorname.iscsi
        src: templates/initiatorname.iscsi.j2
        mode: '644'
        owner: root
        group: root
      notify: restart iscsid
​
    # Forces the handler to run so that the iscsid service is restarted
    # and is aware of the new initiator IQN
    - meta: flush_handlers
​
    - name: the iSCSI target is discovered and available
      open_iscsi:
        portal: 172.25.250.13
        port: '3260'
        target: iqn.2014-06.com.example:serverd
        discover: yes
        login: yes
      register: target
​
    - name: display the discovered devices
      debug:
        var: target['devicenodes']
​
    - name: the new device is formatted and mounted under /data
      include_role:
        name: rhel-system-roles.storage
      vars:
        storage_volumes:
          - name: devdata
            state: present
            type: disk
            disks:
              - "{{ target['devicenodes'][0] }}"
            mount_point: /data
            fs_type: xfs
            mount_options: '_netdev'
​
  handlers:
    - name: restart iscsid
      service:
        name: iscsid
        state: restarted

3. 验证剧本的语法并运行。

[student@workstation iscsi-automation]$ ansible-playbook playbook.yml --syntax-check
​
playbook: playbook.yml
[student@workstation iscsi-automation]$ ansible-playbook playbook.yml

4. 在servera上,检查/data下的文件系统是否可以访问。

在该目录中创建一个测试文件,以确认可以向文件系统写入数据。

[root@servera ~]# lsblk --fs
NAME   FSTYPE LABEL UUID                                 MOUNTPOINT
sda    xfs          e2afea80-317e-40f2-a3d3-d4168929795d /data
vda                                                      
└─vda1 xfs          f7614c41-2835-4125-bb13-50772dc2f30c /
vdb        
[root@servera ~]# echo Hello World > /data/test.txt
[root@servera ~]# cat /data/test.txt
Hello World

5. 在workstation上检查unmount.yml的剧本和运行它。

这个剧本卸载服务器上的数据,然后从iSCSI目标退出。

[student@workstation iscsi-automation]$ cat unmount.yml 
---
- name: Ensure /data is not mounted
  hosts: initiators
  become: true
​
  tasks:
    - name: the new device is not mounted
      mount:
        path: /data
        state: absent
​
    - name: the iSCSI target is disconnected
      open_iscsi:
        portal: 172.25.250.13
        port: '3260'
        target: iqn.2014-06.com.example:serverd
        discover: no
        login: no
        auto_node_startup: no
[student@workstation iscsi-automation]$ ansible-playbook unmount.yml
​
[root@servera ~]# lsblk --fs
NAME   FSTYPE LABEL UUID                                 MOUNTPOINT
vda                                                      
└─vda1 xfs          f7614c41-2835-4125-bb13-50772dc2f30c /
vdb   

6. 运行playbook.yml重新发现并再次登录目标。

Ansible存储系统角色检测到设备已经有一个文件系统,不会重新格式化它。

[student@workstation iscsi-automation]$ ansible-playbook playbook.yml
​
[root@servera ~]# lsblk --fs
NAME   FSTYPE LABEL UUID                                 MOUNTPOINT
sda    xfs          e2afea80-317e-40f2-a3d3-d4168929795d /data
vda                                                      
└─vda1 xfs          f7614c41-2835-4125-bb13-50772dc2f30c /
vdb                         
[root@servera ~]# ls /data
test.txt
[root@servera ~]# cat /data/test.txt
Hello World

完成实验

[student@workstation ~]$ lab iscsi-automation finish

 

总结

  • 介绍如何使用Ansible连接iSCSI Targets。

  • 介绍如何使用Ansible断开和格式化iSCSI设备。

  • 若喜欢金鱼哥的文章,顺手点个赞。也可点个关注,因为后续会不断上干货。

 

...全文
142 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复
《企业级 VMware vSphere 6.7虚拟化技术配置与管理》课程共分为“上集”和“下集”两部分,本套视频为“上集”部分,从零基础讲起,由浅入深,是虚拟化入门与提高学习推荐课程。 通过本课程学习,可以全面、深入、系统掌握vSphere产品的规划、设计、安装、配置、管理等相关技能。结合课程实战,深入理解软件定义计算、存储网络相关概念和运维技能。 《企业级 VMware vSphere虚拟化技术配置与管理》上集部分具体课程章节如下。 第1章 《vSphere技术基础》主要内容本章我们从理论上描述了虚拟化技术。第一部分重点讲解了什么是虚拟化技术;什么是vSphere。第二部分重点讲解了vSphere的设计思想,从虚拟化层、管理层、接口层进一步展开分析,使从业学习人员从技术层面对VMware vSphere进行深层次学习。 第2章 《VMware ESXi 安装和设置》主要内容本章我们重点讲解了两部分内容,第一部分主要讲解了安装ESXi程序的准备工作及安装过程。第二部分主要讲解了ESXi服务器的基本设置。这些内容是成为VMware工程师的必备技能,也是基础要求,希望各位朋友认真学习,踏实实践。 第3章 《vSphere Host Client管理单台ESXi主机》主要内容本章我们主要讲解了通过vSphere Host Client管理单台ESXi主机相关技能。包括vSphere Host Client的版本情况,基本理论知识;结合理论知识,重点给大家演示了使用vSphere Host Client对ESXi主机进行管理、对虚拟机进行管理、对网络进行管理、对存储进行管理等内容。操作内容比较多,希望朋友们认真理解理论知识的同时,踏实做好每一个实验,用实验检验理论,通过理论指导实践。 第4章 《vCenter Server 安装和设置》主要内容本章我们从理论上讲解了vCenter Server的安装类型、安装要求、安装分类、安装涉及到的组件和服务。在理论的基础上,我们分类分步进行了各种模型的构建,这些构建模型包括:* Windows环境部署具有嵌入式PSC的vCenter Server;* Windows环境部署具有外部PSC和外部SQL Server数据库的vCenter Server;* Linux环境部署具有嵌入式PSC的VCSA;* Linux环境部署具有外部PSC的VCSA。本章内容理论丰富,实验详细。希望朋友们认真学习理论说明,跟做章节中涉及的每一个实验,边看边做边总结。最终能够形成自己的知识。注释:PSC:亦指Platform Services ControllerVCSA:亦指vCenter Server Appliance 第5章 《vCenter Server基本配置和主机管理》 主要内容本章我们从理论上讲解了vSphere在数据中心的物理结构、软件组件、客户端使用界面、受管清单对象、可选vCenter Server组件和vCenter Server插件。在理论的基础上,详细介绍了vSphere Client的基本使用,包括对vCneter Server的管理操作、常规配置、高级属性定义、群集对象操作、vSphere标记和属性等。 第6章 《VMware vSphere 6.7 网络配置与管理》 主要内容软件定义网络,是虚拟化技术中的重要知识点。本章我们主要讲解了VMware vSphere网络配置与管理。通过大量的理论和图例详细阐述了虚拟化环境中的网络模型和工作流程。课程中,我们对VMware vSphere虚拟化环境中的标准交换机和分布式交换机进行了分类讲解,并详细演示了涉及到的每一个实验。虽然理论和实践都做了比较详尽讲解,但对于初学者仍有一点的难度。克服困难的最好方式就是多做实验,验证理论。可谓实验三遍,其义自见。 第7章 《VMware vSphere 6.7 存储配置与管理》 主要内容本章我们通过理论结合实践的方式讲解了 VMware ESXi和 VMware vCenter Server提供的虚拟化和软件定义的存储技术。这些技术细节包括:将ESXi与iSCSI SAN配合使用;为VMware ESXi配置iSCSI共享存储;管理虚拟化环境中的存储设备;使用虚拟闪存读取缓存;在虚拟化环境中使用数据存储;虚拟化环境中的多路径和故障切换技术;裸设备映射技术;存储置备和空间回收技术;管理存储I/O资源。大家在学习过程中,可以以此为参考,构建自己的环境,逐步熟练课程中的术语和操作技能。 第8章 《VMware vSphere 6.7 虚拟机配置与管理》 主要内容本章我们对VMware vSphere 环境中部署虚拟机、部署 OVF 和 OVA 模板、使用内容库、配置虚拟机硬件、配置虚拟机选项、使用 vSphere vApp 管理多层应用程序、编辑虚拟机启动和关机设置等做了全面介绍。希望大家在掌握理论的基础上,参照课程实践部分,独立完成各个实验操作。 后续:在理论知识扎实,实践操作到位的情况下,《企业级 VMware vSphere虚拟化技术配置与管理》下集将深入讲解vSphere环境下的vMotion、DRS、High Available(HA)、fault tolerance(FT)、性能监控、安全备份等高可用性内容,敬请学习提高。 企业级 VMware vSphere 6.7虚拟化技术配置与管理(上集)视频课程:https://edu.csdn.net/course/detail/35162企业级 VMware vSphere 6.7虚拟化技术配置与管理(下集)视频课程:https://edu.csdn.net/course/detail/35171

16,211

社区成员

发帖
与我相关
我的任务
社区描述
面向想学习云原生运维的朋友提供交流学习园地,社区管理员 互联网老辛 将长期面向社区组织技术交流及直播活动。 欢迎各位加入极客运维之家联盟,本社区诚邀各位踊跃投稿。
运维开发云计算python 个人社区 北京·海淀区
社区管理员
  • 互联网老辛
  • 我是沐风晓月
  • IT民工金鱼哥
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧