amazon-web-services - 我无法将 EKS 节点加入 EKS 集群 (Terraform)
问题描述
我正在使用 terraform v0.14.2 ,并且我正在尝试创建一个 EKS 集群,但是当节点加入集群时我遇到了问题。状态一直停留在“正在创建”中,直到出现错误:
我要部署的代码是:
错误:等待EKS节点组(EKS_SmartSteps:EKS_SmartSteps-worker-node-uk)创建时出错:NodeCreationFailure:实例未能加入kubernetes集群。资源 ID:[i-00c4bac08b3c42225]
resource "aws_eks_node_group" "managed_workers" {
for_each = local.ob
cluster_name = aws_eks_cluster.cluster.name
node_group_name = "${var.cluster_name}-worker-node-${each.value}"
node_role_arn = aws_iam_role.managed_workers.arn
subnet_ids = aws_subnet.private.*.id
scaling_config {
desired_size = 1
max_size = 1
min_size = 1
}
launch_template {
id = aws_launch_template.worker-node[each.value].id
version = aws_launch_template.worker-node[each.value].latest_version
}
depends_on = [
kubernetes_config_map.aws_auth_configmap,
aws_iam_role_policy_attachment.eks-AmazonEKSWorkerNodePolicy,
aws_iam_role_policy_attachment.eks-AmazonEKS_CNI_Policy,
aws_iam_role_policy_attachment.eks-AmazonEC2ContainerRegistryReadOnly,
]
lifecycle {
create_before_destroy = true
ignore_changes = [scaling_config[0].desired_size, scaling_config[0].min_size]
}
}
resource "aws_launch_template" "worker-node" {
for_each = local.ob
image_id = data.aws_ssm_parameter.cluster.value
name = "${var.cluster_name}-worker-node-${each.value}"
instance_type = "t3.medium"
block_device_mappings {
device_name = "/dev/xvda"
ebs {
volume_size = 20
volume_type = "gp2"
}
}
tag_specifications {
resource_type = "instance"
tags = {
"Instance Name" = "${var.cluster_name}-node-${each.value}"
Name = "${var.cluster_name}-node-${each.value}"
}
}
}
事实上,我在 EC2 实例和 EKS 中看到连接到 EKS 集群的节点,但出现以下状态错误:
“实例未能加入 Kubernetes 集群”
我无法检查错误在哪里,因为错误消息没有显示更多信息..
任何想法?
谢谢
解决方案
所以其他人可以跟随,你需要包含一个用户数据脚本来让节点加入集群。就像是:
用户数据.tpl
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="==MYBOUNDARY=="
--==MYBOUNDARY==
Content-Type: text/x-shellscript; charset="us-ascii"
#!/bin/bash
set -ex
/etc/eks/bootstrap.sh ${CLUSTER_NAME} --b64-cluster-ca ${B64_CLUSTER_CA} --apiserver-endpoint ${API_SERVER_URL}
--==MYBOUNDARY==--\
你在哪里渲染它
locals {
user_data_values = {
CLUSTER_NAME = var.cluster_name
B64_CLUSTER_CA = var.cluster_certificate_authority
API_SERVER_URL = var.cluster_endpoint
}
}
resource "aws_launch_template" "cluster" {
image_id = "ami-XXX" # Make sure the AMI is an EKS worker
user_data = base64encode(templatefile("userdata.tpl", local.user_data_values))
...
}
除此之外,请确保节点组是工作人员安全组的一部分并具有所需的 IAM 角色,您应该没问题。
推荐阅读
- tibero - 如何解决 tibero 中的“JDBC-5072:将 NUMBER 转换为本机类型或从本机类型转换失败”错误?
- django - 在 django 中嵌套自定义序列化程序类是个好主意吗?
- m3u8 - ffplay 的播放选项
- java - 在另一个类中调用日期的字符串值作为日期变量
- azure-sql-database - ADF - 在源中使用单引号在日期列中传递 SQL 查询
- spring-security - Oauth2.0 | 如何在 iframe 中运行的单页应用程序中管理用户会话?
- javascript - 使用两个不同的数组创建视图
- python - 全局变量可用
- excel - Excel 到 Word:操作域代码和开关
- python - Python Selenium:元素不可交互错误