Kubernetes 服务质量 - QoS

news2024/11/22 16:31:41

header-how-to-optimize-kubernetes-for-reliability-and-cos

Author:rab


目录

    • 前言
    • 一、QoS 类为 Guaranteed 的 Pod
      • 1.1 概述
      • 1.2 案例
    • 二、QoS 类为 Burstable 的 Pod
      • 2.1 概述
      • 2.2 案例
    • 三、QoS 类为 BestEffort 的 Pod
      • 3.1 概述
      • 3.2 案例
    • 总结


前言

前面提到了 Kubernetes 的准入控制策略,那你有没有想过一个问题:如果 Pod 运行的当前 Node 节点的资源不足了,那该 Pod 如何被逐出呢?因此,这里就提到了服务质量类(Quality of Service class,QoS class),Kubernetes 在 Node 资源不足时使用 QoS 类策略来就驱逐 Pod。

Kubernetes 创建 Pod 时,会将如下 QoS 类之一设置到 Pod 上:

  • Guaranteed
  • Burstable
  • BestEffort

至于 Pod 会被设置为哪一个 Qos 类,取决于 Pod 容器中 limits 的取值。

一、QoS 类为 Guaranteed 的 Pod

1.1 概述

当为 Pod 的 Qos 为 Guaranteed 时,要求在创建 Pod 前,应配置 Pod 的资源限制(Resource Limits)和资源请求(Resource Requests)相等。这意味着 Pod 请求了特定数量的资源,并且该数量是 Pod 所能获得的最小资源量。因此,Guaranteed 级别通常用于关键应用,确保它们始终获得它们所需的资源。

1.2 案例

下面是包含一个 Container 的 Pod 清单。该 Container 设置了内存请求和内存限制,值都是 200 MiB。 该 Container 设置了 CPU 请求和 CPU 限制,值都是 700 milliCPU。

apiVersion: v1
kind: Pod
metadata:
  name: qos-demo
  namespace: qos-example
spec:
  containers:
  - name: qos-demo-ctr
    image: nginx
    resources:
      limits:
        memory: "200Mi"
        cpu: "700m"
      requests:
        memory: "200Mi"
        cpu: "700m"

**说明:**如果某 Container 指定了自己的内存限制,但没有指定内存请求,Kubernetes 会自动为它指定与内存限制相等的内存请求。同样,如果容器指定了自己的 CPU 限制, 但没有指定 CPU 请求,Kubernetes 会自动为它指定与 CPU 限制相等的 CPU 请求。也就是说,QoS 类为 Guaranteed 的 Pod 除了能想以上案例这样写之外,还可以这样写:

apiVersion: v1
kind: Pod
metadata:
  name: qos-demo
  namespace: qos-example
spec:
  containers:
  - name: qos-demo-ctr
    image: nginx
    resources:
      limits:
        memory: "200Mi"
        cpu: "700m"

此时,Kubernetes 会自动为它指定与 CPU 限制相等的 CPU 请求,以及与内存限制相等的内存请求。

查看 Pod 详情:

kubectl get pod qos-demo --namespace=qos-example --output=yaml
spec:
  containers:
    ...
    resources:
      limits:
        cpu: 700m
        memory: 200Mi
      requests:
        cpu: 700m
        memory: 200Mi
    ...
status:
  qosClass: Guaranteed

可见 Pod 的 status 为 Guaranteed。

二、QoS 类为 Burstable 的 Pod

2.1 概述

当为 Pod 的 Qos 为 Burstable 时,要求在创建 Pod 前,应配置 Pod 的资源请求小于资源限制。Pod 可以使用比其请求的资源更多的资源,但在高负载情况下可能会受到竞争,资源可能不足。因此,Burstable 级别通常用于需要灵活性的应用,但不需要保证资源的固定数量的应用。

2.2 案例

下面是包含一个 Container 的 Pod 清单。该 Container 设置的内存限制为 200 MiB, 内存请求为 100 MiB。

apiVersion: v1
kind: Pod
metadata:
  name: qos-demo-2
  namespace: qos-example
spec:
  containers:
  - name: qos-demo-2-ctr
    image: nginx
    resources:
      limits:
        memory: "200Mi"
      requests:
        memory: "100Mi"

查看 Pod 详情:

kubectl get pod qos-demo-2 --namespace=qos-example --output=yaml
spec:
  containers:
  - image: nginx
    imagePullPolicy: Always
    name: qos-demo-2-ctr
    resources:
      limits:
        memory: 200Mi
      requests:
        memory: 100Mi
  ...
status:
  qosClass: Burstable

可见 Pod 的 status 为 Burstable。

三、QoS 类为 BestEffort 的 Pod

3.1 概述

当为 Pod 的 Qos 为 Guaranteed 时,要求创建 Pod 时无需设置资源请求及资源限制。于是 Pod 可以使用节点上的所有可用资源,但无法保证获取足够的资源,可能会受到节点上其他 Pod 的影响。因此,BestEffort 级别通常用于非关键应用,如测试应用或不太重要的工作负载。

3.2 案例

下面是包含一个 Container 的 Pod 清单。该 Container 没有设置内存和 CPU 限制或请求。

apiVersion: v1
kind: Pod
metadata:
  name: qos-demo-3
  namespace: qos-example
spec:
  containers:
  - name: qos-demo-3-ctr
    image: nginx

查看 Pod 详情:

kubectl get pod qos-demo-3 --namespace=qos-example --output=yaml
spec:
  containers:
    ...
    resources: {}
  ...
status:
  qosClass: BestEffort

可见 Pod 的 status 为 BestEffort。

那问题来了:当节点资源不足时,哪些 Pod 应该首先被删除以释放资源呢?

  • BestEffort 级别的 Pod 通常是首先被删除的,因为它们没有设置资源请求,它们的删除优先级最低。在节点资源不足时,Kubernetes 会首先回收 BestEffort 级别的 Pod,以腾出更多的资源。
  • Burstable 级别的 Pod 相对于 Guaranteed 级别的 Pod 有较低的删除优先级。当节点资源不足时,Burstable 级别的 Pod 会在回收Guaranteed 级别的 Pod 之前被删除。
  • Guaranteed 级别的 Pod 通常是最后被删除的。它们的资源请求和资源限制相等,因此它们被认为是高优先级的Pod。在节点资源不足时,Kubernetes 通常首先回收 BestEffort 级别的 Pod,然后回收 Burstable 级别的 Pod,最后才回收 Guaranteed 级别的 Pod。

总结

Kubernetes(K8s)中的 QoS(Quality of Service)是一个用于分类和管理 Pod 的资源要求和限制的机制。QoS分类有三个级别:Guaranteed、Burstable 和 BestEffort,这些级别反映了 Pod 对 CPU 和内存资源的使用要求。QoS 级别用于帮助 Kubernetes 调度器和资源管理器更好地管理和分配资源,以确保各个 Pod 在共享的节点上能够得到合理的资源分配。

当 Node 节点资源不足时,先删除服务质量为 BestEffort 的 Pod,然后在删除 Burstable 的 Pod,最后再删除 Guaranteed 的 Pod。

—END

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

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

相关文章

指针基础知识

指针的概念&#xff1a;一个变量的地址称为该变量的指针。如果有一个变量专门用来放其他变量的地址&#xff08;指针&#xff09;&#xff0c;这个变量被称为“指针变量”。 指针就是内存地址&#xff0c;指针变量就是存储地址的变量。 代码示例&#xff1a; #include <s…

基于element-ui封装可配置表单组件

“vue”: “^2.7.13” “element-ui”: “^2.15.7” 代码地址 【说明】 该组件时使用vue3&#xff08;vue2.7&#xff09;语法封装&#xff0c;使用时可用vue2语法使用也可以使用vue3语法使用 一、vue2语法使用案例 基础用法 <template><div class"form-demo…

Kubernetes平台部署Grafana Loki Promtail系统

部署结构图&#xff1a; Loki 是主服务&#xff0c;负责存储日志和处理查询promtail 是代理&#xff0c;负责收集日志并将其发送给 lokiGrafana 用于 UI 展示 只要在应用程序服务器上安装promtail来收集日志然后发送给Loki存储&#xff0c;就可以在Grafana UI界面通过添加Lok…

网络工程师回顾学习(第二部分)

第六章&#xff1a;网络互连与互联网 需要掌握&#xff1a; &#xff08;1&#xff09;网络互连设备 &#xff08;2&#xff09;网络互连的基本原理和关键技术 &#xff08;扩展&#xff1a;TCP/IP协议簇&#xff09; &#xff08;3&#xff09;Internet协议及其提供的网络…

【python海洋专题四十】海洋指数画法--单色填充图

【python海洋专题四十】海洋指数画法–单色填充图 【python海洋专题四十】海洋指数画法–单色填充图 数据:AMO_index 图像展示: 图片 往期推荐 图片 【python海洋专题一】查看数据nc文件的属性并输出属性到txt文件 【python海洋专题二】读取水深nc文件并水深地形图 【p…

详细记一下jvm调优整过程

cpu占用过高 cpu占用过高要分情况讨论&#xff0c;是不是业务上在搞活动&#xff0c;突然有大批的流量进来&#xff0c;而且活动结束后cpu占用率就下降了&#xff0c;如果是这种情况其实可以不用太关心&#xff0c;因为请求越多&#xff0c;需要处理的线程数越多&#xff0c;这…

解密Elasticsearch:深入探究这款搜索和分析引擎

•开篇 最近使用Elasticsearch实现画像系统&#xff0c;实现的dmp的数据中台能力。同时调研了竞品的架构选型。以及重温了redis原理等。特此做一次es的总结和回顾。网上没看到有人用Elasticsearch来完成画像的。我来做第一次尝试。 背景说完&#xff0c;我们先思考一件事&…

分布式数据库·Hive和MySQL的安装与配置

一、版本要求&#xff1a;Hadoop:hadoop-2.10.1、MySQL&#xff1a;mysql-8.0.35、 HIVE&#xff1a;apache-hive-3.1.2、MySQL驱动&#xff1a;mysql-connector-java-5.1.49 安装包网盘链接&#xff1a;阿里云盘分享 安装位置 Hive:master、MySQL:slave1 二、卸载已安装的…

智能柜+MRO:制造业中的自动售货机

每当谈及企业数字化转型&#xff0c;多数人想到的是人工智能、大数据等高端技术的应用&#xff0c;或是原有业务流程和运营方式的数字化与自动化&#xff0c;实现大幅降本增效等。然而&#xff0c;对于急需在数字时代找到生存之道的企业来说&#xff0c;数字化转型的要求远不止…

如何通过CRM系统进行销售机会管理?

销售机会管理是在销售过程中对潜在客户的精细化管理&#xff0c;销售机会管理的本质是公司用于管理销售机会通用的工具和方法。对于希望建立长期客户关系的现代销售团队来说&#xff0c;CRM客户管理系统是必不可少的工具。那企业如何通过CRM系统进行销售机会管理&#xff1f; …

抖音AAN服务商有几家?

大家都知道抖音服务商多如牛毛&#xff0c;有本地生活服务商&#xff0c;MCN机构服务商&#xff0c;企业认证服务商&#xff0c;ISV服务商等等。但是aan服务商就屈指可数。 aan技术服务商 从关系层面讲&#xff0c;aan服务商的关系友好到啥程度呢&#xff0c;就好比微信指定了…

强强联合!Flat Ads出席云栖大会,加入阿里云“橙”云出海服务联盟

10月31日&#xff0c;一年一度的科技盛会云栖大会在杭州云栖小镇正式开幕。本届云栖大会以“计算&#xff0c;为了无法计算的价值”为主题&#xff0c;除两场重磅主论坛外&#xff0c;还邀请1000多位行业实干家&#xff0c;带来500余场主题分享与互动&#xff0c;通过演讲、研讨…

分享:轰动全球的12大创意二维码营销案例!

今天我们要分享是12个非常有影响力、引起全球轰动的、很成功的创意二维码营销案例。在日常工作中二维码被我们用来存储和分享信息&#xff0c;与此同时&#xff0c;二维码也正在各大展览活动中、电影大片里、全球体育赛事相关活动中、时尚T台上…大展风采&#xff0c;它们帮助品…

Linux内核分析(九)--CPU上下文

目录 一、引言 二、CPU上下文 ------>2.1、CPU上下文切换 三、线程上下文切换 ------>3.1、协程 四、中断上下文切换 ------>4.1、vmstat ------>4.2、pidstat ------>4.3、sysbench 一、引言 Linux是一个多任务的操作系统,可以支持远大于CPU数量的…

数据结构与算法—插入排序选择排序

目录 一、排序的概念 二、插入排序 1、直接插入排序 直接插入排序的特性总结&#xff1a; 2、希尔排序 希尔排序的特性总结&#xff1a; 三、选择排序 1、直接选择排序 时间复杂度 2、堆排序—排升序(建大堆) 向下调整函数 堆排序函数 四、交换排序 1、冒泡排…

vue+css动画 实现文字的上下轮播切换

突然间碰到一个比较丝滑的特效,就研究了一下想把它实现出来。 效果:渐隐消失,底部往上走覆盖出现 以下是完整代码,复制粘贴即可运行 <template><div class="aaa"><divclass="page1":class="{ private-fade-out: prevIndex === 1…

window11安装nvm

链接 默认已经安装了node 没有安装的请看链接 github下载最新nvm https://github.com/coreybutler/nvm-windows/releases 找到github下面的 解压之后 安装exe文件 路径自己选择 配置路径和下载源 找到nvm安装路径 -> 找到 settings.txt 文件 -> 配置下载源 node_m…

CSS 下拉菜单、提示工具、图片廊、计数器

一、CSS 下拉菜单&#xff1a; CSS下拉菜单用于创建一个鼠标移动上去后显示下拉菜单的效果。示例&#xff1a; <style> .dropdown { position: relative; display: inline-block; } .dropdown-content { display: none; position: absolute; background-color: #f9f…

下拉列表框Spinner

在XML文件中的创建 <Spinnerandroid:id"id/spinner"android:layout_width"wrap_content"android:layout_height"wrap_content"/> 在Java文件中的设置 //获取Spinner对象 Spinner spinnerfindViewById(R.id.spinner); //创建数组…

MoveFunsDAO 星航计划|从Move入门Web3与深入实践「公益课堂」

Move 语言作为最安全的编程语言之一&#xff0c;在资产的安全性和保护方面有着显著优势&#xff0c;被寄予引领 Web3 世界的全新叙事的厚望。 随着 Sui 在今年五月主网上线&#xff0c;它为 Move 生态带来一股新的浪潮。上线以来&#xff0c;Sui 公链的开发活跃度持续数月位居…