k8s调度约束

List-Watch

Kubernetes 是通过 List-Watch的机制进行每个组件的协作,保持数据同步的,每个组件之间的设计实现了解耦。

List-Watch机制

工作机制:用户通过 kubectl请求给 APIServer 来建立一个 Pod。APIServer会将Pod相关元信息存入 etcd 中,待写入操作完成,APIServer 即会返回确认信息至客户端。当etcd 接受创建 Pod 信息后,会发送ReplicaSet事件给 APIServer。由于 Controller Manager 会监听(Watch,通过https的6443端口)APIServer 中的事件。此时 APIServer 接受到了 Create 事件,就会发送给 Controller Manager。Controller Manager 在接到 Create 事件以后,调用其中的 Replication Controller 来保证 Node 上面需要创建的副本数量。在 Controller Manager 创建 Pod 副本以后,APIServer 会在 etcd 中记录这个 Pod 的详细信息。之后etcd 会将创建 Pod 的信息通过事件发送给 APIServer。Scheduler 在监听(Watch)APIServer,它会将待调度的 Pod 按照调度算法和策略绑定到集群中 Node 上。Scheduler 调度完毕以后会更新更详细 Pod 的信息,并将上面的 Pod 信息更新至 API Server,由 APIServer 更新至 etcd 中,保存起来。etcd 将更新成功的事件发送给 APIServer,APIServer 也开始反映此 Pod 对象的调度结果。kubelet 是在 Node 上面运行的进程,它也通过 List-Watch 的方式监听(Watch,通过https的6443端口)APIServer 发送的 Pod 更新的事件。kubelet 会尝试在当前节点上调用 Docker 启动容器,并将 Pod 以及容器的结果状态回送至 APIServer。APIServer 将 Pod 状态信息存入 etcd 中。在 etcd 确认写入操作成功完成后,APIServer将确认信息发送至相关的 kubelet,事件将通过它被接受。

 命令

指定调度节点

apiVersion: apps/v1  
kind: Deployment  
metadata:name: myapp
spec:replicas: 3selector:matchLabels:app: myapptemplate:metadata:labels:app: myappspec:nodeName: node01containers:- name: myappimage: soscscs/myapp:v1ports:- containerPort: 80
查看pod
kubectl get pods -o wide查看详细事件(发现未经过 scheduler 调度分配)
kubectl describe pod myapp-6bc58d7775-6wlpp

给 node 设置标签

kubectl get nodekubectl label nodes node01 qqq=1
kubectl label nodes node02 qqq=2kubectl get nodes --show-labels

修改label 的值
kubectl label nodes node02 kgc=a --overwrite

Pod亲和性与反亲和性

节点的亲和性硬策略软策略
podaffinity和满足标签的pod在同一个拓步域
podAntiAffinity和满足标签的pod不在同一个拓步域

节点亲和性

pod.spec.nodeAffinity
●preferredDuringSchedulingIgnoredDuringExecution:软策略
●requiredDuringSchedulingIgnoredDuringExecution:硬策略

Pod 亲和性

pod.spec.affinity.podAffinity/podAntiAffinity
●preferredDuringSchedulingIgnoredDuringExecution:软策略
●requiredDuringSchedulingIgnoredDuringExecution:硬策略

污点和容忍

污点
节点亲和性,是Pod的一种属性(偏好或硬性要求),它使Pod被吸引到一类特定的节点。污点则相反,它使节点能够排斥一类特定的 Pod。
污点 和容忍相互配合,可以用来避免 Pod 被分配到不合适的节点上。每个节点上都可以应用一个或多个 taint ,这表示对于那些不能容忍这些 taint 的 Pod,是不会被该节点接受的。如果将 toleration 应用于 Pod 上,则表示这些 Pod 可以(但不一定)被调度到具有匹配污点的节点上。

使用 kubectl taint 命令可以给某个 Node 节点设置污点,Node 被设置上污点之后就和 Pod 之间存在了一种相斥的关系,可以让 Node 拒绝 Pod 的调度执行,甚至将 Node 已经存在的 Pod 驱逐出去。

当前 taint effect 支持如下三个选项:
NoSchedule:表示 k8s 将不会将 Pod 调度到具有该污点的 Node 上
PreferNoSchedule:表示 k8s 将尽量避免将 Pod 调度到具有该污点的 Node 上
NoExecute:表示 k8s 将不会将 Pod 调度到具有该污点的 Node 上,同时会将 Node 上已经存在的 Pod 驱逐出去
设置污点
kubectl taint node node01 qqq=value1:NoSchedule节点说明中,查找 Taints 字段
kubectl describe node node-name去除污点
kubectl taint node node01 qqq:NoSchedule-

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/158640.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[Machine Learning][Part 7]神经网络的基本组成结构

这里我们将探索神经元/单元和层的内部工作原理。特别是,与之前学习的回归/线性模型和逻辑模型进行比较。最后接介绍tensorflow以及如何利用tensorflow来实现这些模型。 神经网络和大脑的神经元工作原理类似,但是比大脑的工作原理要简单的多。大脑中神经元的工作原理…

学习笔记三十三:准入控制

ResourceQuota准入控制器 ResourceQuota准入控制器限制cpu、内存、pod、deployment数量限制存储空间大小 LimitRanger准入控制器在limit名称空间创建pod,不指定资源,看看是否会被limitrange规则自动附加其资源限制创建pod,指定cpu请求是100m&…

java修仙传之海岛奇遇

昨日开会, 商量了一下接口返回数据, 要求统一, 之前也同意,直接抛异常, 现在觉得之前那个异常不好, 看着不美观,对客户不友好 要求重新做。 大概要求如下: 要求1:范…

香港服务器不稳定的几种情况

​  近年来,随着互联网的迅猛发展,香港作为一个重要的网络枢纽地区,扮演着连接中国内地和国际网络的重要角色。一些用户表示在使用香港服务器时可能会遇到不稳定的情况,导致访问困难、加载缓慢甚至无法连接。 为什么香港服务器会…

[SpringCloud | Linux] CentOS7 部署 SpringCloud 微服务

目录 一、环境准备 1、工具准备 2、虚拟机环境 3、Docker 环境 二、项目准备 1、配置各个模块(微服务)的 Dockerfile 2、配置 docker-compose.yml 文件 3、Maven 打包 4、文件整合并传输 三、微服务部署 1、部署至 Docker 2、访问微服务 四…

六氟化硫气体监测装置单位VOL%/LEL%/PPM分别是什么意思?

我们在使用六氟化硫等气体监测装置仪器时,经常看到VOL%、LEL%、PPM等单位,以及仪器中反复性、响应时间、灵敏度等这些词在气体检测仪中代表什么意思呢?今天主要给大家解释气体检测仪一些常见的单位及常用术语的意思。 一、常见单位 &#xff…

「专题速递」数据驱动赋能、赛事直播优化、RTC技术、低延时传输引擎、多媒体处理框架、GPU加速...

点击文末阅读原文, 免费报名【抖音背后的体验增长实战揭秘】专场 随着全行业视频化的演进,营销、知识、商业和空间的交互体验正在被重塑。这种变化不仅仅是一种抽象的趋势,更是关系到用户留存和业务增长的关键因素。面对这样的挑战&#xff0…

stm32F407系列控制板用户手册

stm32F407系列控制板用户手册 文章目录 stm32F407系列控制板用户手册1.外观和接口标注2.功能3.参数4.应用场景 1.外观和接口标注 2.功能 智能配网远程控制多路舵机接口多路电机接口姿态实时采集ps 接口oled屏OTA固件一键升级语音控制-需借助app语音识别功能预留can接口预留多个…

微信小程序overflow-x超出部分样式不渲染

把display:flex改成display:inline-flex, 将对象作为内联块级弹性伸缩盒显示, 类似与是子元素将父元素撑开,样式就显示出来了

新手必看的Facebook广告投放基础思路

一、广告账号要求 如果您还没有Facebook账号,那么第一步是准备Facebook账号。 1、配置正确的网络环境 Facebook账号需要在稳定安全的网络环境中运行,否则很容易导致封禁。像我们常用的是Maskfog指纹浏览器,可以通过自定义浏览器指纹与为环…

React基础源码解析

前言: 前端魔术师卡颂的react学习视频(1 搭建项目架构_哔哩哔哩_bilibili)中提到了Rodrigo Pombo的一篇react源码教程:Build your own React 本文档分组旨在翻译和记录这篇文章的学习心得,作为react源码学习入门。 …

QT 信号和槽

不讲那么多大道理,直接上 前面用Python QT 发现在线程或者定时器里操作控件,有很大概率导致程序闪退,所以如果想要在线程和定时器中操作控件,需要自定义信号和槽,不知道CQT会不会有这个问题,这个经验不是很…