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查看具体效果。

kubectl label node nodename key=value

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

apiVersion: apps/v1
kind: Deployment
metadata:
name: goweb-4
spec:
selector:
matchLabels:
app: goweb-4
replicas: 1
template:
metadata:
labels:
app: goweb-4
spec:
containers:
- image: harbor.yanjiyou.net/yjy/goweb:v1.1
name: goweb-4
ports:
- containerPort: 8000
nodeSelector:
node: node01

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

apiVersion: apps/v1
kind: Deployment
metadata:
name: goweb-5
spec:
selector:
matchLabels:
app: goweb-5
replicas: 2
template:
metadata:
labels:
app: goweb-5
spec:
containers:
- image: harbor.yanjiyou.net/yjy/goweb:v1.1
name: goweb-5
ports:
- containerPort: 8000
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: node
operator: NotIn
values:
- node02
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 1
preference:
matchExpressions:
- key: node
operator: In
values:
- node03


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

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

apiVersion: apps/v1
kind: Deployment
metadata:
name: goweb-6
spec:
selector:
matchLabels:
app: goweb-6
replicas: 2
template:
metadata:
labels:
app: goweb-6
spec:
containers:
- image: harbor.yanjiyou.net/yjy/goweb:v1.1
name: goweb-6
ports:
- containerPort: 8000
affinity:
podAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: app
operator: In
values:
- goweb-4
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。

kubectl taint nodes nodename key=value:NoSchedule

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

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. 模块讲解---os模块,sys模块,json和pickle模块,logging模块

    目录 模块的用法 os模块 常用的功能 sys模块 常用的功能 json和pickle模块 4. logging模块 模块的用法 通过 import 或者from......import...... ...

  2. SIGAI深度学习第六集 受限玻尔兹曼机

    讲授玻尔兹曼分布.玻尔兹曼机的网络结构.实际应用.训练算法.深度玻尔兹曼机等.受限玻尔兹曼机(RBM)是一种概率型的神经网络.和其他神经网络的区别:神经网络的输出是确定的,而RBM的神经元的输出值是不 ...

  3. 011_Linux驱动之_s3c2410_gpio_getpin

    1. 功能:获取引脚状态 2. 函数原型: unsigned int s3c2410_gpio_getpin(unsigned int pin) { void __iomem *base = S3C2 ...

  4. Dynamic Data linq to SQL Web Application

    微软提供了一个数据驱动网站模板,可以自动生成CRUD页面,使用过程中碰到些问题 1.首先是如何应用,只需要创建个context并且在Global.asax里面加入下面这一句就可以了 DefaultMo ...

  5. ckeditor粘贴word图片自动上传功能

    由于工作需要必须将word文档内容粘贴到编辑器中使用 但发现word中的图片粘贴后变成了file:///xxxx.jpg这种内容,如果上传到服务器后其他人也访问不了,网上找了很多编辑器发现没有一个能直 ...

  6. IDEA工具的安装、破解与配置

    一.什么是IDEA? IDEA 全称 IntelliJ IDEA,是java编程语言开发的集成环境,是目前最好用的java集成开发工具.他最突出的功能是调试(Debug),可以对Java代码,Java ...

  7. [Luogu] 家族

    https://www.luogu.org/problemnew/show/1767 字符串的读入有点麻烦 #include <cstdio> #include <cstring&g ...

  8. Rand工具类

    这篇文章已经废弃. 实际开发中,这个工具类用到得非常少. RandN是主要类,用于生成指定位数的随机字符串,具体功能在这个类中实现 Rand8是修饰了RandN中每个对外方法的修饰类,用与生成8位的随 ...

  9. 基于nodejs将mongodb的数据实时同步到elasticsearch

    一.前言 因公司需要选用elasticsearch做全文检索,持久化存储选用的是mongodb,但是希望mongodb里面的数据发生改变可以实时同步到elasticsearch上,一开始主要使用ela ...

  10. flask中用类的方式构造视图函数

    from flask import Flask from flask.views import MethodView app = Flask(__name__) class IndexView(Met ...