我有一个使用 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
}