我可以看到GKE,AKS,EKS都有内置的节点池概念,但是Kubernetes本身并不提供这种支持。这背后的原因是什么?
我们通常需要不同的节点类型来满足不同的要求,如下所示-
有些单元需要CPU或内存密集型和优化的节点。有些单元正在处理ML/AI算法,需要启用GPU的节点。这些启用GPU的节点应仅由某些单元使用,因为它们非常昂贵。有些单元/作业希望利用可临时/抢占的节点来降低成本。
在Kubernetes没有内置这种支持的背后有什么具体的原因吗?
我可以看到GKE,AKS,EKS都有内置的节点池概念,但是Kubernetes本身并不提供这种支持。这背后的原因是什么?
我们通常需要不同的节点类型来满足不同的要求,如下所示-
有些单元需要CPU或内存密集型和优化的节点。有些单元正在处理ML/AI算法,需要启用GPU的节点。这些启用GPU的节点应仅由某些单元使用,因为它们非常昂贵。有些单元/作业希望利用可临时/抢占的节点来降低成本。
在Kubernetes没有内置这种支持的背后有什么具体的原因吗?
2条答案
按热度按时间eulz3vhy1#
节点池是云提供商特定的技术/分组。
Kubernetes旨在部署在各种基础设施上,包括内部部署/裸机。在这种情况下,节点池没有任何意义。
节点池通常是一种为Kubernetes提供一组相同配置的节点以在集群中使用的方法。
可以使用节点选择器与/或污点/公差指定所需的节点。
因此,您可以使用GPU污染节点,然后要求pod具有匹配的容差,以便在这些节点上进行调度。节点池在这里不会有什么不同。您可以将一个物理服务器加入集群,并以完全相同的方式污染该节点- Kubernetes不会认为这与同样注册到集群的基于Google、Amazon或Azure的节点有任何不同。只是节点上有一些不同的注解。
qrjkbowd2#
正如Blender Fox所述,节点组更具体地针对云提供商分组/目标选项。
在AWS中,我们有节点组或目标组,而在GKE托管/非托管节点组中。
设置群集自动缩放器后,它会在节点池或节点组中增减计数。
如果您在内部部署上运行Kubernetes,则可能没有节点池选项,因为节点组主要是云中的一组VM。而在内部部署上,裸机也作为工作节点工作。
为了向上和向下扩展,K8中有一个集群自动缩放器(CA通过创建/删除虚拟机来添加或删除集群中的节点),它使用云提供商节点组API,而在裸机上,它可能无法简单地工作。
每个提供程序都有自己的实现和逻辑,由标志
--cloud-provider
Code link从K8s确定因此,如果您使用的是内部部署私有云,请编写您自己的云客户端和界面。
不需要节点组,但更多的是云提供商端实施。
用于方案
有些单元需要CPU或内存密集型和优化的节点。有些单元正在处理ML/AI算法,需要启用GPU的节点。这些启用GPU的节点应仅由某些单元使用,因为它们非常昂贵。有些单元/作业希望利用可临时/抢占的节点来降低成本。
您可以根据需要使用Taints-toleration、Affinity或节点选择器在特定类型的节点上调度POD。