【问题标题】:Terraform: Error: Kubernetes cluster unreachable: invalid configurationTerraform:错误:Kubernetes 集群无法访问:配置无效
【发布时间】:2021-05-31 06:32:46
【问题描述】:

使用“terraform destroy”删除 kubernetes 集群后,我无法再创建它。

“terraform apply”返回以下错误信息:

错误:Kubernetes 集群无法访问:无效配置:否 已提供配置,尝试设置 KUBERNETES_MASTER 环境变量

这是 terraform 配置:

terraform {
  backend "s3" {
    bucket = "skyglass-msur"
    key    = "terraform/backend"
    region = "us-east-1"
  }
}

locals {
  env_name         = "staging"
  aws_region       = "us-east-1"
  k8s_cluster_name = "ms-cluster"
}

variable "mysql_password" {
  type        = string
  description = "Expected to be retrieved from environment variable TF_VAR_mysql_password"
}

provider "aws" {
  region = local.aws_region
}

data "aws_eks_cluster" "msur" {
  name = module.aws-kubernetes-cluster.eks_cluster_id
}

module "aws-network" {
  source = "github.com/skyglass-microservices/module-aws-network"

  env_name              = local.env_name
  vpc_name              = "msur-VPC"
  cluster_name          = local.k8s_cluster_name
  aws_region            = local.aws_region
  main_vpc_cidr         = "10.10.0.0/16"
  public_subnet_a_cidr  = "10.10.0.0/18"
  public_subnet_b_cidr  = "10.10.64.0/18"
  private_subnet_a_cidr = "10.10.128.0/18"
  private_subnet_b_cidr = "10.10.192.0/18"
}

module "aws-kubernetes-cluster" {
  source = "github.com/skyglass-microservices/module-aws-kubernetes"

  ms_namespace       = "microservices"
  env_name           = local.env_name
  aws_region         = local.aws_region
  cluster_name       = local.k8s_cluster_name
  vpc_id             = module.aws-network.vpc_id
  cluster_subnet_ids = module.aws-network.subnet_ids

  nodegroup_subnet_ids     = module.aws-network.private_subnet_ids
  nodegroup_disk_size      = "20"
  nodegroup_instance_types = ["t3.medium"]
  nodegroup_desired_size   = 1
  nodegroup_min_size       = 1
  nodegroup_max_size       = 5
}

# Create namespace
# Use kubernetes provider to work with the kubernetes cluster API
provider "kubernetes" {
  # load_config_file       = false
  cluster_ca_certificate = base64decode(data.aws_eks_cluster.msur.certificate_authority.0.data)
  host                   = data.aws_eks_cluster.msur.endpoint
  exec {
    api_version = "client.authentication.k8s.io/v1alpha1"
    command     = "aws-iam-authenticator"
    args        = ["token", "-i", "${data.aws_eks_cluster.msur.name}"]
  }
}

# Create a namespace for microservice pods
resource "kubernetes_namespace" "ms-namespace" {
  metadata {
    name = "microservices"
  }
}

附: 0.14.7 的 terraform kubernetes 提供程序似乎存在问题

我不能在这个版本中使用“load_config_file”=false,所以我不得不评论它,这似乎是这个问题的原因。

附言这也可能是 terraform 尝试使用的过时 cluster_ca_certificate 的问题:删除此证书可能就足够了,尽管我不确定它的存储位置。

【问题讨论】:

    标签: kubernetes terraform terraform-provider-aws amazon-eks


    【解决方案1】:

    在直接操作状态等激进的操作之前,请尝试设置 KUBE_CONFIG_PATH 变量:

    export KUBE_CONFIG_PATH=/path/to/.kube/config
    

    在此之后重新运行planapply 命令。 这已经为我解决了这个问题。

    【讨论】:

    • 出于某种原因,我的环境设置了 KUBECONFIG ,这似乎有效 - 直到最近。 KUBE_CONFIG_PATH 为我工作。酷!
    【解决方案2】:

    我遇到了同样的问题。我什至手动删除了真正搞砸了 terraform 状态的 EKS 集群。

    然而,浪费了几个小时后,我发现有一个非常简单的解决方案。

    你可以跑

    terraform state rm <resource_type>.<resource_name>
    

    我刚刚执行了

    terraform state rm `terraform state list | grep eks`
    

    以安全的方式从状态文件中删除特定服务的所有条目。

    【讨论】:

      【解决方案3】:

      在 AWS 上删除 terraform state S3 存储桶解决了这个问题。

      【讨论】:

        【解决方案4】:

        删除运行“terraform”命令的文件夹中的 .terraform 子文件夹也应该可以解决问题。

        我没有针对这种确切情况尝试过,但我今天遇到了类似的问题,所以我决定分享另一个解决方案。这似乎没有删除 S3 存储桶那么激进。

        【讨论】:

          猜你喜欢
          • 2020-06-19
          • 2023-03-09
          • 2020-09-14
          • 2022-01-26
          • 2020-09-10
          • 2019-01-26
          • 1970-01-01
          • 2022-08-12
          • 2021-02-23
          相关资源
          最近更新 更多