直接部署上面的资源对象即可,这样我们就部署了一个名为 sample-scheduler 的调度器了,接下来我们可以部署一个应用来使用这个调度器进行调度:
# test-scheduler.yamlapiVersion: apps/v1kind: Deploymentmetadata:name: test-schedulerspec:selector:matchLabels:app: test-schedulertemplate:metadata:labels:app: test-schedulerspec:schedulerName: sample-scheduler # 指定使用的调度器,不指定使用默认的default-schedulercontainers:- image: Nginx:1.7.9imagePullPolicy: IfNotPresentname: nginxports:- containerPort: 80
这里需要注意的是我们现在手动指定了一个 schedulerName 的字段,将其设置成上面我们自定义的调度器名称 sample-scheduler 。
我们直接创建这个资源对象,创建完成后查看我们自定义调度器的日志信息:
? kubectl get pods -n kube-system -l compnotallow=sample-schedulerNAMEREADYSTATUSRESTARTSAGEsample-scheduler-896658cd7-k7vcl1/1Running057s? kubectl logs -f sample-scheduler-896658cd7-k7vcl -n kube-systemI0114 09:14:18.8786131 eventhandlers.go:173] add event for unscheduled pod default/test-scheduler-6486fd49fc-zjhcxI0114 09:14:18.8786701 scheduler.go:464] Attempting to schedule pod: default/test-scheduler-6486fd49fc-zjhcxI0114 09:14:18.8787061 sample.go:77] "Start PreFilter Pod" pod="test-scheduler-6486fd49fc-zjhcx"I0114 09:14:18.8788021 sample.go:93] "Start Filter Pod" pod="test-scheduler-6486fd49fc-zjhcx" node="node2" preFilterState=&{Resource:{MilliCPU:0 Memory:0 EphemeralStorage:0 AllowedPodNumber:0 ScalarResources:map[]}}I0114 09:14:18.8788351 sample.go:93] "Start Filter Pod" pod="test-scheduler-6486fd49fc-zjhcx" node="node1" preFilterState=&{Resource:{MilliCPU:0 Memory:0 EphemeralStorage:0 AllowedPodNumber:0 ScalarResources:map[]}}I0114 09:14:18.8790431 default_binder.go:51] Attempting to bind default/test-scheduler-6486fd49fc-zjhcx to node1I0114 09:14:18.8863601 scheduler.go:609] "Successfully bound pod to node" pod="default/test-scheduler-6486fd49fc-zjhcx" node="node1" evaluatedNodes=3 feasibleNodes=2I0114 09:14:18.8874261 eventhandlers.go:205] delete event for unscheduled pod default/test-scheduler-6486fd49fc-zjhcxI0114 09:14:18.8874751 eventhandlers.go:225] add event for scheduled pod default/test-scheduler-6486fd49fc-zjhcx
可以看到当我们创建完 Pod 后,在我们自定义的调度器中就出现了对应的日志,并且在我们定义的扩展点上面都出现了对应的日志,证明我们的示例成功了,也可以通过查看 Pod 的 schedulerName 来验证:
? kubectl get podsNAMEREADYSTATUSRESTARTSAGEtest-scheduler-6486fd49fc-zjhcx1/1Running035s? kubectl get pod test-scheduler-6486fd49fc-zjhcx -o yaml......restartPolicy: AlwaysschedulerName: sample-schedulersecurityContext: {}serviceAccount: default......
从 Kubernetes v1.17 版本开始,Scheduler Framework 内置的预选和优选函数已经全部插件化,所以要扩展调度器我们应该掌握并理解调度框架这种方式 。
推荐阅读
- C++ 自适应函数符和函数适配器
- 釉里红|故宫陶瓷馆:独立展柜里的瓷器,是不是都价值连城
- |历代的“礼仪玉器”:(3)玉圭
- 你可以信任由编译器优化的代码吗?
- |瓷器观音瓶(观音尊)鉴赏
- 更换玻璃升降器多少钱?玻璃升降器的故障及保养介绍
- 关于包管理器Npm、Yarn和Pnpm的一些总结
- Kubernetes 策略引擎 Kyverno 使用
- APT 如何运用JAVA注解处理器
- |清代矾红彩金鱼纹饰瓷器有什么美好寓意?