尝试使用启动模板创建 EKS 节点组时遇到错误
Could note join nodes to cluster
。
如果我不指定启动模板并直接在创建节点组控制台配置中选择 AMI,我可以创建节点组。请注意,所有其他配置都相同(VPC、私有子网、安全组、IAM 角色、实例类型、最小/最大实例)。在这里,我选择 AMI ID
ami-06be503a3852b6423
并将 g4dn.2xLarge
用于按需实例。
{
"LaunchTemplateVersions": [
{
"LaunchTemplateId": "TEMPLATEID",
"LaunchTemplateName": "eks-gpu-optimized-template-engine-primary",
"VersionNumber": 2,
"VersionDescription": "adding key",
"CreateTime": "2024-01-17T21:13:31+00:00",
"CreatedBy": "arn:aws:iam::USER",
"DefaultVersion": false,
"LaunchTemplateData": {
"BlockDeviceMappings": [
{
"DeviceName": "/dev/sdb",
"VirtualName": "ephemeral0"
}
],
"ImageId": "ami-099c85b23bfc2fd16",
"InstanceType": "g4dn.2xlarge",
"KeyName": "XXXXXXXXX",
"SecurityGroupIds": [
"sg-XXXXXXXXXXXXX"
]
}
}
]
}
{
"Role": {
"Path": "/",
"RoleName": "eksClusterRole",
"RoleId": "ROLEID",
"Arn": "arn:aws:iam::XXXXX:role/eksClusterRole",
"CreateDate": "2023-11-27T17:57:08+00:00",
"AssumeRolePolicyDocument": {
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": [
"ec2.amazonaws.com",
"eks.amazonaws.com"
]
},
"Action": "sts:AssumeRole"
}
]
},
"Description": "Allows access to other AWS service resources that are required to operate clusters managed by EKS.",
"MaxSessionDuration": 3600,
"RoleLastUsed": {
"LastUsedDate": "2024-01-17T22:40:41+00:00",
"Region": "us-east-2"
}
}
}
附有政策:
- AmazonEC2ContainerRegistryReadOnly AWS managed 1
- AmazonEKS_CNI_Policy AWS managed 3
- AmazonEKSClusterPolicy AWS managed 3
- AmazonEKSServicePolicy AWS managed 3
- AmazonEKSVPCResourceController AWS managed 3
- AmazonEKSWorkerNodePolicy AWS managed 3
注意 - 我将此角色用于 EKS 集群和节点组 我知道这不是最佳实践,并且具有冗余权限,但范围适用于集群和节点组,当我在不使用启动模板的情况下创建具有此角色的节点组时,它再次起作用。
我对这个环境中的所有内容使用相同的安全组。我知道这不是最佳实践,但默认情况下允许所有流量入站和出站。只是想消除发生错误的地方。
我正在与 EKS 集群相同的 VPC 上创建节点组。 节点组分配有 2 个私有子网 - EKS 集群配置为使用 VPC 上的所有子网。
注意 - 我在 EKS 集群
endpoint_access
管理上启用了私有访问。
注意 - 我的私有子网附加了 NAT,可以访问公共子网和互联网网关 同样,这可以使用相同的子网和角色配置,而无需使用启动模板
{
"cluster": {
"name": "us-2-prod-primary-cluster",
"arn": "arn:aws:eks:us-east-2:XXXXXX:cluster/us-2-prod-primary-cluster",
"createdAt": "2024-01-11T14:18:07.322000+00:00",
"version": "1.28",
"endpoint": "https://XXXXXXXXXXXXX.gr7.us-east-2.eks.amazonaws.com",
"roleArn": "arn:aws:iam::792342206980:role/eksClusterRole",
"resourcesVpcConfig": {
"subnetIds": [
"subnet-xdd5",
"subnet-x9bb",
"subnet-xef7",
"subnet-x5e7",
"subnet-x84e",
"subnet-xcf4",
"subnet-xbc4",
"subnet-x785",
"subnet-x04c"
],
"securityGroupIds": [
"sg-XXXXX"
],
"clusterSecurityGroupId": "sg-XXX",
"vpcId": "vpc-0f7294aef4d6f6e6f",
"endpointPublicAccess": false,
"endpointPrivateAccess": true,
"publicAccessCidrs": []
},
"kubernetesNetworkConfig": {
"serviceIpv4Cidr": "10.100.0.0/16",
"ipFamily": "ipv4"
},
"logging": {
"clusterLogging": [
{
"types": [
"api",
"audit",
我的启动模板中使用的 AMI 是自定义 AMI。
AMI ID: ami-06be503a3852b6423
ami-06be503a3852b6423
)。我不明白为什么当我使用启动模板时总是无法创建节点组。
非常感谢任何建议或尝试新事物。
编辑 澄清我的 EKS 集群/控制平面 Kubernetes 版本是 1.28,它与我正在使用的 EKS 优化 gpu 节点 AMI 匹配 (
ami-06be503a3852b6423 - amazon-eks-gpu-node-1.28-v20240110
)
我也经常在
kube-apiserver
日志中看到这个错误:
2024-01-17T22:53:08.000-06:00 Copy W0118 04:53:08.826989 9 logging.go:59] [core] [Channel #26636 SubChannel #26637] grpc: addrConn.createTransport failed to connect to {Addr: "10.0.x.x:xxxx", ServerName: "10.x.xx.xx", }. Err: connection error: desc = "transport: Error while dialing: dial tcp 10.0.32.16:2379: operation was canceled" W0118 04:53:08.826989 9 logging.go:59] [core] [Channel #26636 SubChannel #26637] grpc: addrConn.createTransport failed to connect to {Addr: "10.0.xx.xx:xxxx", ServerName: "10.0.xx.xx", }. Err: connection error: desc = "transport: Error while dialing: dial tcp 10.0.xx.xx:xxxx: operation was canceled"
我认为您的问题可能是您需要向启动模板提供用户数据,该启动模板指示 EC2 加入 EKS 集群。每当您为 EKS API 创建自定义启动模板时,它都不会自动包含 kubelet 守护进程的引导命令以将节点加入集群。
页面上的第二个链接,单击“提供用户数据以将参数传递给 Amazon EKS 优化的 Linux/Bottlerocket AMI 附带的 bootstrap.sh 文件”部分,然后单击“启动模板中的用户数据”。这显示了您需要在用户数据脚本中提供的数据,以引导节点加入 EKS 集群。您需要提供 CA、EKS API 端点、集群名称、服务子网 CIDR 以及您想要用于配置节点的任何其他引导参数。