首页 > 其他分享 >k8s超卖了解

k8s超卖了解

时间:2022-11-20 14:35:18浏览次数:51  
标签:容器 超卖 request 了解 pod k8s POD 资源

转自:https://testerhome.com/topics/31561?order_by=like&,https://fafucoder.github.io/2020/11/05/kubernetes-qos/

https://github.com/bmwx4/k8s-in-practice/blob/master/resource-quotas/pod-qos.md

1.资源模型

在k8s中,任何可以被申请、分配,最终被使用的对象,都是 kubernetes 中的资源,k8s 默认 只支持 CPU 和内存的定义。

所有的资源类型,可以被划分为两大类:可压缩和不可压缩的。

 K8s中pod 对资源的申请是以容器为最小单位进行的,针对每个容器,它都可以通过如下两个信息指定它所希望的资源量:

resources:  
 requests:    
   cpu: 2.5   
   memory: "40Mi"  
 limits:     
   cpu: 4.0    
   memory: "99Mi"

 request:

  • 容器使用的最小资源需求, 作为容器调度时资源分配的判断依据
  • 只有当前节点上可分配的资源 >= request 才允许将容器调度到该节点
  • request参数不限制容器的最大可用资源
  • 即便容器没有实际使用到这些资源, k8s 也会为容器预留好这些资源, 也就是说其他容器是无法申请这些资源的。

 limit:

  • 容器能使用资源的最大值。如果容器使用的资源超过了这个值, 就会触发后续对应的操作。CPU是限速,内存是OOM。
  • 设置为0表示对使用的资源不做限制,可无限的使用

 关系:request能保证pod有足够的资源来运行, 而limit则是防止某个pod无限制的使用资源, 导致其他pod崩溃. 两者的关系必须满足:

0 <= request <= limit <= Infinity

 limit 的资源限制是通过 cgroups 来进行限制的。 每个 POD,每个容器都会在/sys/fs/cgroup 下留有对应的记录:

2.超卖 

超卖比高简单理解就是,request低,limit高,那么针对一些不重要的服务,低优先级的,request设置就可以比limit小很多,如果是重要的,那么两者设置的一样大。

3.QoS服务质量

当kubernetes集群中某个节点上可用资源比较小时,kubernetes提供了资源回收策略来保证节点上POD正常运行。因为如果节点上的内存或者CPU资源耗尽时,这个节点上运行的POD就会变成不稳定。

原则是在保证服务质量的同时,尽量提高资源的利用率。

分为以下3个级别:

  •  BestEffort:POD中的所有容器都没有指定CPU和内存的requests和limits;(优先级最低,最危险,首先被驱逐。因为它没有声明任何资源的使用, 包括 request 和 limit。 所以理论上它可以占用整个节点的资源。 )
  • Burstable:POD中只要有一个容器,这个容器requests和limits的设置同其他容器设置的不一致,那么这个POD的QoS就是Burstable级别;【超卖场景】
  • Guaranteed:POD中所有容器都必须统一设置了limits,并且设置参数都一致,如果有一个容器要设置requests,那么所有容器都要设置,并设置参数同limits一致,那么这个POD的QoS就是Guaranteed级别。

被定义为 Guaranteed 的 POD 优先级是最高的,pod 明确了 request 和 limit 的数字并且是相等的, 等于告诉 k8s 不管什么情况, 我都要使用这么多资源。 而 k8s 会最优先保证这种 pod 的资源使用。

先驱逐谁: 

当节点资源紧张时,可以停止某些POD。BestEffort级别的会先被杀死,Guaranteed的最后被杀死,那么相同级别的杀死顺序:是依据它们已使用的资源占request比例来确定的,越高得分越高,先被杀死。对于两个同属于 Burstable 的 pod, 系统会先杀掉内存实际使用量占内存申请量的比例更高的pod。 所以pod B先被杀掉,尽管 pod C比pod B使用了更多的内存。

  1. Kubernetes 自带的组件使用Guarantee
  2. 重要的组件和应用,比如ZooKeeper、Redis,ES、用户服务等使用Guarantee
  3. 普通的应用(Burstable)按照重要性分级,按重要程度CPU分为2,5,10三个超卖标准,10倍超卖适合访问量不高。(也就是超卖比越高,说明服务优先级越低)
  4. 内存使用固定的1.5倍超卖标准。
  5. 在生产环境中,不要使用 BestEffort 的方式,它会引发不确定的行为。

 

标签:容器,超卖,request,了解,pod,k8s,POD,资源
From: https://www.cnblogs.com/BlueBlueSea/p/16908418.html

相关文章

  • java——多线程——并发与并行的了解以及区别
                     多线程的概念想要设计一个程序,边打游戏边听歌,怎么设计?得使用多进程或者多线程来解决.并发与并行并发:指两......
  • k8s:服务账号service-account相关参数设置:【重点一篇文章】
    为何写这篇文章?!主要在k8s中,serviceaccount是很要要的一个安全特性,官方资料、以及网上资料对这款的相关参数配置又语焉不详。这里也是自己的理解和解释。如有不对,请指......
  • K8s系列---【K8s常用命令】
    K8s常用命令1.查看所有node节点状态kubectlgetnodeskubectlgetnode-A 2.查看所有pod状态#查看所有命名空间下的podkubectlgetpod-A#默认查看default默认命名空间下......
  • mysql字段类型大小了解
    转自:https://www.kancloud.cn/thinkphp/mysql-design-optimalize/393251.数值类型 可以通过它来计算查询结果集所占大小,一行数据占的内存大小。2.字符串类型 3.时......
  • 每天一点基础K8S--dockerfile的常见语法
    `dockerfile类似于ansible中的playbook文件,按需对dockerimage进行定制修改。参考文件可以通过mandockerfile查看,也可以去官网查看dockerfile中,常用语法主要包括:1......
  • 每天一点基础K8S--dockerfile练习
    点击查看代码#dockerfile文件[11-1415:39:27huaweiroot~/dockerfile]#ls-ltotal8-rw-r--r--1rootroot579Nov1415:25dockerfile-rw-r--r--1root......
  • Kubernetes(k8s)CNI(Calico)网络模型原理
    目录一、概述二、Calico架构和核心组件三、什么是BGP?三、Calico两种网络模式1)IPIP模式2)BGP模式四、安装Calico插件1)通过helm安装Calico2)通过yaml文件安装3)k8sflannel......
  • k8s配置禁止以 root 用户启动容器
    描述通过禁止以root用户启动容器,可以限制容器内进程的可用权限,降低被容器中恶意进程通过root权限入侵/破坏用户应用、主机甚至整个集群的风险。如果确认当前工作负载确......
  • SQLserver服务器启动不了解决方案(端口占用异常)
    一、问题描述: 二、问题原因:排查方法1:telnet127.0.0.11433看能ping通不能,如果不能说明端口被占用。排查方法2:打开“计算机管理”→“系统工具”→“事件查看器”......
  • K8s系列---【什么是Service?】
    什么是Service?1.作用Service为一组pod提供服务发现与负载均衡,当有pod可用时,Service的服务发现能感知到,当外部请求进来时,Service的负载均衡功能能够轮流分发流量。并......