Terraform 创建的 EKS 集群,2 个节点组,一个 Pod 没有网络 - 在哪里调试

时间:2021-02-22 23:25:33

标签: terraform-provider-aws amazon-eks

我有一个使用 terraform 和来自 cloudposse 的模块创建的 EKS 集群。它有两个节点组(由 cloudposse 创建,因此是自动缩放组,而不是 AWS 管理的节点组)从同一模板创建,只有标签和污点不同。

目前每个节点组都设置为一个节点。

由于一些奇怪的原因,当我将 pod 部署到第一个节点时,它运行良好。但是,当我将(几乎)相同的 pod 部署到其他节点组中的节点时,它完全没有网络连接(无法解析 DNS 名称,甚至无法通过 IP ping 或 curl 任何内容)。

我已经检查过两个节点都运行 aws-node 和 kube-proxy。我已经检查了两者的日志,以及两台机器上 kubelet 和 docker 的日志 - 日志看起来基本相同(除非诸如确切的时间戳和创建节点端口的顺序之类的琐碎事情)。我还检查了 iptables(包括所有 -t 可能性)、路由(主机和 pod)。低级测试正在创建两个几乎相同的 pod:

apiVersion: v1
kind: Pod
metadata:
  name: test-sleeper
spec:
  containers:
  - image: alpine:3.12.0
    name: sleeper
    command:
    - sleep
    - "86400"
---
apiVersion: v1
kind: Pod
metadata:
  name: test-sleeper-ci
spec:
  containers:
  - image: alpine:3.12.0
    name: sleeper
    command:
    - sleep
    - "86400"
  nodeSelector:
    role: ci
  tolerations:
  - effect: NoSchedule
    key: only-ci
    operator: Exists

并使用 kubectl exec 运行其中的东西,但在此之前错误就出现了。它没有连接到命名空间 - pods 在同一个,如果错误的一个在非默认命名空间中,它的行为方式相同。集群中没有任何“奇怪”的事情发生 - 这是一个测试,至少每天重新创建。我现在已经在集群的至少 3 个化身中遇到了它。我不知道发生了什么或者我可以从哪里开始调试这个东西。

terraform 模板的相关部分:

module "eks_cluster" {
  source  = "cloudposse/eks-cluster/aws"
  version = "0.34.1"

  context    = module.label.context
  tags       = var.tags
  vpc_id     = module.vpc.vpc_id
  subnet_ids = module.subnets.public_subnet_ids
  region     = var.AWS_REGION

  kubernetes_version                        = var.kubernetes_version
  kubernetes_config_map_ignore_role_changes = false
  oidc_provider_enabled                     = true

  workers_role_arns = [
    module.generic_workers.workers_role_arn,
    module.ci_workers.workers_role_arn,
  ]
  workers_security_group_ids = [
    module.generic_workers.security_group_id,
    module.ci_workers.security_group_id,
  ]
}

module "generic_workers" {
  source  = "cloudposse/eks-workers/aws"
  version = "0.17.7"

  context = module.label.context
  name    = "generic"
  tags    = local.network_tags

  vpc_id        = module.vpc.vpc_id
  subnet_ids    = module.subnets.public_subnet_ids
  instance_type = var.generic_workers.instance_type
  key_name      = "stanza"

  min_size = var.generic_workers.min_size
  max_size = var.generic_workers.max_size

  autoscaling_policies_enabled       = false
  eks_worker_ami_name_filter         = local.eks_worker_ami_name_filter
  cluster_name                       = module.eks_cluster.eks_cluster_id
  cluster_endpoint                   = module.eks_cluster.eks_cluster_endpoint
  cluster_certificate_authority_data = module.eks_cluster.eks_cluster_certificate_authority_data
  cluster_security_group_id          = module.eks_cluster.security_group_id
  associate_public_ip_address        = true
}

module "ci_workers" {
  source  = "cloudposse/eks-workers/aws"
  version = "0.17.7"

  context = module.label.context
  name    = "ci"
  tags    = local.network_tags

  vpc_id        = module.vpc.vpc_id
  subnet_ids    = module.subnets.public_subnet_ids
  instance_type = var.generic_workers.instance_type
  key_name      = "stanza"

  min_size = var.generic_workers.min_size
  max_size = var.generic_workers.max_size

  vpc_id        = module.vpc.vpc_id
  subnet_ids    = module.subnets.public_subnet_ids
  instance_type = var.ci_workers.instance_type
  key_name      = "stanza"

  min_size = var.ci_workers.min_size
  max_size = var.ci_workers.max_size

  kubelet_extra_args = "--register-with-taints=only-ci=true:NoSchedule --node-labels=role=ci"
  autoscaling_group_tags = {
    "k8s.io/cluster-autoscaler/enabled"                              = "true"
    "k8s.io/cluster-autoscaler/${module.eks_cluster.eks_cluster_id}" = "owned"
    "k8s.io/cluster-autoscaler/node-template/label/role"             = "ci"
    "k8s.io/cluster-autoscaler/node-template/taint/only-ci"          = "true:NoSchedule"
  }

  autoscaling_policies_enabled       = false
  eks_worker_ami_name_filter         = local.eks_worker_ami_name_filter
  cluster_name                       = module.eks_cluster.eks_cluster_id
  cluster_endpoint                   = module.eks_cluster.eks_cluster_endpoint
  cluster_certificate_authority_data = module.eks_cluster.eks_cluster_certificate_authority_data
  cluster_security_group_id          = module.eks_cluster.security_group_id
  associate_public_ip_address        = true
}

0 个答案:

没有答案