【问题标题】:`Error 403: Insufficient regional quota to satisfy request: resource "SSD_TOTAL_GB"` when creating kubernetes cluster with terraform`Error 403: Insufficient regional quota to satisfy request: resource \"SSD_TOTAL_GB\"` 使用 terraform 创建 kubernetes 集群时
【发布时间】:2023-02-08 04:41:38
【问题描述】:

您好,我正在谷歌云免费套餐帐户中使用 kubernetes 和 terraform(尝试使用免费的 300 美元)。这是我的 terraform 资源声明,它是我从 terraform 资源页面复制的非常标准的东西。这里没有什么特别奇怪的。

resource "google_container_cluster" "cluster" {
  name = "${var.cluster-name}-${terraform.workspace}"
  location = var.region
  initial_node_count = 1
  project = var.project-id
  remove_default_node_pool = true
}

resource "google_container_node_pool" "cluster_node_pool" {
  name       = "${var.cluster-name}-${terraform.workspace}-node-pool"
  location   = var.region
  cluster    = google_container_cluster.cluster.name
  node_count = 1

  node_config {
    preemptible  = true
    machine_type = "e2-medium"
    service_account = google_service_account.default.email
    oauth_scopes    = [
      "https://www.googleapis.com/auth/cloud-platform"
    ]
  }
}

这个 terraform sn-p 曾经工作正常。为了不至于太快耗尽 300 美元,每天结束时我都会使用terraform destroy 销毁集群。 然而有一天,kubernetes 集群的创建刚刚停止工作。这是错误:

Error: googleapi: Error 403: Insufficient regional quota to satisfy request: resource "SSD_TOTAL_GB": request requires '300.0' and is short '50.0'. project has a quota of '250.0' with '250.0' available. View and manage quotas at https://console.cloud.google.com/iam-admin/quotas?usage=USED&project=xxxxxx., forbidden

看起来在所有 terraform 销毁并最终建立了一些配额之后,有些东西没有得到清理,我无法再创建集群。我仍然能够通过谷歌云网络界面创建集群(我只尝试使用自动驾驶仪,并且在同一位置)。我有点困惑为什么会这样。我的假设正确吗?我是否需要删除 terraform 不会自动删除的内容?如果是,为什么?有没有办法解决这个问题并能够再次使用 terraform 创建集群?

【问题讨论】:

    标签: google-cloud-platform terraform terraform-provider-gcp


    【解决方案1】:

    转到 Compute Engine > Disks,检查指定区域中是否有任何磁盘正在消耗配额。

    此错误表示该请求将需要 300GB 的 SSD,而您在该区域有 250GB 的配额。这个错误一般出现在quota为exhausted的时候。您可以阅读有关磁盘配额类型的更多信息here。需要的话也可以request a quota increase

    我不明白为什么这个请求需要 300 GB 的 SSD,因为我对 Terraform 不太熟悉。从代码来看,您似乎只创建了一个节点。根据terraform doc,“disk_size_gb”默认为 100GB。所以,它应该只需要 100 GB。尝试在“node_config”中的“disk_size_gb”中设置较小的大小并检查它是否有帮助。

    【讨论】:

    • 谢谢你的回答,(Un)幸运的是我没有在任何地区创建任何磁盘。所以恐怕不是这样。我将尝试以不同的方式创建集群。
    【解决方案2】:

    我能够通过使用 enable_autopilot = true 在自动驾驶模式下创建集群来解决这个问题,而不是手动创建 node_pool(通过 terraform)并让谷歌来处理这个问题。但是我担心我可能只是隐藏了问题,因为集群最初可能是用一个小磁盘创建的,然后根据需要进行扩展。

    【讨论】:

      【解决方案3】:

      我有一个类似的问题,通过将我的集群移动到不同的区域得到解决。 您可以通过将 $PROJECT-ID$ 替换为您的项目 ID https://console.cloud.google.com/iam-admin/quotas?usage=USED&project=$PROJECT-ID$ 来查看某个区域的配额 并前往该链接。

      如果将列表过滤为persistent disk ssd (GB),您应该会看到所有可用区域及其配额的列表。

      希望有所帮助。

      否则,最好的办法是请求增加所需区域的配额。

      【讨论】:

      • 在使用情况下,它到处都是零。另外切换区域最终会用完区域吗?
      • @DarioB 不确定我是否完全理解您的评论。您收到的错误表明您所在的区域/地区有 250 GB 的限制,您至少需要 300 GB 才能启动集群。在我的屏幕截图中,您可以看到区域 asia-east2-a 的上限为无限制,因此我可能可以在那里启动我的集群。
      • 啊!你是对的。也许我可以更改一些配置,例如机器类型?我想知道为什么它以前有效。我很确定我使用的是相同的配置。
      • @DarioB 这是否解决了您的问题?
      • 不,不幸的是它没有用。我尝试同时指定 machine_type = "e2-micro"machine_type = "n1-standard-1" 并收到相同的错误消息。到目前为止,我唯一能让它工作的方法是使用自动驾驶模式。
      【解决方案4】:

      如果您想使用标准配置创建 Kubernetes 集群,请确保您已将最大节点数选择为 2 个或更少。您需要检查“节点池详细信息”。 要更改或检查遵循以下步骤:

      1. 创建集群
      2. 选择标准并单击配置
      3. 提供集群名称、您选择的位置等。
      4. 在左侧面板上找到“节点池”并点击“默认池”
      5. 在浏览器页面上定位或搜索“节点数”。您会找到用于添加节点数的文本框。在您的情况下,它必须超过 2 个节点,这就是您出错的原因。 另一种选择是增加所需区域的限制,这可能需要根据新政策获得 Google 的批准。

      【讨论】:

      • 因为我试图通过 terraform 创建集群,我应该使用什么 terraform 配置来实现你的建议?
      【解决方案5】:

      我遇到了同样的问题,我想我知道发生了什么。这里的关键是理解zonal and regional clusters之间的区别。

      tldr;区域集群仅在区域中运行,其中区域集群可以跨多个区域复制。

      从文档中,

      默认情况下,GKE 跨控制平面区域的三个区域复制每个节点池

      我认为这就是我们看到要求达到 300GB (3 * 100GB) 的原因,其中 --disk-size 默认为 100GB。

      解决方案是将位置设置为区域而不是区域。当然,这里我假设区域集群可以满足您的要求。例如。

      resource "google_container_cluster" "cluster" {
        name = "${var.cluster-name}-${terraform.workspace}"
        location = "us-central1-f"
        initial_node_count = 1
        project = var.project-id
        remove_default_node_pool = true
      }
      
      resource "google_container_node_pool" "cluster_node_pool" {
        name       = "${var.cluster-name}-${terraform.workspace}-node-pool"
        location   = "us-central1-f"
        cluster    = google_container_cluster.cluster.name
        node_count = 1
      
        node_config {
          ...
        }
      }
      

      【讨论】:

        猜你喜欢
        • 2016-09-04
        • 2020-08-20
        • 2019-07-08
        • 2021-07-09
        • 2019-03-30
        • 1970-01-01
        • 1970-01-01
        • 2019-07-08
        • 2013-03-12
        相关资源
        最近更新 更多