要管理 SCSI 磁盘,必须指定并了解其 SCSI 控制器和逻辑单元号 (LUN)。对于 vSphere 磁盘对象,可以使用 Cloud Assembly 在云模板中分配这两个值。

能够使用不同 SCSI 控制器对性能至关重要,并且对于某些部署类型(如 Oracle Real Application Clusters,RAC),此功能是必需的。

SCSI 控制器和 LUN 磁盘属性

要分配 SCSI 控制器和 LUN,请添加以下云模板属性:

SCSIController

unitNumber

您还可以选择省略这些属性,在这种情况下,分配遵循可预测的默认值。Cloud Assembly 不再按随机顺序部署 SCSI 磁盘,因为这会使其难以进行管理。

SCSI 控制器和磁盘按顺序进行编号,从 0 开始。每个 SCSI 控制器都可以支持单元号为 0-15 的 SCSI 磁盘。

方案 1:同时设置 SCSI 控制器和单元号

可以完全指定这两个属性,如以下示例所示。在这种情况下,SCSI 控制器和单元号的分配与您输入的值相匹配。

resources:
  Cloud_vSphere_Machine_1:
    type: Cloud.vSphere.Machine
    properties:
      image: centos
      cpuCount: 1
      totalMemoryMB: 1024
      attachedDisks:
        - source: '${resource.Cloud_vSphere_Disk_1.id}'
        - source: '${resource.Cloud_vSphere_Disk_2.id}'
        - source: '${resource.Cloud_vSphere_Disk_3.id}'
  Cloud_vSphere_Disk_1:
    type: Cloud.vSphere.Disk
    properties:
      capacityGb: 1
      SCSIController: SCSI_Controller_2
      unitNumber: 0
  Cloud_vSphere_Disk_2:
    type: Cloud.vSphere.Disk
    properties:
      capacityGb: 1
      SCSIController: SCSI_Controller_2
      unitNumber: 1
  Cloud_vSphere_Disk_3:
    type: Cloud.vSphere.Disk
    properties:
      capacityGb: 1
      SCSIController: SCSI_Controller_3
      unitNumber: 4

方案 2:仅设置 SCSI 控制器

可以指定 SCSI 控制器而省略单元号。在这种情况下,SCSI 控制器的分配与您输入的值相匹配。单元号设置为该控制器下的第一个可用单元号。

resources:
  Cloud_vSphere_Machine_1:
    type: Cloud.vSphere.Machine
    properties:
      image: centos
      cpuCount: 1
      totalMemoryMB: 1024
      attachedDisks:
        - source: '${resource.Cloud_vSphere_Disk_1.id}'
        - source: '${resource.Cloud_vSphere_Disk_2.id}'
        - source: '${resource.Cloud_vSphere_Disk_3.id}'
  Cloud_vSphere_Disk_1:
    type: Cloud.vSphere.Disk
    properties:
      capacityGb: 1
      SCSIController: SCSI_Controller_0
  Cloud_vSphere_Disk_2:
    type: Cloud.vSphere.Disk
    properties:
      capacityGb: 1
      SCSIController: SCSI_Controller_0
  Cloud_vSphere_Disk_3:
    type: Cloud.vSphere.Disk
    properties:
      capacityGb: 1
      SCSIController: SCSI_Controller_1

方案 3:同时省略这两个属性

可以省略 SCSI 控制器和单元号。在这种情况下,分配将设置为第一个可用的 SCSI 控制器,以及该控制器下的第一个可用单元号。

resources:
  Cloud_vSphere_Machine_1:
    type: Cloud.vSphere.Machine
    properties:
      image: centos
      cpuCount: 1
      totalMemoryMB: 1024
      attachedDisks:
        - source: '${resource.Cloud_vSphere_Disk_1.id}'
        - source: '${resource.Cloud_vSphere_Disk_2.id}'
        - source: '${resource.Cloud_vSphere_Disk_3.id}'
  Cloud_vSphere_Disk_1:
    type: Cloud.vSphere.Disk
    properties:
      capacityGb: 1
  Cloud_vSphere_Disk_2:
    type: Cloud.vSphere.Disk
    properties:
      capacityGb: 1
  Cloud_vSphere_Disk_3:
    type: Cloud.vSphere.Disk
    properties:
      capacityGb: 1

不是方案:仅 LUN

不能省略 SCSI 控制器,而仅指定单元号。这样做可能会导致出现如下部署:多个 SCSI 控制器都具有该编号的磁盘,但管理时却不知道哪个磁盘是哪个磁盘。

使用输入设置 SCSI 控制器和 LUN

要使设计更加动态,请使用输入,以便用户在请求或更新时可以指定 SCSI 控制器和单元号。

inputs:
  diskProperties:
    type: array
    minItems: 1
    maxItems: 10
    items:
      type: object
      properties:
        size:
          type: integer
        SCSIController:
          type: string
          title: SCSI Controller
          enum:
            - SCSI_Controller_0
            - SCSI_Controller_1
            - SCSI_Controller_2
            - SCSI_Controller_3
        unitNumber:
          type: integer
          title: Unit Number
          
resources:
  app:
    type: Cloud.vSphere.Machine
    allocatePerInstance: true
    properties:
      flavor: small
      image: centos
      attachedDisks: '${map_to_object(slice(resource.disk[*].id, 0, 4), ''source'')}'
  disk:
    type: Cloud.vSphere.Disk
    allocatePerInstance: true
    properties:
      capacityGb: '${input.diskProperties[count.index].size}'
      SCSIController: '${input.diskProperties[count.index].SCSIController}'
      unitNumber: '${input.diskProperties[count.index].unitNumber}'
      count: ${length(input.diskProperties)}
Terraform CLI URL