• k8s集群调度方案


      Scheduler是k8s集群的调度器,主要的任务是把定义好的pod分配到集群节点上

    有以下特征:

    1  公平   保证每一个节点都能被合理分配资源或者能被分配资源

    2  资源高效利用   集群所有资源最大化被利用

    3  效率  调度的性能好,能够对大批量pod进行调度

    4  灵活  允许用户根据自己的需求控制调取的逻辑

    工作原理:

    Scheduler是单独运行的程序,启动之后会一直连接API Server,获取值:PodSpec.NodeName为空的pod,也就是对没有标记namespace的pod都会创建一个binding,表明该pod放到哪个节点上。

    首先过滤掉不满足条件的节点,这个过程称为:predicate

    再通过节点按照优先级排序,这个称为:priority

    最后选择优先级最好的节点

    若这个期间有一步出错,直接返回错误。若在predicate过程中没有合适的节点,pod会一直处于pending状态,不断重试调度,直到有节点满足为止。如果有多个节点满足条件,就继续priority过程,选择最优node节点

    调度过程中,会有一些因素影响调度

    1.资源限制

     2.节点选择器标签

    给node添加标签

    [root@k8s-master gisserver]# kubectl label node k8s-node1 node1=iserver
    node/k8s-node1 labeled
    [root@k8s-master gisserver]# kubectl  get node --show-labels
    NAME         STATUS   ROLES    AGE   VERSION   LABELS
    k8s-master   Ready    master   22d   v1.17.3   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-master,kubernetes.io/os=linux,node-role.kubernetes.io/master=
    k8s-node1    Ready    <none>   22d   v1.17.3   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-node1,kubernetes.io/os=linux,node1=iserver
    k8s-node2    Ready    <none>   22d   v1.17.3   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-node2,kubernetes.io/os=linux,node2=gisserver

    查看一个指定node标签

    [root@k8s-master gisserver]# kubectl get node -l "node1=iserver"
    NAME        STATUS   ROLES    AGE   VERSION
    k8s-node1   Ready    <none>   22d   v1.17.3

    删除一个node的标签

    [root@k8s-master gisserver]# kubectl label node k8s-node1 node1-
    node/k8s-node1 labeled
    [root@k8s-master gisserver]# kubectl  get node --show-labels
    NAME         STATUS   ROLES    AGE   VERSION   LABELS
    k8s-master   Ready    master   22d   v1.17.3   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-master,kubernetes.io/os=linux,node-role.kubernetes.io/master=
    k8s-node1    Ready    <none>   22d   v1.17.3   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-node1,kubernetes.io/os=linux
    k8s-node2    Ready    <none>   22d   v1.17.3   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-node2,kubernetes.io/os=linux,node2=gisserver

    3. 节点的亲和性

     4.污点和污点容忍

    查看污点

    [root@k8s-master gisserver]# kubectl describe node k8s-node1 |grep Taints
    Taints:             <none>
    [root@k8s-master gisserver]# kubectl describe node k8s-node2 |grep Taints
    Taints:             <none>
    [root@k8s-master gisserver]# kubectl describe node k8s-master |grep Taints
    Taints:             node-role.kubernetes.io/master:NoSchedule

     添加节点污点:

    [root@k8s-master gisserver]# kubectl taint node k8s-node1 node1=yes:NoSchedule
    node/k8s-node1 tainted
    [root@k8s-master gisserver]# kubectl describe node k8s-node1 |grep Taints
    Taints:             node1=yes:NoSchedule

    删除污点:

    [root@k8s-master gisserver]# kubectl taint node k8s-node1 node1=yes:NoSchedule-
    node/k8s-node1 untainted
    [root@k8s-master gisserver]# kubectl describe node k8s-node1 |grep Taints
    Taints:             <none>

    污点容忍与软亲和性类似

    嗨~如果有帮助,请帮忙点个赞吧,谢谢 -致敬每一个正在努力的人
  • 相关阅读:
    基本计算器 II
    查看JVM使用的什么垃圾收集器
    java nio 例子
    获取jvm加载的类
    对上传的二进制视频文件进行第一帧截取
    conda与pip
    微信聊天记录导出与分析
    k8s creationTimestamp 参数
    adb logcat使用及Debug技巧
    聊聊HDR
  • 原文地址:https://www.cnblogs.com/dongweizhen/p/13822121.html
Copyright © 2020-2023  润新知