本文主要是介绍基于scheduler framework的Kubernetes调度插件开发方法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
基于scheduler framework的Kubernetes调度插件开发方法
kubernetes源码版本:1.18.3
两种调度插件
调度插件有两种,一种是内置插件,也就是intree,一种是外置插件,也就是outtree
二者的区别:
内置的插件,都在kubernetes/pkg/scheduler/framework/plugins/目录下,并需要在NewInTreeRegistry()方法中注册;
外置的插件而外置的插件是怎么传递进来的呢?是在kube-scheduler的main方法中传进来的。
内置插件
开发步骤:
1.在/pkg/scheduler/framework/plugins目录下建立自己的插件文件夹,参考源码自带插件编写chajian.go,实现扩展点对应的接口
2.修改/pkg/scheduler/framework/plugins/registry.go 在NewInTreeRegistry增加插件注册
3.修改/pkg/scheduler/framework/plugins/legacy_registry.go 增加有关枚举和registerPredicateConfigProducer
4.修改/pkg/scheduler/algorithmprovider/registry.go,在相应的pluginSet里增加你自己实现的扩展
5.编译 make all WHAT=cmd/kube-scheduler,在./_output/bin目录中可以看到编译完成的kube-scheduler可执行文件
6.构建kube-scheduler镜像,直接使用原来的镜像作为基础镜像,覆盖/usr/local/bin里的kube-scheduler文件即可,
7.替换kube-scheduler镜像并进行测试
外置插件
开发步骤:
1.实现插件扩展点接口以及插件生成器New方法;
2.修改main方法,在NewSchedulerCommand()中传入你的插件;
3.编译
4.构建镜像
DockerFile:
FROM alpine:3.12COPY 可执行文件 /usr/local/binWORKDIR /usr/local/bin
CMD ["kube-scheduler"]
5.替换k8s scheduler镜像,并把把配置文件挂载,kube-scheduler需要传入参数:--config=/etc/kubernetes/manifests/scheduler-config.yaml
scheduler-config.yaml如下:
apiVersion: kubescheduler.confg.k8s.io/v1beta1
kind: KubeSchedulerConfiguration
leaderElection:leaderElect: true
clientConnecttion:kubeconfig: "你的kubeconfig文件位置"
profiles:
- schedulerName: default-schedulerplugins:filter:enabled:- name: 你的插件名称
#plugins部分按需修改
参考 https://github.com/kubernetes-sigs/scheduler-plugins
这篇关于基于scheduler framework的Kubernetes调度插件开发方法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!