kubernetes的节点与节点池概念 vs karpenter的去节点池理念。
k8s在给定的节点资源或集群资源上调度并运行应用,其先决条件是资源某种程度上既定(即资源总量某种程度上是一定的,虽然有弹性扩容,但资源的规格是固定的,并且一旦扩容完成后再在此资源总量上执行调度决策,这仍然可以看做是资源总量固定),然后在该资源范围上做调度决策。调度的碎片化不可避免。
karpenter的逻辑是去节点池化的,一切以应用的需要为第一优先级的,资源空间(资源总量、资源规格)并非事先既定,他是按照调度应用最合适的方式在来自动生产资源。这样的好处是真正的资源按需,无碎片。在加上他的binpack及重调度,能在成本上达到更加优化的效果。
一个例子: 一个集群或者节点池总容量是<100c 100g>, 每个节点的规格是<10c,10g>. k8s的调度决策是在这两个限定条件下执行调度决策的。而karpenter没有这个限制条件的,他可以根据应用的需要自行的生产合适的规格来调度应用,能最大程度的避免碎片化问题(思考一个问题,碎片化的问题是被解决了还是被转嫁了?比如说转嫁给云厂商)。 如karpenter的binpack,以及重调度。