使用 Azure Stack Hub 來連線至 iSCSI 儲存體

您可以使用本文中的範本,將 Azure Stack Hub 虛擬機器 (VM) 連線至內部部署 iSCSI 目標,將 VM 設定為使用裝載於 Azure Stack Hub 外部以及資料中心其他位置的儲存體。 本文會探討如何將 Windows 機器作為 iSCSI 目標。

您可以在 Azure 智慧邊緣模式 GitHub 存放庫的 lucidqdreams 分支中找到範本。 此範本位於 storage-iSCSI 資料夾中。 此範本可用來設定 Azure Stack Hub 這端所需的基礎結構,以便連線至 iSCSI 目標。 這包括將作為 iSCSI 啟動器的虛擬機器,以及其隨附的 VNet、NSG、PIP 和儲存體。 範本部署好之後,必須執行兩個 PowerShell 指令碼才能完成設定。 其中一個指令碼會在內部部署 VM (目標) 上執行,另一個則會在 Azure Stack Hub VM (啟動器) 上執行。 這些作業完成後,內部部署儲存體就已新增至 Azure Stack Hub VM。

概觀

下圖顯示的是裝載於 Azure Stack Hub 上的 VM,其具有來自內部部署 Windows 機器 (實體或虛擬) 的 iSCSI 掛接磁碟,可讓 Azure Stack Hub 外部的儲存體透過 iSCSI 通訊協定掛接到 Azure Stack Hub 裝載的 VM 內。

此圖顯示裝載于 Azure Stack Hub 上的 VM,可存取外部 iSCSI 掛接的磁片。

需求

  • 執行 Windows Server 2016 Datacenter 或 Windows Server 2019 Datacenter 的內部部署機器 (實體或虛擬)。
  • 必要的 Azure Stack Hub Marketplace 項目:
    • Windows Server 2016 Datacenter 或 Windows Server 2019 Datacenter (建議使用最新組建)。
    • PowerShell DSC 擴充功能。
    • 自訂指令碼擴充功能。
    • 現有的虛擬或實體機器。 在理想情況下,此機器會有兩張網路介面卡。 這也可以是另一個 iSCSI 目標,例如執行個體的 SAN。

考量事項

  • 網路安全性群組會套用至範本子網路。 請檢閱這一點,並視需要另外預留額度。
  • RDP 拒絕規則會套用至通道 NSG,而且如果您傾向透過公用 IP 位址來存取 VM,則必須將此規則設定為 [允許]。
  • 此解決方案不會考慮到 DNS 解析。
  • 請變更 Chapusername 和 Chappassword。 Chappassword 的長度必須是 12 到 16 個字元。
  • 此範本會讓 VM 使用靜態 IP 位址,因為 iSCSI 連線會使用設定中的本機位址。
  • 此範本會使用 BYOL Windows 授權。
  • 您也可以將 Linux 型系統連線至 iSCSI 目標。 您可以在 ubuntu 文件的 iSCSI 啟動器一文中找到相關指示。

選項。

  • 您可以透過 _artifactsLocation_artifactsLocationSasToken 參數來使用您自己的 Blob 儲存體帳戶和 SAS 權杖,這能讓您搭配 SAS 權杖使用您自己的儲存體 Blob。
  • 此範本會提供 VNet 命名和 IP 位址的預設值。
  • 此設定只有一個來自 iSCSI 用戶端的 iSCSI NIC。 我們已測試過數個設定,以利用不同的子網路和 NIC,但全都在使用多個閘道時遇到問題,因此我們嘗試建立不同的儲存體子網路來隔離流量,且實際上真的多餘。
  • 請仔細地讓這些值保持在合法的子網路和位址範圍內,否則部署可能會失敗。
  • PowerShell DSC 套件的主要目的是要檢查是否有擱置的重新開機。 如有需要,則可進一步自訂此 DSC。 如需詳細資訊,請參閱 omputerManagementDsc

資源群組範本 (iSCSI 用戶端)

下圖顯示透過範本部署的資源,其作用是建立可供您連線至 iSCSI 目標的 iSCSI 用戶端。 此範本會部署 VM 和其他資源,此外,它還會執行 prepare-iSCSIClient.ps1 並將 VM 重新開機。

此圖顯示從範本部署的資源,以建立 iSCSI 用戶端以連線到 iSCSI 目標。它會顯示具有內部子網和 NIC (網路卡) 、內部 PIP (私人網際網路通訊協定) ,以及 NSG (網路安全性群組) 的檔案伺服器。

部署程序

資源群組範本會產生輸出,以供作為下一個步驟的輸入。 其主要著重在發出 iSCSI 流量的伺服器名稱和 Azure Stack Hub 公用 IP 位址。 針對此範例:

  1. 部署基礎結構範本。
  2. 將 Azure Stack Hub VM 部署至裝載於資料中心其他位置的 VM。
  3. 使用範本所輸出的 IP 位址和伺服器名稱作為 iSCSI 目標 (可以是虛擬機器或實體伺服器) 上指令碼的輸入輸出參數,來執行 Create-iSCSITarget.ps1
  4. 使用 iSCSI 目標伺服器的外部 IP 位址作為輸入來執行 Connect-toiSCSITarget.ps1 指令碼。

此圖表顯示上述四個步驟的前三個步驟,並包含輸入和輸出。這些步驟包括:部署基礎結構、建立 iSCSI 目標,以及連線到 iSCSI。

azuredeploy.json 輸入

參數 預設值 description
WindowsImageSKU 2019-Datacenter 請選取 Windows VM 基礎映像
VMSize Standard_D2_v2 請輸入 VM 大小
VMName FileServer VM 名稱
adminUsername storageadmin 新 VM 的系統管理員名稱
adminPassword 新 VM 的系統管理員帳戶密碼。 預設值為訂用帳戶識別碼
VNetName 儲存體 VNet 的名稱。 這會用來標示資源
VNetAddressSpace 10.10.0.0/23 VNet 的位址空間
VNetInternalSubnetName 內部 VNet 內部子網路名稱
VNetInternalSubnetRange 10.10.1.0/24 VNet 內部子網路的位址範圍
InternalVNetIP 10.10.1.4 檔案伺服器內部 IP 的靜態位址。
_artifactsLocation
_artifactsLocationSasToken

部署步驟

  1. 使用 azuredeploy.json 部署 iSCSI 用戶端基礎結構
  2. 在內部部署伺服器 iSCSI 目標上執行 Create-iSCSITarget.ps1。 範本完成之後,您必須在內部部署伺服器 iSCSI 目標上,使用第一個步驟的輸出來執行 Create-iSCSITarget.ps1
  3. 在 iSCSI 用戶端上執行 Connect-toiSCSITarget.ps1。 使用 iSCSI 目標的詳細資料,在 iSCSI 用戶端上執行 Connect-toiSCSITarget.ps1

將 iSCSI 儲存體新增至現有 VM

您也可以在現有虛擬機器上執行指令碼,以從 iSCSI 用戶端連線至 iSCSI 目標。 如果您要自行建立 iSCSI 目標,則此流程為。 下圖顯示 PowerShell 指令碼的執行流程。 這些指令碼可在 Script 目錄中找到:

此圖表顯示下面討論的三個腳本。執行順序如下:Prepare-iSCSIClient.ps1、 (在用戶端) 上執行、建立iSCSITarget.ps1 (會在目標) 上執行,以及在用戶端) 上Connect-toiSCSITarget.ps1 (執行。

Prepare-iSCSIClient.ps1

Prepare-iSCSIClient.ps1 指令碼會在 iSCSI 用戶端上安裝必要條件,這包括:

  • 安裝多重路徑 I/O 服務
  • 將 iSCSI 啟動器服務設定為自動啟動
  • 啟用對 iSCSI 多重路徑 MPIO 的支援
  • 啟用所有 iSCSI 磁碟區的自動宣告
  • 將磁碟逾時設定為 60 秒

安裝好這些必要條件後,請務必將系統重新開機。 MPIO 負載平衡原則需要重新開機才能進行設定。

Create-iSCSITarget.ps1

Create-iSCSITarget.ps1 指令碼會在儲存伺服器上執行。 您可以建立數量受到啟動器限制的多個磁碟和目標。 您可以執行此指令碼多次,以建立多個可連結至不同目標的虛擬磁碟。 您可以將多個磁碟連線至一個目標。

輸入 預設值 description
RemoteServer FileServer 連線至 iSCSI 目標的伺服器名稱
RemoteServerIPs 1.1.1.1 將會作為 iSCSI 流量發源地的 IP 位址
DiskFolder C:\iSCSIVirtualDisks 將作為虛擬磁碟儲存位置的資料夾和磁碟機
DiskName DiskName 磁碟 VHDX 檔案的名稱
DiskSize 5GB VHDX 磁碟大小
TargetName RemoteTarget01 用來定義 iSCSI 用戶端目標設定的目標名稱。
ChapUsername username CHAP 驗證的使用者名稱
ChapPassword userP@ssw0rd! CHAP 驗證的密碼名稱。 其必須是 12 到 16 個字元

Connect-toiSCSITarget.ps1

Connect-toiSCSITarget.ps1 是最後一個指令碼,其會在 iSCSI 用戶端上執行,並將 iSCSI 目標所提供的磁碟掛接至 iSCSI 用戶端。

輸入 預設值 description
TargetiSCSIAddresses "2.2.2.2","2.2.2.3" iSCSI 目標的 IP 位址
LocalIPAddresses "10.10.1.4" 這是將會作為 iSCSI 流量發源地的內部 IP 位址
LoadBalancePolicy C:\iSCSIVirtualDisks 將會作為 iSCSI 流量發源地的 IP 位址
ChapUsername username CHAP 驗證的使用者名稱
ChapPassword userP@ssw0rd! CHAP 驗證的密碼名稱。 其必須是 12 到 16 個字元

後續步驟

Azure Stack Hub 網路服務的差異與注意事項