【问题标题】:Terraform AWS EKS Cluster Deployment ErrorTerraform AWS EKS 集群部署错误
【发布时间】:2021-03-16 23:25:39
【问题描述】:

我一直在尝试在 us-east-1 区域内部署 EKS 集群,但我发现 us-east-1e 可用区之一不支持我的集群无法创建的设置。

请查看下面的错误,如果有办法在 terraform 部署中跳过 us-east-1e AZ,请告诉我。

计划:26 增加,0 改变,0 破坏。


此计划已保存到:development.tfplan

要准确执行这些操作,请运行以下命令来应用: terraform 应用“development.tfplan”

(base) _C0DL:deploy-eks-cluster-using-terraform-master snadella001$ 地形应用 “development.tfplan”data.aws_availability_zones.available_azs: 正在阅读... [id=2020-12-04 22:10:40.079079 +0000 UTC] data.aws_availability_zones.available_azs:0s 后读取完成 [id=2020-12-04 22:10:47.208548 +0000 UTC] module.eks-cluster.aws_eks_cluster.this[0]:正在创建...

错误:创建 EKS 集群时出错 (eks-ha): UnsupportedAvailabilityZoneException:无法创建集群“eks-hia” 因为目标可用区 us-east-1e 目前没有 有足够的容量来支持集群。重试并选择 这些可用区:us-east-1a、us-east-1b、us-east-1c、 us-east-1d, us-east-1f { RespMetadata: { 状态码:400, 请求 ID:“0f2ddbd1-107f-490e-b45f-6985e1c7f1f8”},集群名称:“eks-ha”,消息_:“无法创建集群 'eks-hia' 因为目标可用区 us-east-1e 目前没有 有足够的容量来支持集群。重试并选择 这些可用区:us-east-1a、us-east-1b、us-east-1c、 us-east-1d,us-east-1f",有效区域:[ “我们-东-1a”, “我们-东-1b”, “我们-东-1c”, “us-east-1d”, “us-east-1f”] }

在 .terraform/modules/eks-cluster/cluster.tf 第 9 行,在资源中 "aws_eks_cluster" "this": 9: 资源 "aws_eks_cluster" "this" {

请找到下面列出的 EKS 集群:

# create EKS cluster
module "eks-cluster" {
  source           = "terraform-aws-modules/eks/aws"
  version          = "12.1.0"
  cluster_name     = var.cluster_name
  cluster_version  = "1.17"
  write_kubeconfig = false
  availability-zones  = ["us-east-1a", "us-east-1b", "us-east-1c"]## tried but does not work
  
  subnets = module.vpc.private_subnets
  vpc_id  = module.vpc.vpc_id

  worker_groups_launch_template = local.worker_groups_launch_template

  # map developer & admin ARNs as kubernetes Users
  map_users = concat(local.admin_user_map_users, local.developer_user_map_users)
}

# get EKS cluster info to configure Kubernetes and Helm providers
data "aws_eks_cluster" "cluster" {
  name = module.eks-cluster.cluster_id
}
data "aws_eks_cluster_auth" "cluster" {
  name = module.eks-cluster.cluster_id
}

#################
# Private subnet
#################
resource "aws_subnet" "private" {
  count = var.create_vpc && length(var.private_subnets) > 0 ? length(var.private_subnets) : 0

  vpc_id                          = local.vpc_id
  cidr_block                      = var.private_subnets[count.index]
  # availability_zone  = ["us-east-1a", "us-east-1b", "us-east-1c"]
  availability_zone               = length(regexall("^[a-z]{2}-", element(var.azs, count.index))) > 0 ? element(var.azs, count.index) : null
  availability_zone_id            = length(regexall("^[a-z]{2}-", element(var.azs, count.index))) == 0 ? element(var.azs, count.index) : null
  assign_ipv6_address_on_creation = var.private_subnet_assign_ipv6_address_on_creation == null ? var.assign_ipv6_address_on_creation : var.private_subnet_assign_ipv6_address_on_creation

  ipv6_cidr_block = var.enable_ipv6 && length(var.private_subnet_ipv6_prefixes) > 0 ? cidrsubnet(aws_vpc.this[0].ipv6_cidr_block, 8, var.private_subnet_ipv6_prefixes[count.index]) : null

  tags = merge(
    {
      "Name" = format(
        "%s-${var.private_subnet_suffix}-%s",
        var.name,
        element(var.azs, count.index),
      )
    },
    var.tags,
    var.private_subnet_tags,
  )
}

variable "azs" {
  description = "A list of availability zones names or ids in the region"
  type        = list(string)
  default     = []
  #default     = ["us-east-1a", "us-east-1b","us-east-1c","us-east-1d"]
}

【问题讨论】:

  • 你的 terraform 代码在哪里?你是如何分配子网的?
  • 对不起。更新了上面发布的问题中的代码。
  • @jordanm,如果您有机会检查代码,请告诉我
  • 是包含 us-east-1e 的子网。 module.vpc.private_subnets 包括 us-east-1e 区域中的子网。这就是你需要解决的问题。
  • @jordanm,谢谢!!添加了子网代码块。我尝试提供“us-east-1a”、“us-east-1b”、“us-east-1c”可用区,但没有奏效。不确定我是否在这里遗漏了一些非常基本的东西,但我们将不胜感激。

标签: amazon-web-services terraform terraform-provider-aws amazon-eks


【解决方案1】:
module "vpc" {
  source  = "terraform-aws-modules/vpc/aws"
  version = "2.44.0"

  name = "${var.name_prefix}-vpc"
  cidr = var.main_network_block
  # azs  = data.aws_availability_zones.available_azs.names
  azs  = ["us-east-1a", "us-east-1b", "us-east-1c"]

  private_subnets = [
    # this loop will create a one-line list as ["10.0.0.0/20", "10.0.16.0/20", "10.0.32.0/20", ...]
    # with a length depending on how many Zones are available
    for zone_id in data.aws_availability_zones.available_azs.zone_ids :
    cidrsubnet(var.main_network_block, var.subnet_prefix_extension, tonumber(substr(zone_id, length(zone_id) - 1, 1)) - 1)
  ]

【讨论】:

    猜你喜欢
    • 2021-03-25
    • 2020-05-10
    • 2021-04-04
    • 2021-12-14
    • 1970-01-01
    • 2021-09-02
    • 1970-01-01
    • 1970-01-01
    • 2021-11-14
    相关资源
    最近更新 更多