使用启动模板时创建 AWS 节点组时出错

问题描述 投票:0回答:1

尝试使用启动模板创建 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"
                ]
            }
        }
    ]
}

IAM 角色和安全组详细信息

EKS 集群 IAM 角色

{
    "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 集群和节点组 我知道这不是最佳实践,并且具有冗余权限,但范围适用于集群和节点组,当我在不使用启动模板的情况下创建具有此角色的节点组时,它再次起作用。

安全组

我对这个环境中的所有内容使用相同的安全组。我知道这不是最佳实践,但默认情况下允许所有流量入站和出站。只是想消除发生错误的地方。

VPC 和子网

我正在与 EKS 集群相同的 VPC 上创建节点组。 节点组分配有 2 个私有子网 - EKS 集群配置为使用 VPC 上的所有子网。

注意 - 我在 EKS 集群

endpoint_access
管理上启用了私有访问。

注意 - 我的私有子网附加了 NAT,可以访问公共子网和互联网网关 同样,这可以使用相同的子网和角色配置,而无需使用启动模板

EKS 集群详细信息:

{
    "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 创建了一个实例,该实例在我创建没有启动模板的节点组时起作用 -
    AMI ID: ami-06be503a3852b6423
  • 我连接到这个新创建的实例并创建容器化应用程序所需的目录,并安装了我需要的 DeepGram 部署的所有模型。
  • 然后,我从这台计算机创建了一个 AMI(以便节点组在启动模板中使用此 AMI,以便所有新节点都将安装模型和目录

我尝试过的事情:

  • 使用无文件配置的新启动模板,仅使用基于 Amazon Linux 2 EKS 优化 GPU 的 AMI (
    ami-06be503a3852b6423
    )。
  • 从启动模板中删除了除 AMI 之外的所有配置,并将其定义在节点组中
  • 将节点组放在公共子网上。
  • 从创建没有启动模板的节点组时生成的 ec2 计算机创建 AMI,然后从中创建启动模板。

我不明白为什么当我使用启动模板时总是无法创建节点组。

非常感谢任何建议或尝试新事物。

编辑 澄清我的 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"

amazon-web-services amazon-ec2 amazon-eks amazon-vpc launch-template
1个回答
0
投票

我认为您的问题可能是您需要向启动模板提供用户数据,该启动模板指示 EC2 加入 EKS 集群。每当您为 EKS API 创建自定义启动模板时,它都不会自动包含 kubelet 守护进程的引导命令以将节点加入集群。

页面上的第二个链接,单击“提供用户数据以将参数传递给 Amazon EKS 优化的 Linux/Bottlerocket AMI 附带的 bootstrap.sh 文件”部分,然后单击“启动模板中的用户数据”。这显示了您需要在用户数据脚本中提供的数据,以引导节点加入 EKS 集群。您需要提供 CA、EKS API 端点、集群名称、服务子网 CIDR 以及您想要用于配置节点的任何其他引导参数。

© www.soinside.com 2019 - 2024. All rights reserved.