kubernetes默认情况下创建pod调度是由kubernetes scheduler来管理的,但显然有时候还是需要人为介入。根据目前的kubernetes版本来说,有两种自定义资源调度的方式:Node和Pod。

实例label配置:
10-19-53-145 node=node01
10-19-152-121 node=node02
10-19-25-188 node=node03

一.Node资源调度
Node资源调度又分为两种:1.通过NodeSelector选择label指定到相应的node节点。2.Node的亲和性(nodeAffinity)
1.NodeSelector的原理是通过在node节点创建对应的label,然后直接创建分配pod。通过命令赋予node节点lable的key和value,然后kubectl get nodes --show-labels查看具体效果。

  1. kubectl label node nodename key=value

使用创建了goweb-4.yaml文件使用NodeSelector选择到指定的node01。

  1. apiVersion: apps/v1
  2. kind: Deployment
  3. metadata:
  4. name: goweb-4
  5. spec:
  6. selector:
  7. matchLabels:
  8. app: goweb-4
  9. replicas: 1
  10. template:
  11. metadata:
  12. labels:
  13. app: goweb-4
  14. spec:
  15. containers:
  16. - image: harbor.yanjiyou.net/yjy/goweb:v1.1
  17. name: goweb-4
  18. ports:
  19. - containerPort: 8000
  20. nodeSelector:
  21. node: node01

NodeSelector只是最简单的调度使用,显然还不能完全满足额外的需求。
2.Node的亲和性(affinity)可以更加灵活选择的node调度,其中涉及到两个容易混淆的参数requiredDuringSchedulingIgnoredDuringExecution和preferredDuringSchedulingIgnoredDuringExecution,最为简单的理解就是必要硬件条件,非必要软性条件,只要在满足硬性条件下才能执行软性条件。
使用创建了goweb-5.yaml文件选择不在node02调度,尽量在node03上进行资源调度。

  1. apiVersion: apps/v1
  2. kind: Deployment
  3. metadata:
  4. name: goweb-5
  5. spec:
  6. selector:
  7. matchLabels:
  8. app: goweb-5
  9. replicas: 2
  10. template:
  11. metadata:
  12. labels:
  13. app: goweb-5
  14. spec:
  15. containers:
  16. - image: harbor.yanjiyou.net/yjy/goweb:v1.1
  17. name: goweb-5
  18. ports:
  19. - containerPort: 8000
  20. affinity:
  21. nodeAffinity:
  22. requiredDuringSchedulingIgnoredDuringExecution:
  23. nodeSelectorTerms:
  24. - matchExpressions:
  25. - key: node
  26. operator: NotIn
  27. values:
  28. - node02
  29. preferredDuringSchedulingIgnoredDuringExecution:
  30. - weight: 1
  31. preference:
  32. matchExpressions:
  33. - key: node
  34. operator: In
  35. values:
  36. - node03


①key和values需要提前指定
②operator有In和NotIn参数,指定和非指定到某个节点

二.Pod资源调度
和node节点的资源调度一样pod资源调度也是亲和性(podAffinity)和反亲和性(podAntiAffinity)的管理方式,只是管理的范围不同,一个是面向node资源管理,一个是面向pod资源管理。
使用创建了goweb-6.yaml文件选择和goweb-4容器在同一个节点上。

  1. apiVersion: apps/v1
  2. kind: Deployment
  3. metadata:
  4. name: goweb-6
  5. spec:
  6. selector:
  7. matchLabels:
  8. app: goweb-6
  9. replicas: 2
  10. template:
  11. metadata:
  12. labels:
  13. app: goweb-6
  14. spec:
  15. containers:
  16. - image: harbor.yanjiyou.net/yjy/goweb:v1.1
  17. name: goweb-6
  18. ports:
  19. - containerPort: 8000
  20. affinity:
  21. podAffinity:
  22. requiredDuringSchedulingIgnoredDuringExecution:
  23. - labelSelector:
  24. matchExpressions:
  25. - key: app
  26. operator: In
  27. values:
  28. - goweb-4
  29. topologyKey: kubernetes.io/hostname

topologyKey可以设置成如下几种类型
kubernetes.io/hostname#同个Node
failure-domain.beta.kubernetes.io/zone#同个Zone
failure-domain.beta.kubernetes.io/region #同个Region

补充:
1.使用亲和性后可以同理使用反亲和性,结果取相反。
2.Taints和tolerations特殊用法:如果一个节点被标记为taints,除非pod配置了tolerations,否则是不会被允许调度。在生产环境如果master也作为work节点的话,可以把master标记Taints,毕竟master运行kubernetes系统组件,如果运行pod容易把资源耗尽,造成master节点崩溃,当然后期如果要添加额外的系统组件,这时就可以通过给对应的pod配置toleration。

  1. kubectl taint nodes nodename key=value:NoSchedule

value参数可以配置多个值
NoSchedule:不能调度,当之前调度的不管。
PreferNoSchedule:尽量不调度。
NoExecute:不能调度,而且之前已经调度上去的也会自动迁移走。

  1. apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: goweb-7
    spec:
      selector:
        matchLabels:
          app: goweb-7
      replicas: 2
      template:
        metadata:
          labels:
            app: goweb-7
        spec:
          containers:
          - image: harbor.yanjiyou.net/yjy/goweb:v1.1
            name: goweb-7
            ports:
            - containerPort: 8000
          tolerations:
          - key: "key"
            operator: "Equal"
            value: "value"
            effect: "NoSchedule

kubernetes资源调度的更多相关文章

  1. kubernetes资源调度之LimitRange

    系列目录 LimitRange从字面意义上来看就是对范围进行限制,实际上是对cpu和内存资源使用范围的限制 前面我们讲到过资源配额,资源配额是对整个名称空间的资源的总限制,是从整体上来限制的,而Lim ...

  2. 基于jenkins,tekton等工具打造kubernetes devops平台

    本贴为目录贴,将不断更新 目录 1.Docker在centos下安装以及常见错误解决 2.使用kubernetes 官网工具kubeadm部署kubernetes(使用阿里云镜像) 3.无法访问gcr ...

  3. 【有容云干货-容器系列】Kubernetes调度核心解密:从Google Borg说起

    在之前“容器生态圈脑图大放送”文章中我们根据容器生态圈脑图,从下至上从左至右,依次介绍了容器生态圈中8个组件,其中也提到Kubernetes ,是一个以 Google Borg 为原型的开源项目.可实 ...

  4. kubernetes 基础知识

    1. kubernetes 包含几个组件 Kubernetes是什么:针对容器编排的一种分布式架构,是自动化容器操作的开源平台. 服务发现.内建负载均衡.强大的故障发现和自我修复机制.服务滚动升级和在 ...

  5. 1-kubeadm部署1.18.0单master集群

    1.有了docker,为什么还用kubernetes? 访问工具层 帮助用户更高效的完成任务,包括web控制台.RESTfulAPI.CI/CD.监控管理.日志管理 PaaS服务层 为开发.测试和运维 ...

  6. Kubernetes学习之路(二十二)之Pod资源调度

    目录 Pod资源调度 1.常用的预选策略 2.优选函数 3.节点亲和调度 3.1.节点硬亲和性 3.2.节点软亲和性 4.Pod资源亲和调度 4.1.Pod硬亲和度 4.2.Pod软亲和度 4.3.P ...

  7. Kubernetes全栈架构师(资源调度上)--学习笔记

    目录 Replication Controller和ReplicaSet 无状态服务Deployment概念 Deployment的创建 Deployment的更新 Deployment的回滚 Dep ...

  8. Kubernetes全栈架构师(资源调度下)--学习笔记

    目录 StatefulSet扩容缩容 StatefulSet更新策略 StatefulSet灰度发布 StatefulSet级联删除和非级联删除 守护进程服务DaemonSet DaemonSet的使 ...

  9. Kubernetes中的资源调度与资源管理

    一.scheduling:把pod放到node上 1.最小调度单元:pod 2.1.8的版本后,最大支持5000个node 3.scheduling由两个部分组成: 3.1 Predicates:过滤 ...

随机推荐

  1. .net 后台给html控件赋值

    接上篇,上篇中每个专业的名称是写死的,如何动态获取数据库中的值,同时对其他代码产生最小影响呢? 前台代码 <div " id="div1" runat=" ...

  2. vue.js 常用指令用法

    v-if v-if指令可以完全根据表达式的值在DOM中生成或移除一个元素. 如果v-if表达式赋值为false,那么对应的元素就会从DOM中移除: 否则,对应元素的一个克隆将被重新插入DOM中,代码如 ...

  3. Luogu P4082 [USACO17DEC]Push a Box 点双连通分量/圆方树

    (貌似有圆方树的做法,我写的是点双) 显然这道题就是直接搜索.定义状态为f[i][j][0~4]表示箱子在(i,j),人在某个方向推.然后问题就是怎么转向.我们发现如果要转向,必须是人走过一条不包括( ...

  4. hash 跟B+tree的区别

    1.hash只支持in跟=,不支持范围查询,时间复杂度:O(1) 2.B+tree支持范围查询,时间复杂度:O(log n) 3. B+tree 的优点:1.磁盘读取代价更低              ...

  5. yii 查询垃圾分类接口

    public function actionGarbage() { // $param = \Yii::$app->request->post('rubbish', ''); // 接收j ...

  6. ES6-12.Symbol

    Symbol是ES6新增的原始类型数据,引入的初衷是为了对象可以有永不重复的属性名. 所以属性名可以是字符串外,还可以是Symbol值: const a = Symbol("a") ...

  7. 013_使用 user.txt 文件中的人员名单,在计算机中自动创建对应的账户并配置初始密码

    for i in `cat user.txt`do    useradd $i    echo "123456" | passwd --stdin $idone

  8. SessionState,默認mode應該是"InProc"

    在ASP.NET的sessionState的三種屬性 http://www.dotblogs.com.tw/boei/archive/2010/07/06/16414.aspx需要在另外的config ...

  9. SQL Server report server使用

    1.配置share point網站來改動報表      打開Reporting Servers Configuration Manager,裏面有Web Service URL(http://loca ...

  10. [Luogu] 开关

    https://www.luogu.org/problemnew/show/P3870 线段树区间翻转 + 区间查询 #include <iostream> #include <cs ...