日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

啟用CPU Burst性能優化策略

受CPU Limit約束,容器在運行過程中可用的CPU資源會受到限制,當真實用量觸發上限時,內核會對其限流(Throttling),進而導致服務質量受損。CPU Burst功能能夠動態感知CPU Throttled現象并對容器參數進行自適應調節。在出現突發負載時,CPU Burst可以為容器臨時提供額外的CPU資源,緩解CPU限制帶來的性能瓶頸,以保障并提升應用(尤其是延遲敏感型應用)的服務質量。

說明

為了幫助您更好地理解本文檔并使用本功能,推薦您提前了解CFS Scheduler節點CPU管理策略等相關概念。

為什么需要啟用CPU Burst

Kubernetes集群使用CPU Limit資源約束機制,用于限制容器可以使用的最大CPU資源量,以確保了多個容器之間的資源分配的公平性,防止某個容器過度消耗CPU資源,從而影響其他容器的性能。

CPU是一種分時復用型資源,即多個進程或容器可以共享一個CPU時間片。容器配置了CPU Limit后,操作系統內核會根據CFS (Completely Fair Scheduler) 來控制容器在每個時間周期內(cpu.cfs_period_us)的CPU使用量(cpu.cfs_quota_us)。例如,如果一個容器的CPU Limit = 4,操作系統內核會限制該容器在每段時間周期內(通常是100 ms)最多使用400 ms的CPU時間片。

功能優勢

CPU使用率是衡量容器運行狀態的關鍵指標,集群管理員通常會參考該指標來配置容器的CPU Limit。相較于常用的秒級別指標,百毫秒級別下容器的CPU使用率往往呈現更為明顯的毛刺特征,展示出更多瞬時變化。以下圖為例,如果以秒級別為單位(紫色折線),CPU用量明顯少于4核;而如果以毫秒級別為單位(綠色折線),那么容器CPU用量在部分時段會超出4核,若將CPU Limit配置為4核,就會導致線程因CPU限流而被操作系統掛起。

原理說明

下方圖片展示了在一臺4核節點上,一個CPU Limit = 2的Web服務容器在收到請求(req)后,各個線程(Thread)的CPU資源分配情況。左圖為常規情況,右圖為開啟CPU Burst后的情況。

即使容器在最近1s內整體的CPU使用率較低,但受CPU限流的影響,Thread 2仍需要等待下一個時間周期才能繼續將req 2處理完成,導致請求的響應時延(RT)變大。這是容器RT長尾問題的一個重要原因。ack-slo-manager example.png

啟用CPU Burst功能后,容器可以在空閑時積累一些CPU時間片,用于滿足突發時的資源需求,進而可以提升容器性能,降低延遲指標。CPU Burst.png

除了上述場景之外,CPU Burst還適用于容器CPU資源需求突增的場景。例如,當業務流量突然上漲時,ack-koordinator可以在保障整機負載水位安全的前提下,在秒級別內快速解決CPU的資源瓶頸。

說明

ack-koordinator的調節僅涉及節點cgroup參數中的cfs quota,并不會修改Pod Spec的CPU Limit字段。

使用場景

CPU Burst功能的典型使用場景如下。

  • 容器在大多數時間內CPU資源用量低于設置的CPU Limit,但容器CPU Throttled仍然時常出現,影響應用性能表現。開啟CPU Burst可以讓容器在突發負載時使用積累的時間片,有效解決CPU Throttled限流問題,提升應用服務質量。

  • 容器應用在啟動加載階段CPU資源消耗較高,但在加載完成并進入穩定運行狀態后,其CPU用量會降到一個較低且穩定的水平。開啟CPU Burst后,您無需為容器配置過高的CPU Limit,即可讓應用在啟動階段使用更多時間片,確保應用能夠快速啟動。

費用說明

ack-koordinator組件本身的安裝和使用是免費的,不過需要注意的是,在以下場景中可能產生額外的費用:

  • ack-koordinator是非托管組件,安裝后將占用Worker節點資源。您可以在安裝組件時配置各模塊的資源申請量。

  • ack-koordinator默認會將資源畫像、精細化調度等功能的監控指標以Prometheus的格式對外透出。若您配置組件時開啟了ACK-Koordinator開啟Prometheus監控指標選項并使用了阿里云Prometheus服務,這些指標將被視為自定義指標并產生相應費用。具體費用取決于您的集群規模和應用數量等因素。建議您在啟用此功能前,仔細閱讀阿里云Prometheus計費說明,了解自定義指標的免費額度和收費策略。您可以通過賬單和用量查詢,監控和管理您的資源使用情況。

前提條件

配置說明

您可以通過Pod Annotation為指定的Pod開啟CPU Burst功能,也可以通過ConfigMap在集群或命名空間維度開啟。

通過Annotation為指定Pod開啟

通過Pod YAML的metadata字段下配置CPU Burst策略的Annotation,針對指定Pod生效。

說明

如需在工作負載(例如Deployment)中配置,請在template.metadata字段下配置Pod對應的Annotation。

annotations:
  # 設置為auto,開啟該Pod的CPU Burst功能。
  koordinator.sh/cpuBurst: '{"policy": "auto"}'
  # 設置為none,關閉該Pod的CPU Burst功能。
  koordinator.sh/cpuBurst: '{"policy": "none"}'

通過ConfigMap在集群維度開啟

通過ConfigMap配置的CPU Burst策略默認針對全集群生效。

  1. 使用以下ConfigMap示例,創建configmap.yaml文件。

    apiVersion: v1
    data:
      cpu-burst-config: '{"clusterStrategy": {"policy": "auto"}}'
      #cpu-burst-config: '{"clusterStrategy": {"policy": "cpuBurstOnly"}}'
      #cpu-burst-config: '{"clusterStrategy": {"policy": "none"}}'
    kind: ConfigMap
    metadata:
      name: ack-slo-config
      namespace: kube-system
  2. 查看命名空間kube-system下是否存在ConfigMapack-slo-config

    • 存在:使用PATCH方式進行更新,避免干擾ConfigMap中其他配置項。

      kubectl patch cm -n kube-system ack-slo-config --patch "$(cat configmap.yaml)
    • 不存在:執行以下命令進行創建ConfigMap。

      kubectl apply -f configmap.yaml

通過ConfigMap在Namespace維度開啟

通過指定Namespace,為部分Pod配置CPU Burst策略時,針對指定命名空間生效。

  1. 使用以下ConfigMap示例,創建configmap.yaml文件。

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: ack-slo-pod-config
      namespace: koordinator-system # 首次使用時需要先手動創建該Namespace。
    data:
      # 單獨開啟或關閉部分Namespace的Pod。
      cpu-burst: |
        {
          "enabledNamespaces": ["allowed-ns"], 
          "disabledNamespaces": ["blocked-ns"]
        }
      # 為allowed-ns命名空間下的所有Pod開啟了CPU Burst策略,對應policy為auto。
      # 為blocked-ns命名空間下的所有Pod關閉了CPU Burst策略,對應policy為none。
  2. 查看命名空間kube-system下是否存在ConfigMapack-slo-config

    • 存在:使用PATCH方式進行更新,避免干擾ConfigMap中其他配置項。

      kubectl patch cm -n kube-system ack-slo-config --patch "$(cat configmap.yaml)
    • 不存在:執行以下命令創建ConfigMap。

      kubectl apply -f configmap.yaml

操作步驟

本示例以一個Web服務型應用為例,展示開啟CUP Burst策略前后的訪問延遲情況,驗證CPU Burst策略帶來的優化效果。

驗證步驟

  1. 使用以下示例應用的YAML內容,創建名為apache-demo.yaml文件。

    在Pod對象的metadata字段下配置Annotation,為Pod單獨開啟CPU Burst策略。

    apiVersion: v1
    kind: Pod
    metadata:
      name: apache-demo
      annotations:
        koordinator.sh/cpuBurst: '{"policy": "auto"}'   # 開啟CPU Burst策略。
    spec:
      containers:
      - command:
        - httpd
        - -D
        - FOREGROUND
        image: registry.cn-zhangjiakou.aliyuncs.com/acs/apache-2-4-51-for-slo-test:v0.1
        imagePullPolicy: Always
        name: apache
        resources:
          limits:
            cpu: "4"
            memory: 10Gi
          requests:
            cpu: "4"
            memory: 10Gi
      nodeName: $nodeName # 修改為實際的節點名稱。
      hostNetwork: False
      restartPolicy: Never
      schedulerName: default-scheduler
  2. 執行以下命令,部署Apache HTTP Server作為目標評測應用。

    kubectl apply -f apache-demo.yaml
  3. 使用wrk2壓測工具發送請求。

    # 下載wrk2開源測試工具并解壓安裝。具體操作,請參見https://github.com/giltene/wrk2。
    # 當前在Apache鏡像配置中開啟了Gzip壓縮模塊,用于模擬服務端處理請求的計算邏輯。
    # 執行發壓命令,注意修改目標應用的IP地址。
    ./wrk -H "Accept-Encoding: deflate, gzip" -t 2 -c 12 -d 120 --latency --timeout 2s -R 24 http://$target_ip_address:8010/static/file.1m.test
    說明
    • 修改命令中的目標地址為Apache Pod的IP地址。

    • 通過修改-R參數來調節發送端的QPS壓力。

結果分析

以下數據分別展示了Alibaba Cloud Linux和社區CentOS在CPU Burst策略開啟前后的表現情況。

  • 全部關閉表示CPU Burst策略為none

  • 全部開啟表示CPU Burst策略為auto

重要

以下數據僅為理論值,實際請以您的操作環境為準。

Alibaba Cloud Linux

全部關閉

全部開啟

apache RT-p99

107.37 ms

67.18 ms(-37.4%)

CPU Throttled Ratio

33.3%

0%

Pod CPU平均利用率

31.8%

32.6%

CentOS

全部關閉

全部開啟

apache RT-p99

111.69 ms

71.30 ms (-36.2%)

CPU Throttled Ratio

33%

0%

Pod CPU平均利用率

32.5%

33.8%

由以上對比數據可知:

  • 開啟CPU Burst能力后,應用的RT指標的p99分位值有明顯優化。

  • 對開啟CPU Burst能力后,CPU Throttled情況大幅減少,而同時Pod整體CPU利用率基本保持不變。

高級參數配置

CPU Burst策略的高級配置參數支持在ConfigMap參數中配置,也支持在Pod Annotation中配置。對于同時在Pod Annotation和ConfigMap配置的參數,Pod Annotation配置優先級大于ConfigMap配置。如果Pod Annotation中沒有對應配置,ack-koordinator會進一步參考Namespace維度的ConfigMap配置;如果Namespace維度也沒有對應配置,ack-koordinator會以集群維度的ConfigMap配置為準。

配置示例如下。

# ConfigMap ack-slo-config樣例。
data:
  cpu-burst-config: |
    {
      "clusterStrategy": {
        "policy": "auto",
        "cpuBurstPercent": 1000,
        "cfsQuotaBurstPercent": 300,
        "sharePoolThresholdPercent": 50,
        "cfsQuotaBurstPeriodSeconds": -1
      }
    }

# Pod Annotation樣例。
  koordinator.sh/cpuBurst: '{"policy": "auto", "cpuBurstPercent": 1000, "cfsQuotaBurstPercent": 300, "cfsQuotaBurstPeriodSeconds": -1}'

以下為CPU Burst策略的相關高級參數:

說明

AnnotationConfigMap兩列分別代表是否允許通過Pod Annotation或ConfigMap進行配置。其中,對代表支持,錯代表不支持。

參數

類型

說明

Annotation

ConfigMap

policy

string

  • none(默認值):關閉CPU Burst策略,相關參數會被恢復為創建初始值。

  • cpuBurstOnly:僅開啟Alibaba Cloud Linux內核級別的CPU Burst彈性。

  • cfsQuotaBurstOnly:僅開啟CFS quota的自動彈性能力,支持所有內核版本。

  • auto:自適應開啟以上兩種彈性能力,包括Alibaba Cloud Linux內核特性,以及CFS quota的自動彈性能力。

對

對

cpuBurstPercent

int

默認值為1000,單位為百分比。

Alibaba Cloud Linux內核級別的CPU Burst彈性,表示相較于CPU Limit,CPU Burst放大的百分比。對應Pod的cgroup參數cpu.cfs_burst_us。更多信息,請參見在cgroup v1接口開啟CPU Burst功能

例如,按默認配置,CPU Limit = 1對應的cpu.cfs_quota_us為100,000,cpu.cfs_burst_us會放大10倍為1,000,000。

對

對

cfsQuotaBurstPercent

int

默認值為300,單位為百分比。

開啟CFS quota彈性能力時,Pod的cgroup參數(cpu.cfs_quota_us)可上調的最大比例,默認為3倍。

對

對

cfsQuotaBurstPeriodSeconds

int

默認值為-1,表示不限制,單位為秒。

開啟CFS quota彈性能力時,Pod可以按上限(cfsQuotaBurstPercent)持續消耗CPU的時間限制。單個Pod超出時限后,其已經上調的cgroup參數(cpu.cfs_quota_us)會被恢復為原始值,其他Pod不受影響。

對

對

sharePoolThresholdPercent

int

默認值為50,單位為百分比。

開啟CFS quota彈性能力時,節點CPU使用率的安全水位閾值。超出閾值后,節點中所有已經上調的Pod的cgroup參數(cpu.cfs_quota_us)會被恢復為創建初始值。

錯

對

說明
  • 當您開啟CFS quota的自動調整時(policy設置為cfsQuotaBurstOnlyauto),Pod的CPU Limit在節點上對應的參數(cpu.cfs_quota_us)會隨CPU Throttled情況而動態調整。

  • 在對Pod進行壓測時,建議您同時保持對Pod CPU用量的觀察,或者臨時關閉CFS quota的自動調整(policy設置為cpuBurstOnlynone),以便在生產環境保持更好的資源彈性。

FAQ

當前已通過ack-slo-manager的舊版本協議使用了CPU Burst功能,升級為ack-koordinator后是否繼續支持?

舊版本的Pod協議要求在Annotation中填寫alibabacloud.com/cpuBurstack-koordinator對此舊版本協議完全兼容,您可將組件無縫升級至新版本。

說明

ack-koordinator對舊版本協議的兼容期限截止至2023年07月30日。強烈建議您將原協議資源字段及時升級到新版本。

ack-koordinator對各版本協議的適配如下。

ack-koordinator版本

alibabacloud.com協議

koordinator.sh協議

≥0.2.0

支持

不支持

≥0.8.0

支持

支持

開啟CPU Burst配置后,為什么Pod仍有CPU Throttled現象出現?

通常會有以下幾個原因,您可以參考以下說明進行調整。

  • 配置格式錯誤,導致CPU Burst策略沒有生效,請參見高級參數配置修改并驗證。

  • CPU利用率達到cfsQuotaBurstPercent配置的上限時,由于CPU資源不足,仍會出現CPU Throttled現象。

    建議您根據應用實際需求情況調整Reqeuest和Limit值。

  • CPU Burst策略會調整Pod的兩個cgroup參數:cpu.cfs_quota_uscpu.cfs_burst_us,詳情請參見高級參數配置。其中,cpu.cfs_quota_usack-koordinator感知到CPU Throttled后才會進行設置,存在少許延遲;而cpu.cfs_burst_us直接參考配置進行設置,效果更靈敏。

    建議您搭配Alibaba Cloud Linux操作系統使用,效果更佳。

  • CPU Burst策略在調整cpu.cfs_quota_us時會有保護機制,即整機安全水位閾值配置的sharePoolThresholdPercent。當整機利用率過高時,為了避免單個Pod產生更多干擾,cpu.cfs_quota_us會被重置為初始值。

    建議您結合自身應用的實際情況,合理設置整機安全水位閾值,避免因整機利用率過高而影響應用性能。

開啟CPU Burst策略是否必須使用Alibaba Cloud Linux操作系統?

ack-koordinator的CPU Burst策略適用于所有Alibaba Cloud Linux及CentOS開源內核。推薦您使用Alibaba Cloud Linux操作系統。借助Alibaba Cloud Linux內核特性,ack-koordinator可以提供更加細粒度的CPU彈性管理機制。更多信息,請參見在cgroup v1接口開啟CPU Burst功能