Code Monkey home page Code Monkey logo

k8s-schedule-plugins-demo's Introduction

k8s自定义调度插件(学习使用)

项目思路与功能

基于k8s-scheduler提供的framework扩展能力,实现简易版调度插件。

  • 自定义均匀节点资源的调度插件(cpu,mem)
  • 自定义打分调度插件()
  • 自定义限制节点的pod数量的调度插件

项目部署

  1. 编译应用程序
docker build -t test-scheduler-plugins:v1 .
docker run --rm -it -v /root/k8s-schedule-practice:/app -w /app -e GOPROXY=https://goproxy.cn -e CGO_ENABLED=0  golang:1.20.4-alpine3.18 go build -o ./test-pod-maxNum-scheduler .
  1. 修改与适配yaml(请依照自己环境适配)
[root@VM-0-16-centos yaml]# cd ..
[root@VM-0-16-centos k8s-schedule-practice]# cd yaml
[root@VM-0-16-centos yaml]# kubectl apply -f .
clusterrole.rbac.authorization.k8s.io/test-scheduling-clusterrole unchanged
serviceaccount/test-scheduling-sa unchanged
clusterrolebinding.rbac.authorization.k8s.io/test-scheduling-clusterrolebinding unchanged
configmap/test-scheduling-config unchanged
deployment.apps/test-pod-maxnum-scheduler unchanged
deployment.apps/testngx unchanged
  1. 查看是否部署成功
[root@VM-0-16-centos yaml]# kubectl get pods -nkube-system | grep test-pod-maxnum-scheduler-d4cdb7794-5jrkm
test-pod-maxnum-scheduler-d4cdb7794-5jrkm   1/1     Running   0          6h9m
  1. 部署测试
[root@VM-0-16-centos yaml]# kubectl get pods
NAME                                   READY   STATUS    RESTARTS   AGE
appdeployer-sample-55d9544448-hp7f5    1/1     Running   0          2d2h
rediscluster-sample-6997f8d4d5-h2nj7   1/1     Running   0          20h
testngx-55bc49f85f-6qbnx               1/1     Running   0          6h9m
testngx-55bc49f85f-cfwhl               0/1     Pending   0          6h7m
testngx-55bc49f85f-hxjl2               0/1     Pending   0          6h7m
testngx-55bc49f85f-jzbqd               0/1     Pending   0          6h7m
testngx-55bc49f85f-mrg2m               0/1     Pending   0          6h7m
testngx-55bc49f85f-spt7p               0/1     Pending   0          6h7m
testngx-55bc49f85f-tngcw               0/1     Pending   0          6h7m
testngx-55bc49f85f-vkbcv               0/1     Pending   0          6h7m
testngx-55bc49f85f-wg2zk               1/1     Running   0          6h7m
testngx-55bc49f85f-wvp9f               0/1     Pending   0          6h7m
usermetrics-5ddb966ffd-gdtfj           1/1     Running   0          6d20h
  1. 查看组件日志
[root@VM-0-16-centos yaml]# kubectl logs -f test-pod-maxnum-scheduler-d4cdb7794-5jrkm -nkube-system
I1202 10:00:32.807396       1 scheduler.go:516] "Attempting to schedule pod" pod="default/testngx-55bc49f85f-hxjl2"
I1202 10:00:32.807413       1 test-pod-maxNum-scheduler.go:35] 当前被prefilter 的POD名称是:testngx-55bc49f85f-hxjl2
W1202 10:00:32.807421       1 listers.go:79] can not retrieve list of objects using index : Index with name namespace does not exist
I1202 10:00:32.807436       1 test-pod-maxNum-scheduler.go:43] POD数量超过可调度数量,不能调度!%!(EXTRA string=testngx-55bc49f85f-hxjl2)
I1202 10:00:32.807509       1 factory.go:381] "Unable to schedule pod; no fit; waiting" pod="default/testngx-55bc49f85f-hxjl2" err="0/1 nodes are available: 1 POD数量超过,不能调度,最多只能调度6."
I1202 10:00:32.807546       1 scheduler.go:414] "Updating pod condition" pod="default/testngx-55bc49f85f-hxjl2" conditionType=PodScheduled conditionStatus=False conditionReason="Unschedulable"
I1202 10:00:32.807570       1 scheduler.go:516] "Attempting to schedule pod" pod="default/testngx-55bc49f85f-spt7p"
I1202 10:00:32.807585       1 test-pod-maxNum-scheduler.go:35] 当前被prefilter 的POD名称是:testngx-55bc49f85f-spt7p
W1202 10:00:32.807594       1 listers.go:79] can not retrieve list of objects using index : Index with name namespace does not exist
I1202 10:00:32.807607       1 test-pod-maxNum-scheduler.go:43] POD数量超过可调度数量,不能调度!%!(EXTRA string=testngx-55bc49f85f-spt7p)
I1202 10:00:32.807669       1 factory.go:381] "Unable to schedule pod; no fit; waiting" pod="default/testngx-55bc49f85f-spt7p" err="0/1 nodes are available: 1 POD数量超过,不能调度,"
I1202 10:00:32.807702       1 scheduler.go:414] "Updating pod condition" pod="default/testngx-55bc49f85f-spt7p" conditionType=PodScheduled conditionStatus=False conditionReason="Unschedulable"
  1. 查看测试pod
[root@VM-0-16-centos yaml]# kubectl describe pods testngx-55bc49f85f-wvp9f
Events:
  Type     Reason            Age   From                       Message
  ----     ------            ----  ----                       -------
  Warning  FailedScheduling  6h9m  test-pod-maxnum-scheduler  0/1 nodes are available: 1 POD数量超过,不能调度,最多只能调度6.

参考:

https://github.com/kubernetes-sigs/scheduler-plugins

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.