当前位置: 首页 > news >正文

保定网站公司那家好房地产企业网站开发

保定网站公司那家好,房地产企业网站开发,公司网站建设汇报,成都建筑设计公司排名前十调度器介绍 scheduler 是k8s master的一部分#xff0c;作为插件存在于k8s生态体系。 自定义调度器方式 添加功能重新编译实现自己的调度器#xff08;multi-scheduler#xff09;scheduler调用扩展程序实现最终调度#xff08;Kubernetes scheduler extender#xff09…调度器介绍 scheduler 是k8s master的一部分作为插件存在于k8s生态体系。 自定义调度器方式 添加功能重新编译实现自己的调度器multi-schedulerscheduler调用扩展程序实现最终调度Kubernetes scheduler extender 添加调度功能 k8s中的调度算法介绍 预选 优选 实现自己的调度器(配置多个scheduler) scheduler以插件形式存在集群中可以存在多个scheduler可以显式指定scheduler 配置pod使用自己的调度器 下面pod显式指定使用my-scheduler调度器 apiVersion: v1 kind: Pod metadata:name: nginxlabels:app: nginx spec:schedulerName: my-schedulercontainers:- name: nginximage: nginx:1.10 官方给出的shell版本scheduler示例 #!/bin/bash SERVERlocalhost:8001 while true; dofor PODNAME in $(kubectl --server $SERVER get pods -o json | jq .items[] | select(.spec.schedulerName my-scheduler) | select(.spec.nodeName null) | .metadata.name | tr -d ) ;doNODES($(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 $CHOSENdonesleep 1 done 影响pod调度的因素 https://kubernetes.io/docs/concepts/configuration/pod-priority-preemption/ 预选 过滤不符合运行条件的node 优选 对node进行打分 抢占 Kubernetes 1.8 及其以后的版本中可以指定 Pod 的优先级。优先级表明了一个 Pod 相对于其它 Pod 的重要性。 当 Pod 无法被调度时scheduler 会尝试抢占驱逐低优先级的 Pod使得这些挂起的 pod 可以被调度。 在 Kubernetes 未来的发布版本中优先级也会影响节点上资源回收的排序。 1.9支持pdb优先支持PDB策略但在无法抢占其他pod的情况下配置pdb策略的pod依旧会被抢占 Kubernetes scheduler extender scheduler策略配置 {kind : Policy,apiVersion : v1,predicates : [{name : PodFitsHostPorts},{name : PodFitsResources},{name : NoDiskConflict},{name : MatchNodeSelector},{name : HostName}],priorities : [{name : LeastRequestedPriority, weight : 1},{name : BalancedResourceAllocation, weight : 1},{name : ServiceSpreadingPriority, weight : 1},{name : EqualPriority, weight : 1}],extenders : [{urlPrefix: http://localhost/scheduler,apiVersion: v1beta1,filterVerb: predicates/always_true,bindVerb: ,prioritizeVerb: priorities/zero_score,weight: 1,enableHttps: false,nodeCacheCapable: falsehttpTimeout: 10000000000}],hardPodAffinitySymmetricWeight : 10} 包含extender的配置 // ExtenderConfig保存用于与扩展器通信的参数。如果动词是未指定/空的即认为该扩展器选择不提供该扩展。 type ExtenderConfig struct {// 访问该extender的url前缀URLPrefix string json:urlPrefix//过滤器调用的动词如果不支持则为空。当向扩展程序发出过滤器调用时此谓词将附加到URLPrefixFilterVerb string json:filterVerb,omitempty//prioritize调用的动词如果不支持则为空。当向扩展程序发出优先级调用时此谓词被附加到URLPrefix。PrioritizeVerb string json:prioritizeVerb,omitempty//优先级调用生成的节点分数的数字乘数权重应该是一个正整数Weight int json:weight,omitempty//绑定调用的动词如果不支持则为空。在向扩展器发出绑定调用时此谓词会附加到URLPrefix。//如果此方法由扩展器实现则将pod绑定动作将由扩展器返回给apiserver。只有一个扩展可以实现这个功能BindVerb string// EnableHTTPS指定是否应使用https与扩展器进行通信EnableHTTPS bool json:enableHttps,omitempty// TLSConfig指定传输层安全配置TLSConfig *restclient.TLSClientConfig json:tlsConfig,omitempty// HTTPTimeout指定对扩展器的调用的超时持续时间过滤器超时无法调度pod。Prioritize超时被忽略//k8s或其他扩展器优先级被用来选择节点HTTPTimeout time.Duration json:httpTimeout,omitempty//NodeCacheCapable指定扩展器能够缓存节点信息//所以调度器应该只发送关于合格节点的最少信息//假定扩展器已经缓存了群集中所有节点的完整详细信息NodeCacheCapable bool json:nodeCacheCapable,omitempty// ManagedResources是由扩展器管理的扩展资源列表.// - 如果pod请求此列表中的至少一个扩展资源则将在FilterPrioritize和Bind如果扩展程序是活页夹//阶段将一个窗格发送到扩展程序。如果空或未指定所有pod将被发送到这个扩展器。// 如果pod请求此列表中的至少一个扩展资源则将在FilterPrioritize和Bind如果扩展程序是活页夹阶段将一个pod发送到扩展程序。如果空或未指定所有pod将被发送到这个扩展器。ManagedResources []ExtenderManagedResource json:managedResources,omitempty } 通过k8s predicates和pod过滤的节点集传递给扩展器上的FilterVerb端点的参数。 通过k8s predicates和扩展predicates以及pod过滤的节点集传递给扩展器上的PrioritizeVerb端点的参数。 // ExtenderArgs代表被扩展器用于为pod filter/prioritize node所需要的参数 type ExtenderArgs struct {// 被调度的podPod api.Pod json:pod// 可被调度的候选列表Nodes api.NodeList json:nodes } filter被调用时返回节点列表(schedulerapi.ExtenderFilterResult) prioritize返回节点的优先级(schedulerapi.HostPriorityList). filter可以根据对应动作对节点列表进行剪裁prioritize返回的分数将添加到k8s最终分数通过其优先函数进行计算用于最终宿主选择。 “bind”调用用于将pod绑定到节点的代理绑定到扩展器。它可以选择由扩展器实现。当它被实现时 它是向apiserver发出绑定调用的扩展器的响应。 Pod名称名称空间UID和节点名称被传递给扩展器 ExtenderBindingArgs表示将pod绑定到节点的扩展器的参数 type ExtenderBindingArgs struct {// 将被绑定的podPodName string// 将被绑定的namespacePodNamespace string// poduidPodUID types.UID// 最终调度到的podNode string } 实现 package mainimport (bytesencoding/jsoniok8s.io/api/core/v1metav1 k8s.io/apimachinery/pkg/apis/meta/v1k8s.io/client-go/kubernetesk8s.io/client-go/tools/clientcmdschedulerapi k8s.io/kubernetes/pkg/scheduler/api/v1lognet/http )var (kubeconfig string xxx )func main() {http.HandleFunc(/, func(w http.ResponseWriter, _ *http.Request) {w.Write([]byte(hellowrold))})http.HandleFunc(/predicates/test, testPredicateHandler)http.HandleFunc(/prioritize/test, testPrioritizeHandler)http.HandleFunc(/bind/test, BindHandler)http.ListenAndServe(:8880, nil) }func testPredicateHandler(w http.ResponseWriter, r *http.Request) {var buf bytes.Bufferbody : io.TeeReader(r.Body, buf)log.Println(buf.String())var extenderArgs schedulerapi.ExtenderArgsvar extenderFilterResult *schedulerapi.ExtenderFilterResultif err : json.NewDecoder(body).Decode(extenderArgs); err ! nil {extenderFilterResult schedulerapi.ExtenderFilterResult{Nodes: nil,FailedNodes: nil,Error: err.Error(),}} else {extenderFilterResult predicateFunc(extenderArgs)}if resultBody, err : json.Marshal(extenderFilterResult); err ! nil {panic(err)} else {w.Header().Set(Content-Type, application/json)w.WriteHeader(http.StatusOK)w.Write(resultBody)}}func testPrioritizeHandler(w http.ResponseWriter, r *http.Request) {var buf bytes.Bufferbody : io.TeeReader(r.Body, buf)var extenderArgs schedulerapi.ExtenderArgsvar hostPriorityList *schedulerapi.HostPriorityListif err : json.NewDecoder(body).Decode(extenderArgs); err ! nil {panic(err)}if list, err : prioritizeFunc(extenderArgs); err ! nil {panic(err)} else {hostPriorityList list}if resultBody, err : json.Marshal(hostPriorityList); err ! nil {panic(err)} else {w.Header().Set(Content-Type, application/json)w.WriteHeader(http.StatusOK)w.Write(resultBody)} }func predicateFunc(args schedulerapi.ExtenderArgs) *schedulerapi.ExtenderFilterResult {pod : args.PodcanSchedule : make([]v1.Node, 0, len(args.Nodes.Items))canNotSchedule : make(map[string]string)for _, node : range args.Nodes.Items {result, err : func(pod v1.Pod, node v1.Node) (bool, error) {return true, nil}(pod, node)if err ! nil {canNotSchedule[node.Name] err.Error()} else {if result {canSchedule append(canSchedule, node)}}}result : schedulerapi.ExtenderFilterResult{Nodes: v1.NodeList{Items: canSchedule,},FailedNodes: canNotSchedule,Error: ,}return result }func prioritizeFunc(args schedulerapi.ExtenderArgs) (*schedulerapi.HostPriorityList, error) {nodes : args.Nodes.Itemsvar priorityList schedulerapi.HostPriorityListpriorityList make([]schedulerapi.HostPriority, len(nodes))for i, node : range nodes {priorityList[i] schedulerapi.HostPriority{Host: node.Name,Score: 0,}}return priorityList, nil }func BindHandler(w http.ResponseWriter, r *http.Request) {var buf bytes.Bufferbody : io.TeeReader(r.Body, buf)var extenderBindingArgs schedulerapi.ExtenderBindingArgsif err : json.NewDecoder(body).Decode(extenderBindingArgs); err ! nil {panic(err)}b : v1.Binding{ObjectMeta: metav1.ObjectMeta{Namespace: extenderBindingArgs.PodNamespace, Name: extenderBindingArgs.PodName, UID: extenderBindingArgs.PodUID},Target: v1.ObjectReference{Kind: Node,Name: extenderBindingArgs.Node,},}bind(b)}func bind(b *v1.Binding) error {config, err : clientcmd.BuildConfigFromFlags(, kubeconfig)if err ! nil {panic(err)}clientset, err : kubernetes.NewForConfig(config)if err ! nil {panic(err)}return clientset.CoreV1().Pods(b.Namespace).Bind(b) } 参考https://github.com/kubernetes/community/blob/master/contributors/devel/scheduler.md https://github.com/kubernetes/community/blob/master/contributors/design-proposals/scheduling/scheduler_extender.md https://kubernetes.io/docs/concepts/configuration/pod-priority-preemption/ https://github.com/kubernetes/kubernetes-docs-cn/blob/master/docs/concepts/overview/extending.md 欢迎加入QQ群k8s开发与实践 任何程序错误以及技术疑问或需要解答的请添加
http://www.pierceye.com/news/372479/

相关文章:

  • 南宁网站建设推广教育类网站框架
  • 定制网站建设服务公司摄影设计师招聘
  • 地图 添加到网站观点网站
  • 给分管领导网站建设情况汇报怎么写企业网站的发展历史
  • 佛山营销网站建设费用app制作器下载软件
  • 如何将优酷视频上传到自己网站万能网
  • 域名销售网站wordpress 数据库配置文件
  • 广州营销型网站建设怎么样做网站必须要认证吗
  • 网站开发主要内容免费商城平台
  • 青岛建站方案海兴县网站建设公司
  • 网站文案框架兰州网页制作公司网站
  • 专业网站有哪些平台wordpress那个版本
  • 网站建设按钮详情页设计图
  • 杭州公司注册代理中介深圳关键词优化软件
  • 乐清网站制作公司电话免费做初中试卷的网站
  • 注册一个网站的流程反向代理服务器做wordpress外网
  • 沁阳网站建设tomcat建网站
  • 品牌网站建设公司推荐网站建设公司3lue
  • 装修公司网站模版徐州品牌网站建设
  • 医疗网站建设计划书一级消防工程师考试科目
  • 信誉好的网站建设公司网站关停公告怎么做
  • 画图在什么网站上做兼职广告词
  • 昆明购物网站建设企业网络设计方案预算
  • 浙江省建设工程质监站网站什么是营销型网站建设
  • 做网站需要云数据库吗企业做网页还是网站
  • wordpress手机网站插件wordpress编辑器添加按钮弹出窗口
  • 网站建设验收单格式建筑工具网站
  • 比较简洁大方的网站伊春住房和城乡建设网站
  • 电商网站开发prd免费个人网页模板
  • 西安 网站开发 招聘响应式网站代理