2015-11-04 58 views
1

我想基于资源使用情况扩展/缩小kubernetes集群正在使用的kubelets的数量。我一直在看代码,并对如何在高层实现它有一些想法。在Kubernetes代码中访问heapster指标

我被困在两两件事:

  1. 什么将是(通过Heapster)访问集群度量的好办法?我是否应该尝试使用kubedns来查找heapster端点并直接查询API或者是否有其他可能的方式?另外,我不确定如何使用kubedns来获取前者中的heapster URL。

  2. 扩展/缩小节点数量的rescheduler将需要每30分钟踢一次。什么是最好的方式。在代码中是否有一些接口或其他东西可用,或者我应该写一段代码段,每隔30分钟调用一次并将其放入主循环中?

任何帮助,将不胜感激:) 1

回答

1

部分:

你说的关于使用kubedns找到heapster和查询该REST API什么是好的。

你也可以编写一个将接口抽象为heapster的客户接口 - 这有助于单元测试。

看看这个指标的客户: https://github.com/kubernetes/kubernetes/blob/master/pkg/controller/podautoscaler/metrics/metrics_client.go 它不会做的正是你想要的东西:它得到每荚统计,而不是每个群集或每个节点的统计资料。但你可以修改它。

在功能getForPods,你可以看到,在这里解决了heapster服务,并连接到它的代码:

 resultRaw, err := h.client.Services(h.heapsterNamespace). 
      ProxyGet(h.heapsterService, metricPath, map[string]string{"start": startTime.Format(time.RFC3339)}). 
      DoRaw() 

其中heapsterNamespace是“KUBE-系统”和heapsterService是“heapster”。

度量客户端是“水平吊舱自动调节器”实现的一部分。它正在解决一个稍微不同的问题,但是如果你还没有的话,你应该看看它。 FYI https://github.com/kubernetes/kubernetes/blob/master/docs/design/horizontal-pod-autoscaler.md

:如果在这里描述的Heapster REST API在这里定义: https://github.com/kubernetes/heapster/blob/master/docs/model.md 你应该闲逛,看看是否有适合你的工作节点级或集群级CPU的指标。

第2部分:

没有用于收缩节点的标准接口。每个云提供商都不同。如果你在本地,那么你不能缩小节点。

相关讨论: https://github.com/kubernetes/kubernetes/issues/11935

边注:在kubernetes开发人员,我们通常谈论的事情重新平衡跨机器吊舱时,通过从一台机器一个吊舱,并创建同一种使用术语“再调度”在另一台机器上的荚。这与你正在谈论的建筑物不同。我们还没有建立重新安排,但有一个如何在这里建立一个纲要: https://github.com/kubernetes/kubernetes/blob/master/docs/proposals/rescheduler.md