【问题标题】:Terraform AWS EKS kubectl configurationTerraform AWS EKS kubectl 配置
【发布时间】:2020-09-01 01:03:44
【问题描述】:

我正在 AWS 云上部署 AWS Elastic Kubernetes 集群。从我的本地机器部署集群时,我遇到了一个小错误,即使我们不能确切地说这是一个错误。

因此,当我使用本地机器上的 terraform 图表部署 eks 集群时,它会在 AWS 上部署所有基础设施需求,但是当它必须部署集群时,它会通过 kubectl 进行部署,但是 kubectl 没有配置新创建的集群,然后 terraform 抛出错误。

我很容易通过使用以下命令将 kubectl 与新创建的集群绑定来解决此错误,但我不想手动执行此操作,有什么方法可以使用相同的方式配置 kubectl。

命令 - aws eks --region us-west-2 update-kubeconfig --name clustername

仅供参考 - 我正在使用 AWS CLI。

【问题讨论】:

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


    【解决方案1】:

    您可以使用 terraform local-exec provisioner

        resource "null_resource" "kubectl" {
           depends_on = <CLUSTER_IS_READY>
           provisioner "local-exec" {
              command = "aws eks --region us-west-2 update-kubeconfig --name clustername"
              }
           }
     }
    

    【讨论】:

    • 你能告诉我这个代码的确切位置吗
    • 谢谢@hariK,它成功了。但是发生了什么,脚本在这个阶段仍然出错,但现在在这个配置之后,它在重新运行 terraform apply 命令后工作。
    【解决方案2】:

    你需要准备好一些东西:

    • 对集群资源/模块的依赖:awe_eks_cluster、terraform-aws-modules/eks/aws 等
    • 何时重新生成(在特定情况下 vs 总是 vs 从不,即只生成一次)
    • 使用哪个 shell(最常见的是 bash)
    • 如果失败则退出错误(设置 -e)
    • 等待集群准备就绪(aws eks 等待)
    • 更新 kubeconfig

    例如我使用

    resource "null_resource" "merge_kubeconfig" {
      triggers = {
        always = timestamp()
      }
    
      depends_on = [module.eks_cluster]
    
      provisioner "local-exec" {
        interpreter = ["/bin/bash", "-c"]
        command = <<EOT
          set -e
          echo 'Applying Auth ConfigMap with kubectl...'
          aws eks wait cluster-active --name '${local.cluster_name}'
          aws eks update-kubeconfig --name '${local.cluster_name}' --alias '${local.cluster_name}-${var.region}' --region=${var.region}
        EOT
      }
    }
    

    请注意,有几件事可能会导致 kubeconfig 需要重新合并,例如新证书、新用户等,这可能有点棘手。如果 terraform apply 运行,总是重新合并的成本是最小的,因此在时间戳上触发。必要时进行调整,例如我见过这样使用:

    triggers = {
        cluster_updated                     = join("", aws_eks_cluster.default.*.id)
        worker_roles_updated                = local.map_worker_roles_yaml
        additional_roles_updated            = local.map_additional_iam_roles_yaml
        additional_users_updated            = local.map_additional_iam_users_yaml
        additional_aws_accounts_updated     = local.map_additional_aws_accounts_yaml
        configmap_auth_file_content_changed = join("", local_file.configmap_auth.*.content)
        configmap_auth_file_id_changed      = join("", local_file.configmap_auth.*.id)
      }
    

    【讨论】:

      猜你喜欢
      • 2020-01-15
      • 1970-01-01
      • 2021-11-17
      • 2021-06-16
      • 2019-04-15
      • 2020-05-10
      • 2021-03-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多