kubernetes组件开发-自定义调度器(三)
部署自定义调度器.
部署方式
scheduler-plugins 提供了两种安装调度器插件组件的方法: 作为第二个调度器和作为默认调度器。
他们的优点和缺点如下:
-
第二个调度器
优点是容易部署,很容易安装。
缺点是运行多个调度器的时候,在集群资源短缺时不可避免地会遇到资源冲突,因此不推荐在生产环境中使用。不过这种方式很适合用来当作调度框架插件的练习和开发。
-
默认调度程序(推荐)
优点是您将使用一个统一的调度程序,从而避免了资源冲突引起的调度问题。在生产环境中推荐使用。
缺点是需要在控制平面上操作,另外,安装起来也比较麻烦。
编译打包
进入 scheduler-plugins/cmd/scheduler 目录
执行:go build -ldflags '-s -w' -o bin/kube-scheduler ./main.go
Dockerfile ,打包成 docker 镜像,并推送至远程仓库。
|
|
第二调度器
作为第二个调度器部署到集群。
准备好 rbac 权限配置:
|
|
准备好 scheduler-plugins 用的 configmap :
|
|
准备好 Deployment 配置文件:
|
|
使用 kubectl 将 yaml 配置文件应用到 kubernetes 集群内。
本次实验环境
-
3 个 worker 节点
-
node1 21 个 pod
-
node2 17 个 pod
-
node3 25 个 pod
根据日志可以看出,worker 节点上面的 Pods 个数影响到此次调度,使 Pod 被调度到 node2 节点上。
默认调度器
使用这种模式,我们不仅不会丢失 kubernetes 本身默认的调度能力,还能额外获得我们自己插件的调度能力。1
-
登录到控制平面节点,即 master 节点。
-
备份文件 kube-scheduler.yaml
cp /etc/kubernetes/manifests/kube-scheduler.yaml /etc/kubernetes/kube-scheduler.yaml
-
创建文件 /etc/kubernetes/sched-cc.yaml
|
|
-
如果我们要启用社区 scheduler-plugins 自带的一些插件,需要安装他们提供的 CRD 资源和控制器,根据启用功能的不同,安装不同的 CRD 资源。文件位于 manifests 目录。我们这里没有用到,只用我们自己的调度插件,暂不做此步骤。
-
修改 /etc/kubernetes/manifests/kube-scheduler.yaml
我们需要做以下变更:
-
新增 –config 参数指定 scheduler-config 配置文件
-
(可选) 移除 - –kubeconfig=/etc/kubernetes/scheduler.conf 配置文件,如果不是高可用集群,移除 - –leader-elect=true
-
使用自己的 scheduler-plugin 镜像替换掉默认的镜像
-
挂载 scheduler-config 文件
-
< 新增, > 移除
|
|
-
验证 kube-scheduler pod 有没有正确重启并是否处于 running 状态。
验证 Pod 调度:
|
|
-
As a single scheduler(replacing the vanilla default-scheduler):https://github.com/kubernetes-sigs/scheduler-plugins/blob/release-1.20/doc/install.md#as-a-single-schedulerreplacing-the-vanilla-default-scheduler ↩︎