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

vSphere VMFS 数据存储区 - 带有ONTAP 的iSCSI 存储后端

贡献者 kevin-hoke

本节介绍如何使用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. 使用 `system license show`命令检查 iSCSI 是否列出。

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

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

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

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

    提示 建议每个节点使用两个 iSCSI 网络接口。
  5. "创建 iSCSI 网络接口。"您可以使用默认数据块服务策略。

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

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

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

VMware vSphere 任务

  1. 验证至少有一个 NIC 可用于 iSCSI VLAN。为了获得更好的性能和容错能力,最好使用两个 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