如果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()停止工作,如果我弄清楚了,也会在这里进行更新
答案 0 :(得分:1)
我认为发生的情况是subnets[0].id
返回错误的( DIFFERENT )subnetId。这就是错误所指出的。部署集群后,您将无法更改subnetId。
可能有人在vnet中创建了一个新子网。但是我要说的是,这种方法总体上是有缺陷的。您应该构建resourceId()
函数或将其作为参数传递