亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么對kubernetes scheduler進行二次開發

發布時間:2021-12-20 10:10:39 來源:億速云 閱讀:157 作者:iii 欄目:云計算

這篇文章主要介紹“怎么對kubernetes scheduler進行二次開發”,在日常操作中,相信很多人在怎么對kubernetes scheduler進行二次開發問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”怎么對kubernetes scheduler進行二次開發”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

通過新增Predicates&Priorities Policies來擴展default scheduler

新增Predicate Policy

  • predicate Interface

plugin/pkg/scheduler/algorithm/types.go:31

// FitPredicate is a function that indicates if a pod fits into an existing node.
// The failure information is given by the error.

type FitPredicate func(pod *v1.Pod, meta interface{}, nodeInfo *schedulercache.NodeInfo) (bool, []PredicateFailureReason, error)
  • Implement a predicate func

func PodFitsHostNew(pod *v1.Pod, meta interface{}, nodeInfo *schedulercache.NodeInfo) (bool, []algorithm.PredicateFailureReason, error) {
	if len(pod.Spec.NodeName) == 0 {
		return true, nil, nil
	}
	node := nodeInfo.Node()
	if node == nil {
		return false, nil, fmt.Errorf("node not found")
	}
	if pod.Spec.NodeName == node.Name {
		return true, nil, nil
	}
	return false, []algorithm.PredicateFailureReason{ErrPodNotMatchHostName}, nil
}
  • register the custom predicate policy with a custom name

plugin/pkg/scheduler/algorithmprovider/defaults/defaults.go:47

func init() {
	...
	
	factory.RegisterAlgorithmProvider(factory.DefaultProvider, defaultPredicates(), defaultPriorities())
	// Cluster autoscaler friendly scheduling algorithm.
	factory.RegisterAlgorithmProvider(ClusterAutoscalerProvider, defaultPredicates(),
		copyAndReplace(defaultPriorities(), "LeastRequestedPriority", "MostRequestedPriority"))
	...
	
	factory.RegisterFitPredicate("CustomPredicatePolicy", predicates.PodFitsHostNew)
	
	...
}	
  • rebuild kube-scheduler and restart with flag of --policy-config-file

kube-scheduler xxxx --policy-config-file=/var/lib/kube-scheduler/policy.config

  • the content of --policy-config-file specified file

/var/lib/kube-scheduler/policy.config

{
"kind" : "Policy",
"apiVersion" : "v1",
"predicates" : [
    {"name" : "CustomPredicatePolicy"}
    ],
"priorities" : [
    ]
}

新增Priority Policy

  • Priority Interface

/Users/garnett/workspace/go/src/k8s.io/kubernetes/plugin/pkg/scheduler/algorithm/types.go

// PriorityMapFunction is a function that computes per-node results for a given node.

type PriorityMapFunction func(pod *v1.Pod, meta interface{}, nodeInfo *schedulercache.NodeInfo) (schedulerapi.HostPriority, error)
  • Implement a predicate func

  • register the custom predicate policy with a custom name

  • rebuild kube-scheduler and restart with flag of --policy-config-file

  • the content of --policy-config-file specified file

/var/lib/kube-scheduler/policy.config

{
"kind" : "Policy",
"apiVersion" : "v1",
"predicates" : [
    ],
"priorities" : [
    {"name" : "CumtomPriorityPolicy", "weight" : 1}
    ]
}

新增custom scheduler,pod指定scheduler-name進行調度

  • A custom scheduler can be written in any language and can be as simple or complex as you need.

  • Specify the “scheduleName” in pod.spec

apiVersion: v1
kind: Pod
metadata:
  name: nginx
  labels:
    app: nginx
spec:
  schedulerName: my-scheduler
  containers:
  - name: nginx
    image: nginx:1.10

Here is a very simple example of a custom scheduler written in Bash that assigns a node randomly. Note that you need to run this along with kubectl proxy for it to work.

kubectl proxy --port=8001

#!/bin/bash
SERVER='localhost:8001'
while true;
do
    for PODNAME in $(kubectl --server $SERVER get pods -o json | jq '.items[] | select(.spec.schedulerName == "my-scheduler") | select(.spec.nodeName == null) | .metadata.name' | tr -d '"')
;
    do
        NODES=($(kubectl --server $SERVER get nodes -o json | jq '.items[].metadata.name' | tr -d '"'))
        NUMNODES=${#NODES[@]}
        CHOSEN=${NODES[$[ $RANDOM % $NUMNODES ]]}
        curl --header "Content-Type:application/json" --request POST --data '{"apiVersion":"v1", "kind": "Binding", "metadata": {"name": "'$PODNAME'"}, "target": {"apiVersion": "v1", "kind"
: "Node", "name": "'$CHOSEN'"}}' http://$SERVER/api/v1/namespaces/default/pods/$PODNAME/binding/
        echo "Assigned $PODNAME to $CHOSEN"
    done
    sleep 1
done

到此,關于“怎么對kubernetes scheduler進行二次開發”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

积石山| 武隆县| 辽中县| 丰城市| 宝清县| 车险| 长子县| 庄河市| 南安市| 武安市| 连南| 项城市| 山西省| 剑川县| 遂宁市| 彭阳县| 泊头市| 商水县| 榕江县| 阿拉善盟| 松滋市| 大港区| 高安市| 安宁市| 甘德县| 博客| 大厂| 昂仁县| 关岭| 泸水县| 定边县| 长宁县| 威远县| 德阳市| 柘城县| 霍山县| 新营市| 田林县| 海盐县| 子长县| 分宜县|