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

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

提供者

关于此任务

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

对于自动配置,请使用以下脚本之一: [PowerShell][Ansible][Terraform]

您需要的内容

  • 管理 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