k8s笔记资源限制,亲和和性 污点和容忍

news2024/11/18 1:30:40

镜像下载失败

当宿主机资源不足时,会把pod kill ,在其他node 重建

在宿主机放可能多的资源

requests(请求) limits(限制) 超出百分比

容器
pod
namespace级别

pod使用资源过多,导致宿主机资源不足,会导致重建pod

cpu 内存限制

#apiVersion: extensions/v1beta1
apiVersion: apps/v1
kind: Deployment
metadata:
  name: limit-test-deployment
  namespace: magedu
spec:
  replicas: 1
  selector:
    matchLabels: #rs or deployment
      app: limit-test-pod
#    matchExpressions:
#      - {key: app, operator: In, values: [ng-deploy-80,ng-rs-81]}
  template:
    metadata:
      labels:
        app: limit-test-pod
    spec:
      containers:
      - name: limit-test-container
        image: lorel/docker-stress-ng
        resources:
          limits:
            cpu: "2"
            memory: "512Mi"
          requests:
            memory: "512M"
            cpu: "2"
        #command: ["stress"]
        args: ["--vm", "3", "--vm-bytes", "256M"]
      #nodeSelector:
      #  env: group1

资源限制

apiVersion: v1
kind: LimitRange
metadata:
  name: limitrange-magedu
  namespace: magedu   #限制那个命名空间
spec:
  limits:
  - type: Container       #限制的资源类型
    max:
      cpu: "2"            #限制单个容器的最大CPU
      memory: "2Gi"       #限制单个容器的最大内存
    min:
      cpu: "500m"         #限制单个容器的最小CPU
      memory: "512Mi"     #限制单个容器的最小内存
    default:
      cpu: "500m"         #默认单个容器的CPU限制
      memory: "512Mi"     #默认单个容器的内存限制
    defaultRequest:
      cpu: "500m"         #默认单个容器的CPU创建请求
      memory: "512Mi"     #默认单个容器的内存创建请求
    maxLimitRequestRatio:
      cpu: 2              #限制CPU limit/request比值最大为2  
      memory: 2         #限制内存limit/request比值最大为1.5
  - type: Pod
    max:
      cpu: "4"            #限制单个Pod的最大CPU
      memory: "4Gi"       #限制单个Pod最大内存
  - type: PersistentVolumeClaim   #限制pvc
    max:
      storage: 50Gi        #限制PVC最大的requests.storage
    min:
      storage: 30Gi        #限制PVC最小的requests.storage

在这里插入图片描述

cpu limit/request 限制

限制超出
运行yaml成功但是不会创建pod

但是有deployment

查看kubectl get deployment -n magedu -oyaml

命名空间级别的限制

亲和性和反亲和性

pod调度流程

通过命令行或者dashboard,创建pod或者调用k8s api,请求发送到apiserver,apiserver 把pod 放到etcd里,scheduler 从etcd获取事件,执行调度,调度成功后,把结果返回给apiserver, 给pod 选择一个node,把调度结果返回给apiserver,这个过程叫创建绑定(pod 分配给那个node?),apiserver 把这个事件写入etcd, scheduler获取绑定事件,kubelet调用运行时( ),创建容器并运行,拉取镜像kubelet执行初始化, rootfs 调度时会过滤不符合的节点,对节点打分,选择最合适的节点,评分一致,scheduler会随机选择一个。

调度到

node
sshd 大内存 , gpu服务器

nodeSelector简介

可用于基于服务类型干预Pod调度结果,如对磁盘I/O要求高的pod调度到SSD节点,对内存要求比较高的
pod调度的内存较高的节点

对服务器打标签,调度到指定标签

root@k8s-master02:~# kubectl label node 192.168.1.27 project=magedu
yaml

nodeSelector:
project: magedu
disktype: ssd

nodeName案例

指定pod调度到那个目的主机
数据库就运行到指定节点
在这里插入图片描述

node affinity:

Selector
 requiredDuringSchedulingIgnoredDuringExecution #必须满足pod调度匹配条件,如果不满足则不进行调度
 preferredDuringSchedulingIgnoredDuringExecution #倾向满足pod调度匹配条件,不满足的情况下会调度的不符合条件的Node上
 IgnoreDuringExecution表示如果在Pod运行期间Node的标签发生变化,导致亲和性策略不能满足,也会继续运行当前的Pod。
 Affinity与anti-affinity的目的也是控制pod的调度结果,但是相对于nodeSelector,Affinity(亲和)与anti-affinity(反亲和)的功能更加强大:
affinity与nodeSelector对比:
1、亲和与反亲和对目的标签的选择匹配不仅仅支持and,还支持In、NotIn、Exists、DoesNotExist、Gt、Lt。
 In:标签的值存在匹配列表中(匹配成功就调度到目的node,实现node亲和)
 NotIn:标签的值不存在指定的匹配列表中(不会调度到目的node,实现反亲和)
 Gt:标签的值大于某个值(字符串)
 Lt:标签的值小于某个值(字符串)
 Exists:指定的标签存在
2、可以设置软匹配和硬匹配,在软匹配下,如果调度器无法匹配节点,仍然将pod调度到其它不符合条件的节点。
3、还可以对pod定义亲和策略,比如允许哪些pod可以或者不可以被调度至同一台node。

硬亲和 :必须调度到那个节点,不匹配就失败
软亲和:

      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
            - matchExpressions: #匹配条件1,同一个key的多个value只有有一个匹配成功就认为当前key匹配成功 
              - key: disktype
                operator: In
                values:
                - ssd
                - hddx
              - key: project #匹配条件2,当前key也要匹配成功一个value,即条件1和条件2必须同时每个key匹配成功一个value,否则不调度
                operator: In
                values:
                - magedu

pod 亲和和反亲和

Pod亲和性与反亲和性可以基于已经在node节点上运行的Pod的标签来约束新创建的Pod可以调度到的
目的节点,注意不是基于node上的标签而是使用的已经运行在node上的pod标签匹配。
其规则的格式为如果 node节点 A已经运行了一个或多个满足调度新创建的Pod B的规则,那么新的
Pod B在亲和的条件下会调度到A节点之上,而在反亲和性的情况下则不会调度到A节点至上。
其中规则表示一个具有可选的关联命名空间列表的LabelSelector,只所以Pod亲和与反亲和需可以通
过LabelSelector选择namespace,是因为Pod是命名空间限定的而node不属于任何nemespace所以
node的亲和与反亲和不需要namespace,因此作用于Pod标签的标签选择算符必须指定选择算符应用
在哪个命名空间。
从概念上讲,node节点是一个拓扑域(具有拓扑结构的域),比如k8s集群中的单台node节点、一个机架、
云供应商可用区、云供应商地理区域等,可以使用topologyKey来定义亲和或者反亲和的颗粒度是
node级别还是可用区级别,以便kubernetes调度系统用来识别并选择正确的目的拓扑域。

pod 与pod是否调度到同一个node节点
pod硬亲和: pod和pod必须在同一个node,必须匹配成功

pod硬反亲和: pod必须不在同一个node
pod软反亲和:pod 能不在同一个node就不在一个node

污点和容忍:

master 只负责集群管理,不负责容器运行

污点(taints),用于node节点排斥 Pod调度,与亲和的作用是完全相反的,即taint的node和pod是排斥调度关系。
容忍(toleration),用于Pod容忍node节点的污点信息,即node有污点信息也会将新的pod调度到node

kubectl uncordon 192.168.1.24 #取消污点

污点的三种类型:
 NoSchedule: 表示k8s将不会将Pod调度到具有该污点的Node上
 # kubectl taint nodes 172.31.7.111 key1=value1:NoSchedule #设置污点
 node/172.31.7.111 tainted
 # kubectl describe node 172.31.7.111 #查看污点
 Taints: key1=value1:NoSchedule
 # kubectl taint node 172.31.7.111 key1:NoSchedule- #取消污点
 node/172.31.7.111 untainted
 PreferNoSchedule: 表示k8s将尽量避免将Pod调度到具有该污点的Node上
 NoExecute: 表示k8s将不会将Pod调度到具有该污点的Node上,同时会将Node上已经存在的Pod强制驱逐出去
 # kubectl taint nodes 172.31.7.111 key1=value1:NoExecute #key 和value 可以自定义

kubectl cordon: 不会调度新的pod,不会驱逐
NoExecute :不会调度新的pod,会驱逐

驱逐(eviction,节点驱逐),用于当node节点资源不足的时候自动将pod进行强制驱逐,以保证当前node节点的正常运行。
Kubernetes基于是QoS(服务质量等级)驱逐Pod , Qos等级包括目前包括以下三个:

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

通过Malloc 和 Free 的具体实现 加深对C指针 的理解(笔记)

【彻底搞懂C指针】Malloc 和 Free 的具体实现 https://danluu.com/malloc-tutorial/ 进程间的通信 : ①共享内存 ② 消息传递 (内核实现) 分配策略 (实现方面) by DUCK sbrk() malocal实现的主要函数 man sbrk 查看 数据结构 一个参考代码 https…

2.如何实现API统一响应-web组件篇

文章目录 1. 统一响应1.1 CommonResult 1. 统一响应 前端调用api接口获得统一的响应: 成功,返回成功的状态码和数据;失败,返回失败的状态码和错误提示。 在标准的 RESTful API 的定义,是推荐使用 HTTP 响应状态码 (…

PEFT概述:最先进的参数高效微调技术

了解参数高效微调技术,如LoRA,如何利用有限的计算资源对大型语言模型进行高效适应。 PEFT概述:最先进的参数高效微调技术 什么是PEFT什么是LoRA用例使用PEFT训练LLMs入门PEFT配置4位量化封装基础Transformer模型保存模型加载模型推理 结论 什…

Module build failed (from ./node_modules/postcss-loader/src/index.js):

出现该错误是你可能没认真看官网的安装配置,可直接看该目录3,一个字一个字看 先安装uview 如果选择v1版本,建议使用npm下载,下面以v1版本为例,使用的是npm下载,导入uview时该文件也在node_modules文件夹里…

常见后缀名总结 为你指点迷津

相信在日常的学习和工作中,大家一定会遇到各种各样的文件类型,他们的后缀名类型各不相同,诸多陌生的文件格式经常让大家不知道他们存在于电脑的意义,想删又没法删,想执行又无法执行。 今天,学长就带领大家一…

Linux学习第40天:Linux SPI 驱动实验(一):乾坤大挪移

Linux版本号4.1.15 芯片I.MX6ULL 大叔学Linux 品人间百味 思文短情长 主从工作方式完成数据交换,形象的说就是武侠中的乾坤大挪移。 本章实验的最终目的就是驱动 I.MX6UALPHA 开发板上的 ICM-20608 这个 SPI 接口的六轴传…

二十五、城市建成区结果制图——复杂图的制作

一、前言 有些时候看到一些参考文献中有些很复杂的图,例如多幅合并在一起,其实这种图本质上就是单一的图合并在一起,然后将其导出即可。 二、具体操作 其实对于制图必备要素的添加就不过多介绍,主要介绍有什么办法保持图形之间一致性,例如,其图例、指北针、比例尺统一…

着实不错的自适应大邻域搜索算法ALNS

文章目录 引言演进路线邻域搜索,NS变邻域搜素,VDNS大邻域搜索,LNS自适应大邻域搜索,ALNS 代码实现34个国内城市的TSP测试集XQF131 相关阅读 引言 之前介绍的差分进化算法和蚁群算法分别适用于求解连续优化问题和组合优化问题&…

Git基本概念和使用方式

Git 是一种版本控制系统,用于管理文件版本的变化。以下是其基本概念和使用方式: 仓库(repository):Git 存储代码的地方,可以理解为一个项目的文件夹。提交(commit):Git …

【OpenCV实现图像:用OpenCV图像处理技巧之白平衡算法2】

文章目录 概要Gray-world AlgotithmGround Truth Algorithm结论: 概要 随着数字图像处理技术的不断发展,白平衡算法成为了图像处理中一个关键的环节。白平衡的目标是校正图像中的颜色偏差,使得白色在图像中呈现真实的白色,从而提…

Linux之基础开发工具gdb调试器的使用(三)

文章目录 一、Linux调试器-gdb使用1、安装gdb2、背景3、Debug和release4、区分Debug和release 二、Linux调试器-gdb命令演示1、显示指定行之后的代码(自动记录最后一条指令)2、断点1、打印断点2、查看断点3、删除断点4、使能(禁用/开启&#…

统计分钟级别的视频在线用户数+列炸裂+repeat函数

统计分钟级别的视频在线用户数 1、原始数据如下: uid vid starttime endtime select aa as uid,v00l as vid,2023-10-25 12:00 as starttime,2023-10-2512:15 as endtime union select bb as uid,v002 as vid,2023-10-25 12:05 as starttime,2023-10-25 12:19 …

笔记:AI量化策略开发流程-基于BigQuant平台(二)

五、模型训练股票预测 完成了数据处理,接下来就可利用平台集成的各算法进行模型训练和模型预测啦。本文将详细介绍“模型训练”、“模型预测”两大模块操作、原理。 模型训练和模型预测是AI策略区别于传统量化策略的核心,我们通过模型训练模块利用训练…

为什么Android 手机这么慢?如何提高 Android 手机的运行速度

速印机(理想、荣大等)、复印机(夏普、东芝、理光、佳能、震旦等全系列)、打印机、扫描仪、传真机、多媒体教学一体机、交互式电子白板、报警器材、监控、竞业达监考设备及其它监考设备、听力考试设备、特种安防设备维护及维修。吴…

Linux必备:这十个流程图让你变的更强!

图是我们与信息联系并处理其重要性的绝佳方法;它们有助于传达关系和抽取信息,并使我们能够可视化概念。 从基本工作流程图到复杂的网络图,组织图,BPMN(业务过程模型和符号),UML图等等&#xff0…

面试10000次依然会问的【ThreadLocal】,你还不会?

ThreadLocal简介与基本概念 ThreadLocal,即线程局部变量,是Java语言中用于实现线程数据隔离的一个重要类。这种机制允许在多线程环境中,每个线程都有自己的变量副本,从而使得每个线程都可以独立地改变自己的副本,而不…

JDK1.8 新特性(一)【默认方法、静态方法和Lambda表达式】

前言 今天学习Java8 新特性,主要是之前在学习 Scala、JavaFX 中遇到一些 Lambda 表达式,感觉 lambda 表达式确实很简洁,很有必要学一学。 目录 前言 1、接口的默认方法与静态方法 编写接口 编写接口的实现类 测试 2、Lambda表达式&am…

YOLO目标检测——交通标志分类数据集下载分享【含对应voc、coco和yolo三种格式标签】

实际项目应用:交通标志识别数据集在自动驾驶、交通安全监控、智能交通系统、驾驶员辅助系统和城市规划等领域都有广泛应用的潜力数据集说明:交通标志分类数据集,真实场景的高质量图片数据,数据场景丰富,含多场景白天黑…

Linux之gdb

gdb就是一个Linux的调试工具,类似与vs里面的调试 可执行程序也有格式,不是简单的二进制堆砌

PyCharm因安装了illuminated Cloud插件导致加载项目失败

打开Pycharm时会有弹窗提示: The license for Illuminated Cloud is invalid or has expired. All Illuminated Cloud features will be disabled. 这个弹窗会导致你加载项目一直失败,close project 也关不掉,我都是用任务管理器杀死进程的…