如何自定义 AKS 上 kube-scheduler 的行为?

Rui*_*mba 3 kubernetes azure-aks kube-scheduler

我正在尝试自定义 AKS 集群 (kubernetes v1.19.3) 上的行为kube-scheduler,如调度程序配置中所述。

我的目标是使用该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
Run Code Online (Sandbox Code Playgroud)

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

kube-scheduler --config most-allocated-scheduler.yaml
Run Code Online (Sandbox Code Playgroud)

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

mar*_*rio 7

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

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

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

调度程序配置

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

"kubernetesConfig": {
    "schedulerConfig": {
        "--v": "2"
    }
}
Run Code Online (Sandbox Code Playgroud)

请参阅 此处 以获取受支持的 kube-scheduler 选项的参考。

...

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

您还可以通过使用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>"
        }
}
Run Code Online (Sandbox Code Playgroud)

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

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