Skip to main content
NetApp Solutions
简体中文版经机器翻译而成,仅供参考。如与英语版出现任何冲突,应以英语版为准。

vSphere VMFS 数据存储库—具有 ONTAP 的 iSCSI 存储后端

贡献者

本节介绍如何使用 ONTAP iSCSI 存储创建 VMFS 数据存储库。

对于自动配置、请使用以下脚本: [Ansible]

您需要的内容

  • 管理 vSphere 环境和 ONTAP 所需的基本技能。

  • 运行 { ontap_version } 的 ONTAP 存储系统( FAS/AFF/CVO/ONTAP Select/ASA )

  • ONTAP 凭据( SVM 名称,用户 ID 和密码)

  • iSCSI 的 ONTAP 网络端口, SVM 和 LUN 信息

  • "一份完整的 iSCSI 配置工作表"

  • vCenter Server 凭据

  • vSphere 主机信息

    • { vsphere_version }

  • iSCSI VMKernel适配器IP信息

  • 网络交换机

    • 使用 ONTAP 系统网络数据端口并连接 vSphere 主机

    • 为 iSCSI 配置的 VLAN

    • (可选)为 ONTAP 网络数据端口配置的链路聚合

  • 适用于 VMware vSphere 的 ONTAP 工具已部署,配置并可随时使用

步骤

  1. 检查与的兼容性 "互操作性表工具( IMT )"

  2. "验证是否支持 iSCSI 配置。"

  3. 完成以下 ONTAP 和 vSphere 任务。

ONTAP 任务

  1. "验证 iSCSI 的 ONTAP 许可证"(英文)

    1. 使用 ssystem license show 命令检查是否列出了 iSCSI 。

    2. 使用 license add -license-code < 许可证代码 > 添加许可证。

  2. "验证是否已在 SVM 上启用 iSCSI 协议。"

  3. 验证 iSCSI 网络逻辑接口在 SVM 上是否可用。

    备注 使用 GUI 创建 SVM 时,还会创建 iSCSI 网络接口。
  4. 使用 Network interface 命令查看或更改网络接口。

    提示 建议每个节点使用两个 iSCSI 网络接口。
  5. "创建 iSCSI 网络接口。" 您可以使用 default-data-blocks 服务策略。

  6. "验证 data-iscsi 服务是否包含在服务策略中。" 您可以使用 network interface service-policy show 进行验证。

  7. "验证是否已启用巨型帧。"

  8. "创建并映射 LUN 。" 如果您使用适用于 VMware vSphere 的 ONTAP 工具,请跳过此步骤。对每个 LUN 重复此步骤。

VMware vSphere 任务

  1. 验证 iSCSI VLAN 是否至少有一个可用 NIC 。为了提高性能和容错能力,最好使用两个 NIC 。

  2. "确定 vSphere 主机上可用的物理 NIC 的数量。"

  3. "配置 iSCSI 启动程序。" 典型的使用情形是软件 iSCSI 启动程序。

  4. "验证 iSCSI 的 TCPIP 堆栈是否可用"

  5. "验证 iSCSI 端口组是否可用"

    • 我们通常使用具有多个上行链路端口的单个虚拟交换机。

    • 使用 1 : 1 适配器映射。

  6. 验证是否已启用 iSCSI VMKernel 适配器以匹配 NIC 数量,以及是否已分配 IP 。

  7. "将 iSCSI 软件适配器绑定到 iSCSI VMKernel 适配器。"

  8. "使用 ONTAP 工具配置 VMFS 数据存储库"。对所有数据存储库重复此步骤。

  9. "验证硬件加速支持。"

下一步是什么?

完成这些任务后, VMFS 数据存储库便可用于配置虚拟机。

Ansible 攻略手册
## Disclaimer: Sample script for reference purpose only.

- hosts: '{{ vsphere_host }}'
  name: Play for vSphere iSCSI Configuration
  connection: local
  gather_facts: false
  tasks:
    # Generate Session ID for vCenter
    - name: Generate a Session ID for vCenter
      uri:
        url: "https://{{ vcenter_hostname }}/rest/com/vmware/cis/session"
        validate_certs: false
        method: POST
        user: "{{ vcenter_username }}"
       password: "{{ vcenter_password }}"
        force_basic_auth: yes
        return_content: yes
      register: vclogin

    # Generate Session ID for ONTAP tools with vCenter
    - name: Generate a Session ID for ONTAP tools with vCenter
      uri:
        url: "https://{{ ontap_tools_ip }}:8143/api/rest/2.0/security/user/login"
        validate_certs: false
        method: POST
        return_content: yes
        body_format: json
        body:
          vcenterUserName: "{{ vcenter_username }}"
          vcenterPassword: "{{ vcenter_password }}"
      register: login

    # Get existing registered ONTAP Cluster info with ONTAP tools
    - name: Get ONTAP Cluster info from ONTAP tools
      uri:
        url: "https://{{ ontap_tools_ip }}:8143/api/rest/2.0/storage/clusters"
        validate_certs: false
        method: Get
        return_content: yes
        headers:
          vmware-api-session-id: "{{ login.json.vmwareApiSessionId }}"
      register: clusterinfo

    - name: Get ONTAP Cluster ID
      set_fact:
        ontap_cluster_id: "{{ clusterinfo.json | json_query(clusteridquery) }}"
      vars:
        clusteridquery: "records[?ipAddress == '{{ netapp_hostname }}' && type=='Cluster'].id | [0]"

    - name: Get ONTAP SVM ID
      set_fact:
        ontap_svm_id: "{{ clusterinfo.json | json_query(svmidquery) }}"
      vars:
        svmidquery: "records[?ipAddress == '{{ netapp_hostname }}' && type=='SVM' && name == '{{ svm_name }}'].id | [0]"

    - name: Get Aggregate detail
      uri:
        url: "https://{{ ontap_tools_ip }}:8143/api/rest/2.0/storage/clusters/{{ ontap_svm_id }}/aggregates"
        validate_certs: false
        method: GET
        return_content: yes
        headers:
          vmware-api-session-id: "{{ login.json.vmwareApiSessionId }}"
          cluster-id: "{{ ontap_svm_id }}"
      when: ontap_svm_id != ''
      register: aggrinfo

    - name: Select Aggregate with max free capacity
      set_fact:
        aggr_name: "{{ aggrinfo.json | json_query(aggrquery) }}"
      vars:
        aggrquery: "max_by(records, &freeCapacity).name"

    - name: Convert datastore size in MB
      set_fact:
        datastoreSizeInMB: "{{ iscsi_datastore_size | human_to_bytes/1024/1024 | int }}"

    - name: Get vSphere Cluster Info
      uri:
        url: "https://{{ vcenter_hostname }}/api/vcenter/cluster?names={{ vsphere_cluster }}"
        validate_certs: false
        method: GET
        return_content: yes
        body_format: json
        headers:
          vmware-api-session-id: "{{ vclogin.json.value }}"
      when: vsphere_cluster != ''
      register: vcenterclusterid

    - name: Create iSCSI VMFS-6 Datastore with ONTAP tools
      uri:
        url: "https://{{ ontap_tools_ip }}:8143/api/rest/3.0/admin/datastore"
        validate_certs: false
        method: POST
        return_content: yes
        status_code: [200]
        body_format: json
        body:
          traditionalDatastoreRequest:
            name: "{{ iscsi_datastore_name }}"
            datastoreType: VMFS
            protocol: ISCSI
            spaceReserve: Thin
            clusterID:  "{{ ontap_cluster_id }}"
            svmID: "{{ ontap_svm_id }}"
            targetMoref: ClusterComputeResource:{{ vcenterclusterid.json[0].cluster }}
            datastoreSizeInMB: "{{ datastoreSizeInMB | int }}"
            vmfsFileSystem: VMFS6
            aggrName: "{{ aggr_name }}"
            existingFlexVolName: ""
            volumeStyle: FLEXVOL
            datastoreClusterMoref: ""
        headers:
          vmware-api-session-id: "{{ login.json.vmwareApiSessionId }}"
      when: ontap_cluster_id != '' and ontap_svm_id != '' and aggr_name != ''
      register: result
      changed_when: result.status == 200