0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

關(guān)于K8S的服務(wù)質(zhì)量QoS你知道多少?

馬哥Linux運(yùn)維 ? 來源:ZHDYA ? 2023-05-22 10:21 ? 次閱讀

一、K8S中的應(yīng)用服務(wù)質(zhì)量(QoS)

服務(wù)質(zhì)量(QoS)類是Kubernetes的概念,它確定Pod的調(diào)度和驅(qū)逐優(yōu)先級

Kubelet使用它來管理驅(qū)逐pod的順序,以及使用高級CPU管理策略允許更復(fù)雜的pod調(diào)度決策。

QoS由Kubernetes本身分配給Pod。但是,DevOps可以通過處理Pod內(nèi)各個容器的資源請求和限制來控制分配給容器的QoS類。

二、QoS級別

Guaranteed:POD中所有容器(包含初始化容器)都必須統(tǒng)一設(shè)置了limits,并且設(shè)置參數(shù)都一致;

Burstable:POD中有容器設(shè)置了 內(nèi)存 或 CPU request;

BestEffort:POD中的所有容器都沒有指定CPU和內(nèi)存的requests和limits;

2.1、Guaranteed

對于 QoS 類為 Guaranteed 的 Pod:

Pod 中的每個容器,包含初始化容器,必須指定內(nèi)存 請求和 內(nèi)存 限制,并且兩者要相等。

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"

驗(yàn)證:

# kubectl describe po qos-demo
···
QoS Class:          Guaranteed

注意點(diǎn):

如果容器指定了自己的內(nèi)存limits,但沒有指定內(nèi)存requests,Kubernetes 會自動為它指定與內(nèi)存limits匹配的內(nèi)存requests。同樣,如果容器指定了自己的 CPU limits,但沒有指定 CPU requests,Kubernetes 會自動為它指定與 CPU limits匹配的 CPU requests;

2.2、Burstable

如果滿足下面條件,將會指定 Pod 的 QoS 類為 Burstable:

Pod 不符合 Guaranteed QoS 類的標(biāo)準(zhǔn);

Pod 中至少一個容器具有內(nèi)存 CPU requests;

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

驗(yàn)證:

# kubectl describe po qos-demo2
···
QoS Class:          Burstable

2.3、BestEffort

對于 QoS 類為 BestEffort 的 Pod,Pod 中的容器必須沒有設(shè)置內(nèi)存和 CPU 限制或請求。

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

三、QoS優(yōu)先級

3種QoS優(yōu)先級從有低到高(從左向右):

BestEffort pods -> Burstable pods -> Guaranteed pods

四、驅(qū)逐原理

可壓縮資源:CPU

在壓縮資源部分已經(jīng)提到CPU屬于可壓縮資源,當(dāng)pod使用超過設(shè)置的limits值,pod中進(jìn)程使用cpu會被限制,但不會被kill。

不可壓縮資源:內(nèi)存

4.1、節(jié)點(diǎn)OOM時如何處理Guaranteed, Burstable 和 BestEffort Pods?

如果節(jié)點(diǎn)在Kubelet可以回收之前耗盡了內(nèi)存,即節(jié)點(diǎn)發(fā)生了oom,則oom_killer會根據(jù)其oom_score終止容器。

對于 “Guaranteed” Pod中的容器,oom_score_adj 為 “ -998”;

對于 “BestEffort” Pod中的容器,其為“ 1000”;

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

oom_killer首先終止QoS等級最低,且超過請求資源最多的容器。這意味著會優(yōu)先從Burstable中選擇占用資源請求過多的容器進(jìn)行驅(qū)逐;

五、最佳實(shí)踐

1、按照應(yīng)用類型進(jìn)行分類:核心應(yīng)用(core)/ 常規(guī)應(yīng)用(nomarl)/ 附加應(yīng)用(extral)

2、核心應(yīng)用:Guaranteed / 常規(guī)應(yīng)用:Burstable / 附加應(yīng)用:BestEffort

3、集群節(jié)點(diǎn)分為:核心應(yīng)用節(jié)點(diǎn) / 常規(guī)應(yīng)用節(jié)點(diǎn) / 附加應(yīng)用節(jié)點(diǎn)

4、調(diào)度策略:

核心應(yīng)用:可以采用nodeAffinity的prefer調(diào)度策略調(diào)度到核心節(jié)點(diǎn);

常規(guī)應(yīng)用:可以采用nodeAffinity的硬親和調(diào)度策略調(diào)度到常規(guī)節(jié)點(diǎn);

附加應(yīng)用:可以采用nodeAffinity的硬親和調(diào)度策略調(diào)度到附加節(jié)點(diǎn);





審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • cpu
    cpu
    +關(guān)注

    關(guān)注

    68

    文章

    10804

    瀏覽量

    210829
  • QoS
    QoS
    +關(guān)注

    關(guān)注

    1

    文章

    136

    瀏覽量

    44730

原文標(biāo)題:關(guān)于K8S的服務(wù)質(zhì)量QoS你知道多少?

文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    全面提升,阿里云Docker/Kubernetes(K8S) 日志解決方案與選型對比

    。Logtail保證多次加載同一容器配置的冪等性??偨Y(jié)阿里云日志服務(wù)提供的解決方案完美地解決了k8s上日志采集難的問題,從之前需要多個軟件、幾十個部署流程精簡到1款軟件、3個操作即可輕松上云,讓廣大用戶真正體驗(yàn)到一個字:爽,從此日志運(yùn)維人員的生活
    發(fā)表于 02-28 12:49

    服務(wù)質(zhì)量QoS協(xié)議的研究與分析

    本文主要介紹了服務(wù)質(zhì)量QoS)的協(xié)議和結(jié)構(gòu),對其原理和功能做了一定的分析,涉及了QoS 的四種應(yīng)用方法和模型,分析Internet/RSVP、區(qū)分服務(wù)Differ、MPLS、SBM
    發(fā)表于 09-07 15:50 ?8次下載

    如何利用K8S全面擁抱微服務(wù)架構(gòu)?

    K8S是第一個將“一切以服務(wù)為中心,一切圍繞服務(wù)運(yùn)轉(zhuǎn)”作為指導(dǎo)思想的創(chuàng)新型產(chǎn)品,它的功能和架構(gòu)設(shè)計(jì)自始至終都遵循了這一指導(dǎo)思想,構(gòu)建在K8S上的系統(tǒng)不僅可以獨(dú)立運(yùn)行在物理機(jī)、虛擬機(jī)集群
    的頭像 發(fā)表于 10-08 15:59 ?2.7w次閱讀

    OpenStack與K8s結(jié)合的兩種方案的詳細(xì)介紹和比較

    OpenStack與K8S結(jié)合主要有兩種方案。一是K8S部署在OpenStack平臺之上,二是K8S和OpenStack組件集成。
    的頭像 發(fā)表于 10-14 09:38 ?2.7w次閱讀

    關(guān)于K8s最詳細(xì)的解析

    一個目標(biāo):容器操作;兩地三中心;四層服務(wù)發(fā)現(xiàn);五種Pod共享資源;六個CNI常用插件;七層負(fù)載均衡;八種隔離維度;九個網(wǎng)絡(luò)模型原則;十類IP地址;百級產(chǎn)品線;千級物理機(jī);萬級容器;相如無億,K8s有億:億級日服務(wù)人次。
    的頭像 發(fā)表于 04-08 13:55 ?7204次閱讀
    <b class='flag-5'>關(guān)于</b><b class='flag-5'>K8s</b>最詳細(xì)的解析

    Docker不香嗎為什么還要用K8s

    關(guān)于 K8s 的基本概念我們將會圍繞如下七點(diǎn)展開: Docker 的管理痛點(diǎn) 什么是 K8s? 云架構(gòu) 云原生 K8s 架構(gòu)原理 K8s
    的頭像 發(fā)表于 06-02 11:56 ?3395次閱讀

    簡單說明k8s和Docker之間的關(guān)系

    ,但最近發(fā)現(xiàn)k8s概念較多,命令也有些不夠用了,故想借此機(jī)會寫點(diǎn)東西,更全面認(rèn)識并使用k8s。本篇文章目的:讓更全面了解k8s概念,以及學(xué)到在工作中常用的操作。整體更偏向于原理和應(yīng)用
    的頭像 發(fā)表于 06-24 15:48 ?3326次閱讀

    K8S集群服務(wù)訪問失敗怎么辦 K8S故障處理集錦

    問題1:K8S集群服務(wù)訪問失??? ? ? 原因分析:證書不能被識別,其原因?yàn)椋鹤远x證書,過期等。 解決方法:更新證書即可。 問題2:K8S集群服務(wù)訪問失敗? curl: (7) Fa
    的頭像 發(fā)表于 09-01 11:11 ?1.6w次閱讀
    <b class='flag-5'>K8S</b>集群<b class='flag-5'>服務(wù)</b>訪問失敗怎么辦 <b class='flag-5'>K8S</b>故障處理集錦

    K8S(kubernetes)學(xué)習(xí)指南

    K8S(kubernetes)學(xué)習(xí)指南
    發(fā)表于 06-29 14:14 ?0次下載

    服務(wù)質(zhì)量QoS(Quality of Service)在網(wǎng)絡(luò)中的重要性

    QoS(Quality of Service)即服務(wù)質(zhì)量,在網(wǎng)絡(luò)業(yè)務(wù)中可以通過保證傳輸?shù)膸?、降低傳輸時延、降低數(shù)據(jù)丟包率以及時延抖動等措施來提高服務(wù)質(zhì)量。QoS是一套用于管理和提高網(wǎng)
    的頭像 發(fā)表于 03-16 09:24 ?1579次閱讀
    <b class='flag-5'>服務(wù)質(zhì)量</b><b class='flag-5'>QoS</b>(Quality of Service)在網(wǎng)絡(luò)中的重要性

    k8s是什么意思?kubeadm部署k8s集群(k8s部署)|PetaExpres

    k8s是什么意思? kubernetes簡稱K8s,是一個開源的,用于管理云平臺中多個主機(jī)上的容器化的應(yīng)用,Kubernetes的目標(biāo)是讓部署容器化的應(yīng)用簡單并且高效(powerful
    發(fā)表于 07-19 13:14 ?1085次閱讀

    什么是K3sK8sK3sK8s有什么區(qū)別?

    Kubernetes,通常縮寫為 K8s,是領(lǐng)先的容器編排工具。該開源項(xiàng)目最初由 Google 開發(fā),幫助塑造了現(xiàn)代編排的定義。該系統(tǒng)包括了部署和運(yùn)行容器化系統(tǒng)所需的一切。
    的頭像 發(fā)表于 08-03 10:53 ?7150次閱讀

    k8s生態(tài)鏈包含哪些技術(shù)

    1. Apache APISIX Ingress 定義 ? 在 K8s 生態(tài)中,Ingress 作為表示 K8s 流量入口的一種資源,想要讓其生效,就需要有一個 Ingress Controller
    的頭像 發(fā)表于 08-07 10:56 ?1150次閱讀
    <b class='flag-5'>k8s</b>生態(tài)鏈包含哪些技術(shù)

    k8s云原生開發(fā)要求

    Kubernetes(K8s)云原生開發(fā)對硬件有一定要求。CPU方面,建議至少配備2個邏輯核心,高性能CPU更佳。內(nèi)存至少4GB,但8GB或更高更推薦。存儲需至少20-30GB可用空間,SSD提升
    的頭像 發(fā)表于 10-24 10:03 ?141次閱讀
    <b class='flag-5'>k8s</b>云原生開發(fā)要求

    混合云部署k8s集群方法有哪些?

    混合云部署k8s集群方法是首先需在本地與公有云分別建立K8s集群,并確保網(wǎng)絡(luò)連接。接著,配置kubeconfig文件連接兩集群,并安裝云服務(wù)插件以實(shí)現(xiàn)資源互通。然后,編寫Deployment文件部署應(yīng)用,并使用kubectl命令
    的頭像 發(fā)表于 11-07 09:37 ?61次閱讀