K8S的服务质量QoS —— 筑梦之路

这篇具有很好参考价值的文章主要介绍了K8S的服务质量QoS —— 筑梦之路。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

K8S中的应用服务质量(QoS)介绍

服务质量(QoS)类是Kubernetes的概念,它确定Pod的调度和驱逐优先级

Kubelet使用它来管理驱逐pod的顺序,以及使用高级CPU管理策略允许更复杂的pod调度决策。

QoS由Kubernetes本身分配给Pod。但是,DevOps可以通过处理Pod内各个容器的资源请求和限制来控制分配给容器的QoS类。

QoS级别分类

  • Guaranteed:POD中所有容器(包含初始化容器)都必须统一设置了limits,并且设置参数都一致;

  • Burstable:POD中有容器设置了 内存 或 CPU request;

  • BestEffort:POD中的所有容器都没有指定CPU和内存的requests和limits;

Guaranteed
对于 QoS 类为 Guaranteed 的 Pod:

Pod 中的每个容器,包含初始化容器,必须指定内存 请求和 内存 限制,并且两者要相等。

Pod 中的每个容器,包含初始化容器,必须指定 CPU 请求和 CPU 限制,并且两者要相等。

举例:
apiVersion: v1
kind: Pod
metadata:
name: qos-demo
spec:
containers:
- name: qos-demo
  image: nginx
  resources:
    limits:
      memory: "500Mi"
      cpu: "700m"
    requests:
      memory: "500Mi"
      cpu: "700m"

注意点:

如果容器指定了自己的内存limits,但没有指定内存requests,Kubernetes 会自动为它指定与内存limits匹配的内存requests。 同样,如果容器指定了自己的 CPU limits,但没有指定 CPU requests,Kubernetes 会自动为它指定与 CPU limits匹配的 CPU requests;

------------------------------------------------------------------------------

Burstable
如果满足下面条件,将会指定 Pod 的 QoS 类为 Burstable:

Pod 不符合 Guaranteed QoS 类的标准;

Pod 中至少一个容器具有内存 或 CPU requests;

举例:

apiVersion: v1
kind: Pod
metadata:
name: qos-demo2
spec:
containers:
- name: qos-demo2
  image: nginx
  resources:
    limits:
      memory: "500Mi"
    requests:
      memory: "200Mi"


--------------------------------------------------------------------------

BestEffort
对于 QoS 类为 BestEffort 的 Pod,Pod 中的容器必须没有设置内存和 CPU 限制或请求。

举例:

apiVersion: v1
kind: Pod
metadata:
name: qos-demo3
spec:
containers:
- name: qos-demo3
  image: nginx

如何查看Qos

kubectl describe po qos-demo

QoS优先级

3种QoS优先级从有低到高(从左向右):

BestEffort pods -> Burstable pods -> Guaranteed pods

驱逐原理

可压缩资源:CPU

在压缩资源部分已经提到CPU属于可压缩资源,当pod使用超过设置的limits值,pod中进程使用cpu会被限制,但不会被kill。

不可压缩资源:内存

节点OOM时如何处理Guaranteed, Burstable 和 BestEffort Pods? 

如果节点在Kubelet可以回收之前耗尽了内存,即节点发生了oom,则oom_killer会根据其oom_score终止容器。

对于 “Guaranteed” Pod中的容器,oom_score_adj 为 “ -998”;

对于 “BestEffort” Pod中的容器,其为“ 1000”;

Burstable Pod中的容器,值为“ min(max(2,1000-(1000 * memoryRequestBytes)/ machineMemoryCapacityBytes),999” )”。

oom_killer首先终止QoS等级最低,且超过请求资源最多的容器。这意味着会优先从Burstable中选择占用资源请求过多的容器进行驱逐;

最佳实践

  • 1、按照应用类型进行分类:核心应用(core)/ 常规应用(nomarl)/ 附加应用(extral)

  • 2、核心应用:Guaranteed  / 常规应用:Burstable / 附加应用:BestEffort

  • 3、集群节点分为:核心应用节点 / 常规应用节点 / 附加应用节点

  • 4、调度策略:

    • 核心应用:可以采用nodeAffinity的prefer调度策略调度到核心节点;

    • 常规应用:可以采用nodeAffinity的硬亲和调度策略调度到常规节点;

    • 附加应用:可以采用nodeAffinity的硬亲和调度策略调度到附加节点;文章来源地址https://www.toymoban.com/news/detail-469475.html

到了这里,关于K8S的服务质量QoS —— 筑梦之路的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • k8s 检测node节点内存使用率平衡调度脚本 —— 筑梦之路

    直接上脚本: 参考资料: 一招完美解决k8s调度不均问题

    2024年01月16日
    浏览(48)
  • k8s pod 处于Terminating的原因分析和解决处理——筑梦之路

    之前整理了一下各种资源长时间无法回收,解决处理的命令行 k8s 各种资源Terminationg状态处理 —— 筑梦之路_k8s自定义资源修改状态-CSDN博客 这里具体整理下pod长时间处于Terminating状态的相关知识,主要是对前面的补充和完善,作为笔记记录。 当我们要删除一个Pod时,Kuberne

    2024年02月03日
    浏览(35)
  • K8s进阶之路-命名空间级-服务发现 :

    服务发现: Service(东西流量):集群内网络通信、负载均衡(四层负载)内部跨节点,节点与节点之间的通信,以及pod与pod之间的通信,用Service暴露端口即可实现 Ingress(南北流量):将内部服务暴露外网访问的服务ingress-nginx,也就是nginx反向代理负载均衡服务(七层http负

    2024年02月20日
    浏览(47)
  • K8s进阶之路-控制器无状态服务:

    RC/RS/Deployment 控制器 deployment 无状态(最常用):    nginx和Apache statefulset 有状态: mysql和redis damonset 初始化 job 一次性任务 cronjob 任务计划 1无状态:不会对本地环境产生依赖如:nginx和Apache 3.RC、RS和 Deployment 区别 :   RC和RS : 动态更新pod副本数      管理pod,控制pod怎么

    2024年02月19日
    浏览(44)
  • k8s进阶之路-pod探针:容器内的监控机制,检测应用是否存活

    配合Pod重启策略:  RestartPolicy 应用程序是否启动完成: 3.startupProbe启动探针1.16:排他性          如果三个都配置了,会优先启动,会禁用前两个反馈成功后,才会启动以下两个 应用启动成功后: 1.LivenessProbe存活探针--故障自动恢复:         如果容器挂掉了,会检测是

    2024年02月19日
    浏览(55)
  • GoZero微服务微服务个人探究之路(五)部署微服务到k8s的一种最佳实践

    在每个微服务下面新建一个Dockerfile文件 根据Dockerfile文件使用docker build指令,打包为具体的镜像 (根据自己需求选择)将docker镜像上传到私人docker仓库或者是公共仓库,如果没有上传,则自动保存在本地 编写用于部署k8s的yaml文件--服务service,节点--pod 根据yaml文件,使用ku

    2024年01月18日
    浏览(39)
  • CoreDX DDS应用开发指南(9)服务质量QoS

            DDS的强大功能之一是支持各种服务质量(QoS)设置。QoS设置允许应用程序开发人员定制发布者、订阅者的行为以及它们之间的通信。         从DomainParticipantFactory到DataReader和DataWriter,大多数DDS实体都有一组适用的QoS设置。QoS设置包含在一个结构中。      

    2024年02月08日
    浏览(51)
  • 微服务探索之路06篇k8s配置文件Yaml部署Redis使用Helm部署MongoDB和kafka

    1.1创建配置文件redis.conf 切换到自己的目录下如本文是放在/home/ubuntu下 cd /home/ubuntu vim redis.conf 1.2创建deployment配置文件 vim redis.yaml 1.创建k8sConfig Maps配置文件 kubectl create cm redis-conf --from-file=redis.conf 2.部署redis Deployments kubectl create -f redis.yaml 3.将资源公开一个新的服务service`kube

    2024年02月16日
    浏览(48)
  • K8s进阶之路-安装部署K8s

    参考:(部署过程参考的下面红色字体文档链接就可以,步骤很详细,重点部分在下面做了标注)  安装部署K8S集群文档: 使用kubeadm方式搭建K8S集群 · GitBook 本机: master:10.0.0.13 master            node1: 10.0.0.11 node1            node2: 10.0.0.12 node2 #systemctl stop firewalldsy

    2024年02月22日
    浏览(49)
  • k8s 中的无头服务 (Headless Services)

            有时候我们不需要负载均衡,以及单独的 Service IP。 遇到这种情况,可以通过指定 Cluster IP(spec.clusterIP)的值为 \\\"None\\\" 来创建无头服务。通过无头服务的标签选择器(Label Selector)可以将后端的 Pod 列表返回给调用的客户端。         对于无头服务,不会为其分

    2024年02月15日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包