configmaps“aws-auth”已经存在

Posted

技术标签:

【中文标题】configmaps“aws-auth”已经存在【英文标题】:configmaps "aws-auth" already exists 【发布时间】:2021-12-20 16:51:55 【问题描述】:

我正在使用 this 模块创建三个 EKS 集群。一切正常,只是当我尝试使用 map_roles 将 configmap 添加到集群时,我遇到了问题。

我的配置看起来像这样,我在所有三个集群中都有它

map_roles = [
    rolearn   = "arn:aws:iam::$var.account_no:role/argo-$var.environment-$var.aws_region"
    username  = "system:node:EC2PrivateDNSName"
    groups    = ["system:bootstrappers","system:nodes"]
    ,
    
    rolearn   = "arn:aws:sts::$var.account_no:assumed-role/$var.assumed_role_1"
    username  = "admin"
    groups    = ["system:masters","system:nodes","system:bootstrappers"]
    ,
    
    rolearn  = "arn:aws:sts::$var.account_no:assumed-role/$var.assumed_role_2"
    username  = "admin"
    groups    = ["system:masters","system:nodes","system:bootstrappers"]
    
]

应用模板时出现问题。它说

configmaps "aws-auth" already exists

当我进一步研究该错误时,我意识到在应用模板时,该模块会创建三个同名的 configmap 资源,例如这些

 resource "kubernetes_config_map" "aws_auth" 
   # ...
 
 resource "kubernetes_config_map" "aws_auth" 
   # ...
 
 resource "kubernetes_config_map" "aws_auth" 
   # ...
 

这显然是个问题。我该如何解决这个问题?

【问题讨论】:

EKS 模块只创建一个配置映射,所以我猜您正在尝试使用模块上的计数在同一个 TF 文件中创建 3 个集群。问题是你需要 3 个 kubernetes 提供者指向每个集群,但不确定这个模块是否可行。 【参考方案1】:

aws-auth 配置映射由 EKS 在您创建托管节点池时创建。它具有节点向控制平面注册所需的配置。如果你想用 Terraform 控制 configmap 的内容,你有两个选择。

要么确保在托管节点池资源之前创建配置映射。或者手动将现有的配置映射导入 Terraform 状态。

【讨论】:

我自己用其他方法避开了这个问题。但是,如果您认为您的答案是合法的,那么最好用更多的细节/步骤来分解它。

以上是关于configmaps“aws-auth”已经存在的主要内容,如果未能解决你的问题,请参考以下文章

k8s configmap subpath bug

k8s 之 Configmap

k8s 之 Configmap

ConfigMap 数据(yml 格式) - Kubernetes

尝试使用 EKS 集群将 configmap 应用于身份验证时出错

Spark on k8s: 配置和使用ConfigMap