我正在 AWS Cloud 上部署 AWS Elastic Kubernetes Cluster。从本地计算机部署群集时,我遇到了一个小错误,即使我们不能确切地说这是一个错误。
因此,当我使用本地机器上的地形图部署 eks 集群时,它会在 AWS 上部署所有基础设施要求,但是当它必须部署集群时,它会绑定通过 kubectl 进行部署,但kubectl没有配置新创建的集群,然后 terraform 抛出错误。
我通过使用以下命令将 kubectl 与新创建的集群绑定来轻松解决此错误,但我不想手动执行此操作,有什么方法可以使用相同的方式配置 kubectl。
命令 -aws eks --region us-west-2 update-kubeconfig --name clustername
仅供参考 - 我正在使用 AWS CLI。
您可以使用 terraform local-exec provisioning er。
resource "null_resource" "kubectl" {
depends_on = <CLUSTER_IS_READY>
provisioner "local-exec" {
command = "aws eks --region us-west-2 update-kubeconfig --name clustername"
}
}
}
你需要做好一些事情:
- 对集群资源/模块的依赖性:awe_eks_cluster、terraform-aws-modules/eks/aws 等
- 何时重新生成(在特定情况下,VS 始终与从不生成,即仅生成一次(
- 使用哪个外壳(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 应用,则始终重新合并的成本最低,因此在时间戳上触发。根据需要进行调整,例如我已经看到这个用法:
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)
}