首页 文章

访问重新安排程序的pod数据

提问于
浏览
1

我想实现一个类似功能的重新调度程序,如果它决定可以以更好的方式重新安排pod(基于需要更少数量的节点/拟合等),它基本上会杀死pod . 直到现在我已经创建了一个新的kubectl命令,每当我想重新安排时我想运行它 . 我还查看了文档中的代码和重新安排程序提议 .

但是,我无法访问从命令的 run 函数(存在于 pkg/kubectl/cmd/newCommand.go 中)中确定要杀死哪个pod所需的pod详细信息 . 我想我可以使用类似于 kubectl deletecreate 使用的机制杀死并重启pod,但我无法获得所有必需的pod和节点列表 .

例如, pkg/kubectl/cmd/get.go 中的 objs 变量(用于 kubectl get )包含pod详细信息,但没有关于它们被调度到哪个节点以及该节点的资源容量的数据 .

如果有人能够知道如何获得这些细节,我将不胜感激 . 此外,如果在其他地方更容易实现它而不是作为kubectl命令,那么也欢迎这样的建议 .

1 回答

  • 2

    首先,如果您还没有,请参阅https://github.com/kubernetes/kubernetes/issues/11793#issuecomment-150410114 .

    我想我可以使用类似于kubectl delete和create使用的机制杀死并重启pod,但我无法获得所有必需的pod和节点列表 .

    我建议改为编写一个控制循环 . 当您创建一个pod时,它存储在主服务器中,您可以轻松创建一个Kubernetes客户端来检索此pod,就像Kubernetes调度程序一样 . 有关如何通过客户端访问api的信息,请参见[1] . 考虑到这一点,我建议编写一个控制循环 . 有几个现有的例子[2],但是一个非常基本的控制器是Ingress控制器(只是让你不会被 生产环境 控制器中的所有代码混淆)[3] .

    您将面临的一个问题是让Kubernetes调度程序忽略该pod . 请参阅有关解决方案的github问题的讨论 .

    如果你还想要的话,你可以去你所在的路线并在kubectl中实现它 . 跑:

    kubectl get pods -o wide --v = 7

    请注意,此输出具有节点名称,kubectl应显示REST调用它只是想创建/删除,因为调度程序很可能将pod放在同一节点上 .

    [1] kubernetes go client used storage of nodes and cluster
    [2] https://github.com/kubernetes/kubernetes/tree/master/pkg/controller
    [3] https://github.com/kubernetes/contrib/tree/master/Ingress/controllers

相关问题