我们希望将尽可能多的pod打包到集群中的每个节点中,以减少我们在某些环境中拥有的节点数量。我看到了https://github.com/kubernetes-sigs/descheduler HighNodeUtilization策略,它似乎符合我们的需求。然而,集群似乎需要有评分策略MostAllocated
我相信EKS中的kube-scheduler是无法配置的。如何配置MostAllocated计分策略?
更好的是,我如何在不使用desscheduler的情况下在集群中尽可能少的节点中配置这种自动打包pod ?
尝试在未配置MostAllocated评分策略的情况下按原样部署调度器。显然没有提供预期的结果。
我在网上进行了大量的挖掘,导致我不得不创建一个自定义调度程序,但我发现很少/不清楚能够这样做的资源。
Eks不提供覆盖默认调度器配置的能力,这意味着实际上不能用MostAllocated
评分策略配置default-scheduler
配置文件。但是,您可以在默认调度器旁边运行您自己的调度器,并且这个调度器可以按照您喜欢的方式配置。一旦您创建了自定义调度器,您就可以使用MostAllocated
评分策略覆盖该调度器的配置,然后指示您的工作负载使用该调度器。
为了运行多个调度器,你必须设置几个Kubernetes对象。这些对象在上面链接的指南中有文档记录:
- ServiceAccount
- ClusterRoleBinding x2
- RoleBinding
- ConfigMap 部署
部署将使用Google提供的标准kube-scheduler
映像,除非您想创建自己的映像。我不推荐。
Major注意:确保您的kube-scheduler的版本与控制平面的版本相同。否则将无法工作。
此外,确保您的kube-scheduler
版本与用于配置调度程序配置文件的配置对象的版本兼容。v1beta2
对v1.22.x
->v1.24.x
,但只有v1beta3
或v1
对v.1.25+
是安全的。
例如,下面是一个部署清单和配置映射的工作版本,用于创建与k8s
v.1.22.x
兼容的自定义调度程序。注意,您仍然需要创建其他对象以使其工作:
apiVersion: apps/v1
kind: Deployment
metadata:
name: custom-scheduler
namespace: kube-system
spec:
replicas: 1
selector:
matchLabels:
name: custom-scheduler
template:
metadata:
labels:
component: scheduler
name: custom-scheduler
tier: control-plane
spec:
containers:
- command:
- /usr/local/bin/kube-scheduler
- --config=/etc/kubernetes/custom-scheduler/custom-scheduler-config.yaml
env: []
image: registry.k8s.io/kube-scheduler:v1.22.16
imagePullPolicy: IfNotPresent
livenessProbe:
httpGet:
path: /healthz
port: 10259
scheme: HTTPS
name: custom-scheduler
readinessProbe:
httpGet:
path: /healthz
port: 10259
scheme: HTTPS
volumeMounts:
- mountPath: /etc/kubernetes/custom-scheduler
name: custom-scheduler-config
serviceAccountName: custom-scheduler
volumes:
- configMap:
name: custom-scheduler-config
name: custom-scheduler-config
apiVersion: v1
kind: ConfigMap
data:
custom-scheduler-config.yaml: |
apiVersion: kubescheduler.config.k8s.io/v1beta2
kind: KubeSchedulerConfiguration
leaderElection:
leaderElect: false
profiles:
- pluginConfig:
- args:
apiVersion: kubescheduler.config.k8s.io/v1beta2
kind: NodeResourcesFitArgs
scoringStrategy:
resources:
- name: cpu
weight: 1
- name: memory
weight: 1
type: MostAllocated
name: NodeResourcesFit
plugins:
score:
enabled:
- name: NodeResourcesFit
weight: 1
schedulerName: custom-scheduler
metadata:
name: custom-scheduler-config
namespace: kube-system