AWS EKS 0/1 节点可用。 1 豆荚不足

Posted

技术标签:

【中文标题】AWS EKS 0/1 节点可用。 1 豆荚不足【英文标题】:AWS EKS 0/1 nodes are available. 1 insufficient pods 【发布时间】:2020-03-18 03:33:12 【问题描述】:

我们正在尝试使用 ECR 将 dot net core API 服务部署到亚马逊 EKS。部署成功,但 Pod 处于待处理状态。以下是我们遵循的详细步骤。

接下来的步骤。 1.创建一个docker镜像 2. 将图像推送到 ECR。该图像现在也可以在 aws 控制台中看到。 // 图片看起来不错,我可以在本地使用我的 docker 运行它。

    创建了一个 t2-micro 集群,如下所示 eksctl 创建集群 --name net-core-prod --version 1.14 --region us-west-2 --nodegroup-name standard-workers --node-type t2.micro --nodes 1 --nodes-min 1 - -nodes-max 1 –托管 // 集群和节点组创建成功。 // IAM 角色也被创建了

    使用附加的 json/yaml//net-app.json 部署了一个复制控制器

    使用附加的 json/yaml //net-app-scv.json 部署服务

    get all 命令返回了这个。 //get_all.png POD 始终保持 PENDING 状态。

    Pod describe 给出了以下结果 //describe_pod.png

    我们还尝试向集群 IAM 角色添加策略以包括附加的 ECR 权限。 //ECR_policy.json

要点: 1. 我们使用的是 t2-micro 实例集群,因为它是 AWS 免费账户。 2.我们创建了一个linux集群,尝试推送dotnet core app。 //这在我们的本地机器上运行良好 3.集群只有1个节点 //-nodes 1 --nodes-min 1 --nodes-max 1

有人可以指导我们如何正确设置它。

【问题讨论】:

kubectl describe pod 屏幕截图中的输出不完整。分享完整的输出 执行 kubectl get nodes -o yaml | grep pods 以查看当前每个节点的最大 pod 数 【参考方案1】:

在 Amazon Elastic Kubernetes Service (EKS) 上,每个节点的最大 Pod 数量取决于节点类型,范围从 4 到 737。

如果达到最大限制,您将看到如下内容:

❯ kubectl get node -o yaml | grep pods
      pods: "17" => this is allocatable pods that can be allocated in node
      pods: "17" => this is how many running pods you have created

如果你只得到一个数字,它应该是可分配的。计算所有正在运行的 pod 的另一种方法是运行以下命令:

kubectl get pods --all-namespaces | grep Running | wc -l

这是每个节点类型的最大 pod 列表: https://github.com/awslabs/amazon-eks-ami/blob/master/files/eni-max-pods.txt

在 Google Kubernetes Engine (GKE) 上,每个节点的限制为 110 个 Pod。检查以下网址:

https://github.com/kubernetes/community/blob/master/sig-scalability/configs-and-limits/thresholds.md

在 Azure Kubernetes 服务 (AKS) 上,默认限制是每个节点 30 个 pod,但可以增加到 250 个。每个节点的默认最大 pod 数量因 kubenet 和 Azure CNI 网络而异,以及集群部署。查看以下网址了解更多信息:

https://docs.microsoft.com/en-us/azure/aks/configure-azure-cni#maximum-pods-per-node

【讨论】:

这太棒了。迄今为止我遇到的最有用的 Kubernetes 帖子。谢谢! ❯ kubectl get node -o yaml | grep pods pods: "17" => this is allocatable pods that can be allocated in node pods: "17" => this is how many running pods you have created 这是不正确的。第一个是容量,第二个是可分配的。简而言之,它们总是相同的。 非常感谢你,我完全不知道它的存在,这个回复为我节省了大量时间!【参考方案2】:

更新:我尝试将节点数增加到 6,它现在正在工作。

已经安排了 4 个 kube-system pod,因此请尝试将其增加到 6 个。

我不擅长 Kubes,它只是一个反复试验的结果。

如果有经验的人可以阐明这是如何工作的,那将非常有用。

【讨论】:

【参考方案3】:

pod 调度失败。

问题可能与节点配置有关。

分享以下命令的输出以确定根本原因

1.  kubectl describe node <node-name>
2.  kubectl describe pod <pod-name>
3.  kubectl get ev

每个节点可以运行的 pod 数量是有限制的(无论资源如何),您已经达到了这个限制。您可以在 kubectl get node -o yaml 的输出中找到该限制

从节点输出中可以清楚地看出,您已达到每个节点的 pod 限制。检查 pod 的分配与容量。两者都显示计数有 4。

解决方案:您需要在集群中再添加一个节点才能部署额外的工作负载

【讨论】:

【参考方案4】:

问题是您使用的是t2.micro。至少需要t2.small。调度程序无法在节点上调度 pod,因为t2.micro 实例上没有足够的可用容量。大部分容量已被系统资源占用。至少使用t2.small

【讨论】:

谢谢拉杰什。即使我有同样的想法,但找不到任何关于最低要求的文档。我们有任何可以帮助我们的参考链接吗? 可以在 github 上的eks-ami repo 中找到关于可以调度多少个 pod 的信息。您可以查找任何类型机器的限制。 我使用的是 t3.micro,但这还不够,所以添加了另一个大小为 t3.small 的节点组来解决问题。

以上是关于AWS EKS 0/1 节点可用。 1 豆荚不足的主要内容,如果未能解决你的问题,请参考以下文章

如何将“–kubelet-extra-args”传递给 Terraform aws_eks_node_group 创建的 AWS EKS 节点组?

EKS:在特定 AWS 自动缩放组上运行特定服务(pod)

K8S & EKS 简介与实践

AWS EKS Cluster Autoscaler - 缩减策略

EKS 上的 AWS NLB 粘性会话

EKS中的UDP负载平衡替代方案