AWS EKS节点组“创建失败”:示例无法加入kubernetes群集

jchrr9hc  于 2022-12-22  发布在  Kubernetes
关注(0)|答案(9)|浏览(414)

我可以创建EKS群集,但当我尝试添加节点组时,收到"Create failed"(创建失败)错误,详细信息如下:"节点创建失败":示例无法加入kubernetes群集
我尝试了各种示例类型,并增加了更大的卷大小(60gb),但运气不佳。查看EC2示例,我只看到以下问题。然而,由于我没有直接启动EC2示例(EKS NodeGroup UI向导正在执行此操作),因此很难执行任何操作。
考虑到故障甚至在我能够跳进ec2机器并"修复"它们之前就发生了,一个人将如何前进呢?
亚马逊Linux 2
x86_64上的内核4.14.198 - 152.320.amzn2.x86_64
IP-187 - 187 - 187 - 175登录:[54.474668]云初始化[3182]:其中一个配置的存储库失败(未知),[54.475887] cloud-init [3182]:并且yum没有足够的缓存数据来继续。此时,只有[54.478096] cloud-init [3182]:百胜可以做的安全的事情是失败。有几种方法可以"修复"这个问题:[54.480183]云初始化[3182]:1.联系存储库的上游,让他们修复问题。[54.483514] cloud-init [3182]:2.重新配置存储库的baseurl/etc,以指向一个工作的[54.485198] cloud-init [3182]:如果您使用的是较新的[54.486906] cloud-init [3182],这通常很有用:分发版本比存储库支持的版本(以及[54.488316] cloud-init [3182]:之前发布版本的软件包仍然有效)。[54.489660] cloud-init [3182]:3.在存储库暂时禁用的情况下运行命令[54.491045] cloud-init [3182]:[54.491285]云初始化[3182]:4.永久禁用存储库,因此百胜在默认情况下不会使用它。百胜[54.493407] cloud-init [3182]:然后将忽略存储库,直到您永久启用它[54.495740] cloud-init [3182]:或使用--enablerepo临时使用:[54.495996]云初始化[3182]:yum配置管理器--禁用

hzbexzde

hzbexzde1#

在列表中添加另一个原因:
在我的例子中,节点在私有子网中运行,*我没有在 API服务器端点访问 * 下配置私有端点
更新后,节点组没有自动更新,所以我必须重新创建它们。

9gm1akwq

9gm1akwq2#

我注意到这里没有答案,但在过去的六个月里,这个问题的访问量达到了2k。你可能会看到这些失败的原因似乎有很多。回顾一下这里找到的AWS文档:https://docs.aws.amazon.com/eks/latest/userguide/troubleshooting.html

  • aws-auth-cm.yaml文件没有节点的正确IAM角色ARN。请确保在aws-auth-cm.yaml文件中指定了节点IAM角色ARN(而不是示例概要文件ARN)。有关详细信息,请参阅启动自管理Amazon Linux节点。
  • 节点AWS CloudFormation模板中的ClusterName与您希望节点加入的群集的名称不完全匹配。向此字段传递不正确的值将导致节点的/var/lib/kubelet/kubeconfig文件配置不正确,并且节点将不会加入群集。
  • 该节点未标记为属于群集。您的节点必须应用以下标记,其中将替换为群集的名称。
Key Value kubernetes.io/cluster/<cluster-name> 
    Value owned
  • 节点可能无法使用公用IP地址访问群集。请确保为公用子网中部署的节点分配了公用IP地址。如果没有,则可以在启动节点后将弹性IP地址与节点关联。有关详细信息,请参阅请参见将弹性IP地址与正在运行的示例或网络接口相关联。如果公用子网未设置为自动向部署到该子网的示例分配公用IP地址,则建议启用该设置。有关详细信息,请参阅请参阅修改子网的公用IPv4寻址属性。如果将节点部署到专用子网,则子网必须具有到分配有公用IP地址的NAT网关的路由。
  • 未为您的帐户启用您要部署节点的区域的STS终结点。要启用该区域,请参阅在AWS区域中激活和停用AWS STS。
  • 工作机节点没有专用DNS条目,导致包含节点“”的kubelet日志未找到错误。请确保创建工作机节点的VPC在DHCP选项集中将域名和域名服务器的值设置为选项。默认值为域名:.compute.internal和域名服务器:AmazonProvidedDNS。有关详细信息,请参阅Amazon VPC用户指南中的DHCP选项集。

我自己在标记需要大写字母的地方遇到了问题。实际上,如果你可以使用另一种方法来部署你的EKS集群,我会推荐它(eksctl,aws cli,terraform even)。

agyaoht7

agyaoht73#

在我的例子中,问题是我在一个私有子网中部署我的节点组,但是这个私有子网没有关联的NAT网关,因此没有互联网访问。
1.创建NAT网关
1.使用以下路由创建新的路由表(第二个是Internet访问路由,通过NAT):

  • 目的地:VPC-CIDR块目标:局部
    *Destination: 0.0.0.0/0 Target: NAT-gateway-id

1.将私有子网与第二步中创建的可路由表关联。
之后,节点组就可以毫无问题地加入集群。

ubby3x7f

ubby3x7f4#

我会尽量简短地回答,强调一些事情,可以出错的前线。

**1.**将附加到EKS工作节点的IAM角色添加到kube-system名称空间中的aws-auth配置Map。Ref
**2.**登录到已创建但未能加入群集的工作节点。尝试使用nc从内部连接到API服务器。例如:nc -vz 9FCF4EA77D81408ED82517B9B7E60D52.yl4.eu-north-1.eks.amazonaws.com 443
**3.**如果您没有使用AWS控制台下拉列表中的EKS节点(这意味着您正在AWS EC2中使用LT或LC),请不要忘记在启动模板中添加userdata部分。Ref

set -o xtrace
/etc/eks/bootstrap.sh ${ClusterName} ${BootstrapArguments}

**4.**检查EKS工作程序IAM节点策略,查看是否已添加适当的权限。AmazonEKS_CNI_Policy是必须的。
**5.**您的节点必须应用以下标记,其中cluster-name将替换为群集的名称。kubernetes.io/cluster/cluster-name: owned

我希望你的问题就在这张单子里。
参考编号:https://docs.aws.amazon.com/eks/latest/userguide/troubleshooting.htmlhttps://aws.amazon.com/premiumsupport/knowledge-center/resolve-eks-node-failures/

5lwkijsr

5lwkijsr5#

首先,我把nat网关放在了我的私有子网里,然后我把nat网关移回了公共子网,这样就可以正常工作了。
地形代码如下:

resource "aws_internet_gateway" "gw" {
  vpc_id = aws_vpc.dev-vpc.id
  tags = {
    Name = "dev-IG"
  }
}

resource "aws_eip" "lb" {
  depends_on    = [aws_internet_gateway.gw]
  vpc           = true
}

resource "aws_nat_gateway" "natgw" {
  allocation_id = aws_eip.lb.id
  subnet_id     = aws_subnet.dev-public-subnet.id
  depends_on = [aws_internet_gateway.gw]
  tags = {
    Name = "gw NAT"
  }
}
mm9b1k5b

mm9b1k5b6#

尝试向部署工作节点的专用子网添加标记。
kubernetes.io/cluster/ <cluster_name>=共享

gtlvzcf8

gtlvzcf87#

我们需要检查什么类型的nat网关我们配置。它应该是公共的,但在我的情况下,我配置为私人。
一旦我从私人转为公共,问题就解决了。

jm2pwxwz

jm2pwxwz8#

自动缩放组日志显示我们已达到报价限制。Launching a new EC2 instance. Status Reason: You've reached your quota for maximum Fleet Requests for this account. Launching EC2 instance failed.https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/fleet-quotas.html

aydmsdu9

aydmsdu99#

我有一个类似的问题,任何提供的解决方案工作。经过一些调查和运行:

journalctl -f -u kubelet

在日志中,我有:

Error: failed to run Kubelet: running with swap on is not supported, please disable swap! or set --fail-swap-on flag to false

因此,很自然地,解决方案似乎禁用了与

swapoff -a

然后运行正常,节点已注册,使用jounralctlsystemctl status kubelet检查时输出正常。

相关问题