如果agentPoolProfiles属性中的vnetSubnetId是引用,则尝试使用ARM模板部署AKS群集时遇到错误。我在10月4日之前就使用了这个确切的模板,但是没有出现任何问题(10月4日),但是现在我看到多个不同的集群都出现了错误,并且当我通过VSTS管道或手动使用PowerShell进行操作时。

该属性设置如下:

"agentPoolProfiles": [
  {
    "name": "agentpool",
    "count": "[parameters('agentCount')]",
    "vmSize": "[parameters('agentVMSize')]",
    "osType": "Linux",
    "dnsPrefix": "[variables('agentsEndpointDNSNamePrefix')]",
    "osDiskSizeGB": "[parameters('agentOsDiskSizeGB')]",
    "vnetSubnetID": "[reference(concat('Microsoft.Network/virtualNetworks/', variables('vnetName'))).subnets[0].id]"
  }
]

变量“vnetName”基于我用于集群名称的输入参数,并且vnet本身100%存在,并作为同一模板的一部分进行部署。

如果尝试部署新集群,则会出现以下错误:
Message: {
  "code": "InvalidParameter",
  "message": "The value of parameter agentPoolProfile.vnetSubnetID is invalid.",
  "target": "agentPoolProfile.vnetSubnetID"
 }

如果我尝试重新部署集群,但自上次工作以来对模板或输入参数没有任何更改,则会收到以下错误:
Message: {
  "code": "PropertyChangeNotAllowed",
  "message": "Changing property 'agentPoolProfile.vnetSubnetID' is not allowed.",
  "target": "agentPoolProfile.vnetSubnetID"
 }

是否发生了更改,这意味着我无法在运行时获取vnet ID?现在是否需要将其作为参数传递?如果发生了什么变化,哪里可以找到细节?

编辑:只是为了澄清,对于重新部署群集,我已经检查并且没有新的子网,并且在具有不同VNet的3个不同群集上看到了相同的行为。

从reference()切换到resourceId()确实解决了问题,因此已被标记为答案,但是我仍然不清楚为什么reference()停止工作,如果我知道的话,也会在这里进行更新。

最佳答案

我认为发生的情况是subnets[0].id返回了错误的( DIFFERENT )subnetId。这就是错误所指出的。部署集群后,您无法更改subnetId。

可能有人在vnet中创建了一个新子网。但是我要说的是,这种方法总体上是有缺陷的。您应该构建resourceId()函数或将其作为参数传递

关于azure - 使用子网ID的引用创建AKS群集时出错,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52927965/

10-09 06:47