【问题标题】:How to fix kubernetes_config_map resource error on a newly provisioned EKS cluster via terraform?如何通过 terraform 在新配置的 EKS 集群上修复 kubernetes_config_map 资源错误?
【发布时间】:2019-08-26 16:00:06
【问题描述】:

我正在使用 Terraform 来配置 EKS 集群(主要遵循示例 here)。在教程的最后,有一个方法是通过terraform output 命令输出configmap,然后通过kubectl apply -f <file> 将其应用到集群中。我正在尝试使用 kubernetes_config_map 资源将此 kubectl 命令包装到 Terraform 文件中,但是在第一次运行 Terraform 时,我收到以下错误:

Error: Error applying plan:

1 error(s) occurred:

* kubernetes_config_map.config_map_aws_auth: 1 error(s) occurred:

* kubernetes_config_map.config_map_aws_auth: the server could not find the requested resource (post configmaps)

奇怪的是,每个后续的terraform apply 都有效,并将配置映射应用于 EKS 集群。这让我相信这可能是一个时间问题?我试图在集群配置和应用配置映射之间执行一系列操作,但没有奏效。我还添加了一个显式的depends_on 参数,以确保在尝试应用配置映射之前先完全配置集群。

provider "kubernetes" {
  config_path = "kube_config.yaml"
}

locals {
  map_roles = <<ROLES
- rolearn: ${aws_iam_role.eks_worker_iam_role.arn}
  username: system:node:{{EC2PrivateDNSName}}
  groups:
    - system:bootstrappers
    - system:nodes
ROLES
}

resource "kubernetes_config_map" "config_map_aws_auth" {
  metadata {
    name      = "aws-auth"
    namespace = "kube-system"
  }

  data {
    mapRoles = "${local.map_roles}"
  }

  depends_on = ["aws_eks_cluster.eks_cluster"]
}

我希望它在第一次正确运行,但它仅在第二次应用相同文件且没有更改后运行。

我试图通过为 terraform 启用 TRACE 调试标志来获取更多信息,但是我得到的唯一输出是与上面完全相同的错误。

【问题讨论】:

    标签: kubernetes terraform amazon-eks


    【解决方案1】:

    这似乎是引导集群时的时间问题。您的 kube-apiserver 最初认为没有 configmaps 资源。

    很可能RoleRoleBinding 使用创建 ConfigMap 尚未在集群中完全配置以允许它创建使用iam-authenticator 和以下政策:

    resource "aws_iam_role_policy_attachment" "demo-cluster-AmazonEKSClusterPolicy" {
      policy_arn = "arn:aws:iam::aws:policy/AmazonEKSClusterPolicy"
      role       = "${aws_iam_role.demo-cluster.name}"
    }
    
    resource "aws_iam_role_policy_attachment" "demo-cluster-AmazonEKSServicePolicy" {
      policy_arn = "arn:aws:iam::aws:policy/AmazonEKSServicePolicy"
      role       = "${aws_iam_role.demo-cluster.name}"
    }
    

    depends Terraform 子句不会起到太大作用,因为似乎时间正在 EKS 服务中发生。

    我建议您尝试使用文档中描述的相同资源的terraform-aws-eks 模块。如果您想了解它们如何解决您所看到的问题,也可以浏览代码。

    【讨论】:

      猜你喜欢
      • 2021-03-16
      • 2020-09-22
      • 2021-07-21
      • 2021-06-25
      • 2019-07-08
      • 2020-10-26
      • 2021-03-19
      • 2021-03-03
      • 2021-03-25
      相关资源
      最近更新 更多