1

我正在尝试自定义kube-schedulerAKS 群集 (kubernetes v1.19.3) 上的行为,如Scheduler Configuration中所述。

我的目标是使用NodeResourcesMostAllocated插件来使用尽可能少的节点来调度 Pod。

考虑以下文件 -most-allocated-scheduler.yaml

apiVersion: kubescheduler.config.k8s.io/v1beta1
kind: KubeSchedulerConfiguration
profiles:
  - schedulerName: default-scheduler
  - schedulerName: most-allocated-scheduler
    plugins:
      score:
        disabled:
        - name: NodeResourcesLeastAllocated
        enabled:
        - name: NodeResourcesMostAllocated
          weight: 2

根据文档,我可以通过运行以下命令来指定调度配置文件:

kube-scheduler --config most-allocated-scheduler.yaml

但是我究竟在哪里可以找到kube-scheduler以运行上述命令?我想在管道上理想地做到这一点。使用AKS时可以做这样的事情吗?

4

1 回答 1

3

kube-schedulerkubernetes 控制平面的一部分。它的组件安排在主节点上,在托管的 kubernetes 解决方案(如AKSGKEEKS)上,您无权访问。

这意味着无法kube-scheduler在正在运行的AKS群集上重新配置。与AKS 的 GitHub页面上的这个答案进行比较。

但是,可以在创建新集群时为您的 kube-scheduler 提供自定义配置,使用集群定义,特别是在schedulerConfig部分:

调度器配置

schedulerConfig 声明运行在所有主节点上的 kube-scheduler 守护进程的运行时配置。和 kubeletConfig, 一样controllerManagerConfigapiServerConfig 它是一个通用的键/值对象,也是 的子属性 kubernetesConfig。一个示例自定义 apiserver 配置:

"kubernetesConfig": {
    "schedulerConfig": {
        "--v": "2"
    }
}

有关受支持的 kube-scheduler 选项的参考,请参见 此处

...

但请记住,并非所有选项都受支持。Docs 说不--kubeconfig支持 eg ,但正如你可以在这里阅读的那样,这个标志无论如何都被弃用了。没有关于--config标志的任何内容,因此您可以简单地尝试它是否有效。

您还可以通过为 Kubernetes 组件清单使用自定义 YAML 来实现它:

除了上述插件之外,还可以为 kube-scheduler、kube-controller-manager、cloud-controller-manager 和 kube-apiserver 配置自定义 YAML 规范 。您需要将 Kubernetes 清单 YAML 文件 的base64 编码字符串传递给KubernetesComponentConfig["data"] 。例如,要传递自定义 kube-scheduler 配置,请执行以下操作:

"kubernetesConfig": {
    "schedulerConfig": {
            "data" : "<base64-encoded string of your k8s manifest YAML>"
        }
}

注意:插件的自定义 YAML 是一项实验性功能。由于 Addons.Data 允许您提供自己的脚本,因此您应对其错误或失败的任何不良后果负责。使用风险自负。

如您所见,即使在AKS等托管 kubernetes 解决方案中,kube-scheduler也可以在一定程度上进行自定义,但仅限于创建新集群时。

于 2020-11-13T13:36:27.527 回答