本繁體中文版使用機器翻譯,譯文僅供參考,若與英文版本牴觸,應以英文版本為準。

vSphere VMFS資料存放區- iSCSI儲存後端ONTAP 搭配功能

關於這項工作

本節說明如何使用ONTAP VMware iSCSI儲存設備來建立VMFS資料存放區。

如需自動化資源配置、請使用下列其中一個指令碼: [PowerShell][Ansible][Terraform]

您需要的一切

  • 管理vSphere環境與ONTAP VMware所需的基本技能。

  • 執行{ONTAP_version}的支援系統(FAS/AFF/CVO/ONTAP Select/ASA)ONTAP

  • 資訊(SVM名稱、使用者ID和密碼)ONTAP

  • iSCSI的網路連接埠、SVM和LUN資訊ONTAP

  • "完整的iSCSI組態工作表"

  • vCenter Server認證

  • vSphere主機資訊

    • {vSphere_version}

  • iSCSI VMKernel介面卡IP資訊

  • 網路交換器

    • 搭配ONTAP 使用NetApp系統網路資料連接埠和連線的vSphere主機

    • 為iSCSI設定的VLAN

    • (選用)連結集合、設定ONTAP 用於連接至整套網路資料連接埠

  • VMware vSphere適用的VMware vSphere工具已部署、已設定且隨時可供使用ONTAP

步驟

  1. 檢查與的相容性 "互通性對照表工具IMT (不含)"

  2. "驗證是否支援iSCSI組態。"

  3. 完成下列ONTAP 的VMware及vSphere工作。

執行任務ONTAP

  1. "驗ONTAP 證iSCSI的不實授權"

    1. 使用「系統授權show」命令檢查是否列出iSCSI。

    2. 使用「license add -license code-Code < license code>」來新增授權。

  2. "確認SVM上已啟用iSCSI傳輸協定。"

  3. 驗證SVM上是否有iSCSI網路邏輯介面可用。

    附註 使用GUI建立SVM時、也會建立iSCSI網路介面。
  4. 使用「網路介面」命令來檢視或變更網路介面。

    提示 建議每個節點使用兩個iSCSI網路介面。
  5. "建立iSCSI網路介面。" 您可以使用預設資料區塊服務原則。

  6. "驗證資料iSCSI服務是否包含在服務原則中。" 您可以使用「網路介面服務原則展示」來驗證。

  7. "驗證是否已啟用巨型框架。"

  8. "建立及對應LUN。" 如果您使用ONTAP VMware vSphere的VMware VMware vSphere的VMware工具、請跳過此步驟。針對每個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 VMware不穩定工具來配置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