Terraform部署AKS遇NoRegisteredProviderFound错误求助
我尝试用以下Terraform代码部署AKS集群:
resource "azurerm_kubernetes_cluster" "k8s" { name = local.k8s.name location = azurerm_resource_group.k8s_rg.location resource_group_name = azurerm_resource_group.k8s_rg.name dns_prefix = local.k8s.dns_prefix default_node_pool { name = "default" node_count = 1 vm_size = "Standard_D2_v2" } identity { type = "SystemAssigned" } tags = local.k8s.tags }
部署时遇到如下错误:
azurerm_kubernetes_cluster.k8s: Creating...
╷
│ Error: creating Cluster: (Managed Cluster Name "assessment-cluster" / Resource Group "assessment"): containerservice.ManagedClustersClient#CreateOrUpdate: Failure sending request: StatusCode=400 -- Original Error: Code="NoRegisteredProviderFound" Message="No registered resource provider found for location 'centralus' and API version '2022-01-02-preview' for type 'managedClusters'. The supported api-versions are '2017-08-31, 2018-03-31, 2019-02-01, 2019-04-01, 2019-06-01, 2019-08-01, 2019-10-01, 2019-11-01, 2020-01-01, 2020-02-01, 2020-03-01, 2020-04-01, 2020-06-01, 2020-07-01, 2020-09-01, 2020-11-01, 2020-12-01, 2021-02-01, 2021-03-01, 2021-05-01, 2021-07-01, 2021-08-01, 2021-09-01, 2021-10-01, 2022-01-01, 2022-02-01, 2022-03-01, 2022-04-01, 2022-06-01, 2022-07-01, 2022-07-02-preview, 2022-08-01, 2022-08-02-preview, 2022-08-03-preview, 2022-09-01, 2022-09-02-preview, 2022-10-02-preview, 2022-11-01, 2022-11-02-preview, 2023-01-01, 2023-01-02-preview, 2023-02-01, 2023-02-02-preview, 2023-03-01, 2023-03-02-preview, 2023-04-01, 2023-04-02-preview, 2023-05-01, 2023-05-02-preview, 2023-06-01, 2023-06-02-preview, 2023-07-01, 2023-07-02-preview, 2023-08-01, 2023-08-02-preview, 2023-09-01, 2023-09-02-preview, 2023-10-01, 2023-10-02-preview, 2023-11-01, 2023-11-02-preview, 2024-01-01, 2024-01-02-preview, 2024-02-01, 2024-02-02-preview'. The supported locations are 'australiacentral, australiacentral2, australiaeast, australiasoutheast, brazilsouth, brazilsoutheast, canadacentral, canadaeast, centralindia, centralus, eastasia, eastus, eastus2, francecentral, francesouth, germanynorth, germanywestcentral, israelcentral, italynorth, japaneast, japanwest, jioindiacentral, jioindiawest, koreacentral, koreasouth, northcentralus, northeurope, norwayeast, norwaywest, polandcentral, qatarcentral, southafricanorth, southafricawest, southcentralus, southindia, southeastasia, swedencentral, switzerlandnorth, switzerlandwest, uaecentral, uaenorth, uksouth, ukwest, westcentralus, westeurope, westus, westus2, westus3'."
│
│ with azurerm_kubernetes_cluster.k8s,
│ on aks.tf line 12, in resource "azurerm_kubernetes_cluster" "k8s":
│ 12: resource "azurerm_kubernetes_cluster" "k8s" {
问题原因
错误核心是两点:
- 当前使用的AzureRM Provider调用了
2022-01-02-preview这个API版本,但该版本在centralus区域不被支持(从错误给出的支持列表可见,2022年的preview版本只有2022-07-02-preview及之后的,没有2022-01-02-preview)。 - 你的Azure订阅可能未注册
Microsoft.ContainerService资源提供商。
解决步骤
升级AzureRM Provider版本
旧版本Provider会绑定过时的API版本,在你的Terraform配置文件(如versions.tf)中指定较新的稳定版本:terraform { required_providers { azurerm = { source = "hashicorp/azurerm" version = ">= 3.0.0" } } }执行命令升级Provider:
terraform init -upgrade注册Microsoft.ContainerService资源提供商
运行Azure CLI命令完成注册:az provider register --namespace Microsoft.ContainerService检查注册状态,直到返回
Registered:az provider show --namespace Microsoft.ContainerService --query registrationState手动指定兼容API版本(可选)
若不想升级Provider,可在AKS资源块中直接指定错误列表里centralus支持的API版本,比如2022-01-01:resource "azurerm_kubernetes_cluster" "k8s" { name = local.k8s.name location = azurerm_resource_group.k8s_rg.location resource_group_name = azurerm_resource_group.k8s_rg.name dns_prefix = local.k8s.dns_prefix api_version = "2022-01-01" # 指定支持的API版本 default_node_pool { name = "default" node_count = 1 vm_size = "Standard_D2_v2" } identity { type = "SystemAssigned" } tags = local.k8s.tags }
内容的提问来源于stack exchange,提问作者Robert

