无法在MS Azure上创建带有自定义映像的池

时间:2018-12-04 17:02:30

标签: azure azure-virtual-machine

我正在尝试创建一个基于我的自定义映像的虚拟机池。我已经成功created a custom image并将其添加到我的批处理帐户中。

但是当我尝试根据azure门户中的这张图片创建一个池时,出现错误。

  

在屏幕上执行最后一次调整大小时遇到​​错误   池。请尝试重新调整池的大小。代码:AllocationFailed

     

消息:无法分配所需的专用节点数

     

详细信息:原因-与之关联的源托管磁盘或快照   找不到虚拟机映像ID。

在门户中创建池时,由于没有设置图像ID的选项,因此我使用图像名称。但是json中的图片ID是正确的。而且我可以在正确的批处理帐户中看到门户中列出的图像。

这是我的泳池属性json:

{
  "id": "my-pool-0",
  "displayName": "my-pool-0",
  "lastModified": "2018-12-04T15:54:06.467Z",
  "creationTime": "2018-12-04T15:44:18.197Z",
  "state": "active",
  "stateTransitionTime": "2018-12-04T15:44:18.197Z",
  "allocationState": "steady",
  "allocationStateTransitionTime": "2018-12-04T16:09:11.667Z",
  "vmSize": "standard_a2",
  "resizeTimeout": "PT15M",
  "currentDedicatedNodes": 0,
  "currentLowPriorityNodes": 0,
  "targetDedicatedNodes": 1,
  "targetLowPriorityNodes": 0,
  "enableAutoScale": false,
  "autoScaleFormula": null,
  "autoScaleEvaluationInterval": null,
  "enableInterNodeCommunication": false,
  "maxTasksPerNode": 1,
  "url": "https://mybatch.westeurope.batch.azure.com/pools/my-pool-0",
  "resizeErrors": [
    {
      "message": "Desired number of dedicated nodes could not be allocated",
      "code": "AllocationFailed",
      "values": [
        {
          "name": "Reason",
          "value": "The source managed disk or snapshot associated with the virtual machine Image Id was not found."
        }
      ]
    }
  ],
  "virtualMachineConfiguration": {
    "imageReference": {
      "publisher": null,
      "offer": null,
      "sku": null,
      "version": null,
      "virtualMachineImageId": "/subscriptions/79b59716-301e-401a-bb8b-22edg5c1he4j/resourceGroups/resource-group-1/providers/Microsoft.Compute/images/my-image"
    },
    "nodeAgentSKUId": "batch.node.ubuntu 18.04"
  },
  "applicationLicenses": null
}

错误文本似乎与实际错误无关。有没有人遇到此错误或现在有解决此问题的方法?

更新

用于创建图像(taken from here)的打包json

{
  "builders": [{
    "type": "azure-arm",

    "client_id": "ffxcvbd0-c867-429a-bxcv-8ee0acvb6f99",
    "client_secret": "cvb54cvb-202d-4wq-bb8b-22cdfbce4f",
    "tenant_id": "ae33sdfd-a54c-40af-b20c-80810f0ff5da",
    "subscription_id": "096da34-4604-4bcb-85ae-2afsdf22192b",

    "managed_image_resource_group_name": "resource-group-1",
    "managed_image_name": "my-image",

    "os_type": "Linux",
    "image_publisher": "Canonical",
    "image_offer": "UbuntuServer",
    "image_sku": "18.04-LTS",

    "azure_tags": {
        "dept": "Engineering",
        "task": "Image deployment"
    },

    "location": "West Europe",
    "vm_size": "Standard_DS2_v2"
  }],
  "provisioners": [{
    "execute_command": "chmod +x {{ .Path }}; {{ .Vars }} sudo -E sh '{{ .Path }}'",
    "inline": [
      "export DEBIAN_FRONTEND=noninteractive",
      "apt-get update",
      "apt-get upgrade -y",
      "apt-get -y install nginx",

        ... 

      "/usr/sbin/waagent -force -deprovision+user && export HISTSIZE=0 && sync"
    ],
    "inline_shebang": "/bin/sh -x",
    "type": "shell"
  }]
}

2 个答案:

答案 0 :(得分:1)

关于您的问题,我和您一样进行了测试。步骤如下:

  1. 通过Packer创建托管图像。
  2. 使用相同订阅和区域中的托管映像创建批处理池。

然后我得到与您相同的错误。然后,我进行另一个测试,该测试从快照创建映像,然后使用该映像创建批处理池。运气!游泳池很好。

  

在Azure中,您可以从Azure快照中准备托管映像   来自具有托管功能的通用Azure VM的VM操作系统和数据磁盘   磁盘或您上载的通用本地VHD。

参考此description,看来自定义映像无法通过Packer创建。我对此不确定。但这确实有效。希望对您有帮助。

更新

看看文档Custom Images with Batch Shipyard。说明:

  

注意:当前只能直接使用Packer创建ARM映像   与用户订阅批处理帐户一起使用。对于标准批处理服务   池分配模式批处理帐户,打包程序将需要创建一个VHD   首先,然后您需要将VHD导入到ARM映像。请   遵循与您的批处理帐户池匹配的适当路径   分配模式。

在测试中,我遵循了Packer创建图像的步骤。当源VM存在时,自定义映像可以正常用于批处理池。但是,如果删除源VM,它将失败。因此,作为说明,标准的批处理服务仅可以使用由Packer创建的VHD文件创建的映像,并且该VHD文件应该存在于Pool生存期中。

答案 1 :(得分:0)

如果您使用托管图像,那么您的imageReference部分应如下所示:

"imageReference": { "id": "/subscriptions/79b59716-301e-401a-bb8b-22edg5c1he4j/resourceGroups/resource-group-1/providers/Microsoft.Compute/images/my-image" },