我想根据资源使用情况扩展/缩小kubernetes集群使用的kubelet数量。我一直在查看代码并了解如何在高级别实现它。
我被困在两件事上:
访问群集指标的好方法是什么(通过Heapster)?我应该尝试使用kubedns来查找heapster端点并直接查询API,还是有其他方法可行吗?此外,我不确定如何使用kubedns获取前者的heapster URL。
扩展/缩小节点数的重新调度程序需要每隔30分钟启动一次。什么是最好的方式。我可以在代码中使用某些接口或其他内容,还是应该编写一个每30分钟调用一次的代码段并将其放入主循环中?
非常感谢任何帮助:)
答案 0 :(得分:2)
第1部分:
您所说的使用kubedns查找heapster并查询REST API是否合适。
您还可以编写一个客户端接口,将接口抽象为heapster - 这有助于单元测试。
看一下这个指标客户端: https://github.com/kubernetes/kubernetes/blob/master/pkg/controller/podautoscaler/metrics/metrics_client.go 它并不完全符合您的要求:它获取每个Pod统计信息而不是每个集群或每个节点的统计信息。但你可以修改它。
在函数getForPods
中,您可以看到解析heapster服务并在此处连接到它的代码:
resultRaw, err := h.client.Services(h.heapsterNamespace).
ProxyGet(h.heapsterService, metricPath, map[string]string{"start": startTime.Format(time.RFC3339)}).
DoRaw()
其中heapsterNamespace是“kube-system”而heapsterService是“heapster”。
该指标客户端是“horizonal pod autoscaler”实现的一部分。它解决了一个稍微不同的问题,但如果你还没有,你应该看看它。如果在此处描述: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开发人员中,我们通常使用术语“重新调度程序”来讨论通过从一台计算机上删除一个pod并在另一台计算机上创建相同类型的pod时跨机器重新平衡pod的内容。这与你谈论建筑的事情不同。我们还没有建立一个重新安排程序,但是这里有一个如何构建一个重新安排程序的概述: https://github.com/kubernetes/kubernetes/blob/master/docs/proposals/rescheduler.md