K3s 資源分析

2022-08-19 09:23 更新

K3s資源分析

本節(jié)介紹了為確定 K3s 的最低資源需求,而進(jìn)行的測(cè)試結(jié)果。

結(jié)果概述如下:

組件 處理器 最小 CPU Kine/SQLite 的最小內(nèi)存 嵌入式 ETCD 的最小內(nèi)存
具有工作負(fù)載的 K3s server Intel(R) Xeon(R) Platinum 8124M CPU, 3.00 GHz 10% of a core 768 M 896 M
具有單個(gè) agent 的 K3s 集群 Intel(R) Xeon(R) Platinum 8124M CPU, 3.00 GHz 10% of a core 512 M 768 M
K3s agent Intel(R) Xeon(R) Platinum 8124M CPU, 3.00 GHz 5% of a core 256 M 256 M
具有工作負(fù)載的 K3s server Pi4B BCM2711, 1.50 GHz 20% of a core 768 M 896 M
具有單個(gè) agent 的 K3s 集群 Pi4B BCM2711, 1.50 GHz 20% of a core 512 M 768 M
K3s agent Pi4B BCM2711, 1.50 GHz 10% of a core 256 M 256 M

資源測(cè)試的范圍

資源測(cè)試的目的是為了解決以下問(wèn)題:

  • 在單節(jié)點(diǎn)集群上,確定運(yùn)行整個(gè) K3s server 堆棧所應(yīng)預(yù)留的 CPU、內(nèi)存和 IOPs 的合法最小值,假設(shè)真正的工作負(fù)載將部署在集群上。
  • 在 agent(worker)節(jié)點(diǎn)上,確定應(yīng)該為 Kubernetes 和 K3s 控制平面組件(kubelet 和 k3s agent)預(yù)留的 CPU、內(nèi)存和 IOPs 的合法最小值。

基準(zhǔn)測(cè)試包含的組件

測(cè)試的組件有:

  • 已啟用所有打包組件的 K3s 1.19.2
  • Prometheus + Grafana 監(jiān)控堆棧
  • Kubernetes PHP Guestbook 應(yīng)用示例

這些是一個(gè)穩(wěn)定系統(tǒng)的基準(zhǔn)數(shù)據(jù),只使用 K3s 打包的組件(Traefik Ingress,Klipper lb,local-path 存儲(chǔ)),運(yùn)行一個(gè)標(biāo)準(zhǔn)的監(jiān)控棧(Prometheus 和 Grafana)和 Guestbook 示例應(yīng)用程序。

包括 IOPS 在內(nèi)的資源僅適用于 Kubernetes 數(shù)據(jù)存儲(chǔ)和控制平面,不包括系統(tǒng)級(jí)管理 agent 或日志記錄、容器鏡像管理或任何特定工作負(fù)載要求的開(kāi)銷(xiāo)。

方法

使用獨(dú)立的 Prometheus v2.21.0 實(shí)例,通過(guò) apt 安裝的?prometheus-node-exporter?來(lái)收集主機(jī) CPU、內(nèi)存和磁盤(pán) IO 統(tǒng)計(jì)數(shù)據(jù)。

?systemd-cgtop?用于抽查 systemd cgroup 級(jí)別的 CPU 和內(nèi)存利用率。?system.slice/k3s.service?跟蹤 K3s 和 containerd 的資源利用率情況,而單個(gè) pod 則在?kubepods?層次結(jié)構(gòu)下。

使用集成到 server 和 agent 進(jìn)程中的 kubelet exporter,從 ?process_resident_memory_bytes?和 ?go_memstats_alloc_bytes ?指標(biāo)中收集了額外的詳細(xì) K3s 內(nèi)存利用率數(shù)據(jù)。

環(huán)境

OS: Ubuntu 20.04 x86_64, aarch64

硬件:

  • AWS c5d.xlarge - 4 core, 8 GB RAM, NVME SSD
  • Raspberry Pi 4 Model B - 4 core, 8 GB RAM, Class 10 SDHC

基準(zhǔn)資源需求

本節(jié)捕獲了確定 K3s agent、帶工作負(fù)載的 K3s server 和帶一個(gè) agent 的 K3s server 的最低資源需求的測(cè)試結(jié)果。

具有工作負(fù)載的 K3s server

這些是對(duì)單節(jié)點(diǎn)集群的要求,其中 K3s server 與工作負(fù)載共享資源。

對(duì) CPU 的要求是:

所需資源 測(cè)試處理器
10% of a core Intel(R) Xeon(R) Platinum 8124M CPU, 3.00 GHz
20% of a core Low-power processor such as Pi4B BCM2711, 1.50 GHz

IOPS 和內(nèi)存的要求是:

測(cè)試數(shù)據(jù)存儲(chǔ) IOPS KiB/sec 延時(shí) RAM
Kine/SQLite 10 500 < 10 ms 768 M
Embedded etcd 50 250 < 5 ms 896 M

具有單個(gè) agent 的 K3s 集群

這些是 K3s 集群的基本要求,它有一個(gè) K3s server 節(jié)點(diǎn)和一個(gè) K3s agent,但沒(méi)有工作負(fù)載。

對(duì) CPU 的要求是:

所需資源 測(cè)試處理器
10% of a core Intel(R) Xeon(R) Platinum 8124M CPU, 3.00 GHz
20% of a core Pi4B BCM2711, 1.50 GHz

IOPS 和內(nèi)存的要求是:

測(cè)試數(shù)據(jù)存儲(chǔ) IOPS KiB/sec 延時(shí) RAM
Kine/SQLite 10 500 < 10 ms 512 M
Embedded etcd 50 250 < 5 ms 768 M

K3s Agent

對(duì) CPU 的要求是:

所需資源 測(cè)試處理器
5% of a core Intel(R) Xeon(R) Platinum 8124M CPU, 3.00 GHz
10% of a core Pi4B BCM2711, 1.50 GHz

需要 256M 的內(nèi)存。

分析

本節(jié)介紹了對(duì) K3s server 和 agent 利用率產(chǎn)生最大影響的因素,以及如何保護(hù)集群數(shù)據(jù)存儲(chǔ)免受 agent 和工作負(fù)載的干擾。

影響資源利用率的因素

K3s server 的利用率數(shù)據(jù)主要是由支持 Kubernetes 數(shù)據(jù)存儲(chǔ)(kine 或 etcd)、API Server、Controller-Manager 和 Scheduler 控制,以及實(shí)現(xiàn)系統(tǒng)狀態(tài)變化所需的任何管理任務(wù)所驅(qū)動(dòng)。給 Kubernetes 控制平面帶來(lái)額外負(fù)載的操作,如創(chuàng)建/修改/刪除資源,將導(dǎo)致暫時(shí)的利用率上升。使用大量使用 Kubernetes 數(shù)據(jù)存儲(chǔ)的 operators 或應(yīng)用程序(如 Rancher 或其他 operators 類(lèi)型的應(yīng)用程序)將增加 server 的資源需求。通過(guò)添加額外的節(jié)點(diǎn)或創(chuàng)建許多集群資源來(lái)擴(kuò)展集群,將增加 server 的資源需求。

K3s agent 的利用率數(shù)據(jù)主要是由支持容器生命周期管理控制驅(qū)動(dòng)的。涉及管理鏡像、提供存儲(chǔ)或創(chuàng)建/銷(xiāo)毀容器的操作將導(dǎo)致利用率的暫時(shí)上升。拉取鏡像通常會(huì)影響 CPU 和 IO,因?yàn)樗鼈兩婕皩㈢R像內(nèi)容解壓到磁盤(pán)。如果可能的話(huà),工作負(fù)載存儲(chǔ)(pod 臨時(shí)存儲(chǔ)和卷)應(yīng)該與 agent 組件(/var/lib/rancher/k3s/agent)隔離,以確保不會(huì)出現(xiàn)資源沖突。

防止 agent 和工作負(fù)載干擾集群數(shù)據(jù)存儲(chǔ)

在 server 節(jié)點(diǎn)運(yùn)行工作負(fù)載 pod 時(shí),應(yīng)確保 agent 和工作負(fù)載 IOPS 不干擾數(shù)據(jù)存儲(chǔ)。

最好的辦法是將 server 組件(/var/lib/rancher/k3s/server)與 agent 組件(/var/lib/rancher/k3s/agent)放在不同的存儲(chǔ)介質(zhì)上,后者包括 containerd 鏡像存儲(chǔ)。

工作負(fù)載存儲(chǔ)(pod 臨時(shí)存儲(chǔ)和卷)也應(yīng)該與數(shù)據(jù)存儲(chǔ)隔離。

如果不能滿(mǎn)足數(shù)據(jù)存儲(chǔ)的吞吐量和延遲要求,可能會(huì)導(dǎo)致控制平面的延遲響應(yīng)或控制平面無(wú)法維持系統(tǒng)狀態(tài)。


以上內(nèi)容是否對(duì)您有幫助:
在線(xiàn)筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)