前言
Kubernetes作為當下應用最廣泛的容器集群管理系統(tǒng),為容器化的應用提供資源調(diào)度、部署運行、滾動升級、擴容縮容等功能。容器集群管理給業(yè)務帶來了便利,但是隨著業(yè)務的不斷增長,應用數(shù)量可能會發(fā)生爆發(fā)式的增長,這都對 Kubernenetes 集群的快速擴縮容和大規(guī)模大壓力下的集群管理等能力提出了更高的要求。
測試工具介紹
kubemark 是 K8s 官方給出的性能測試工具,能夠不受任何資源限制,模擬出一個大規(guī)模 K8s 集群。kubemark可以將在external 集群運行的hollowpod,注冊成為測試集群的hollow node,實現(xiàn)增加node規(guī)模的作用。 該hollow node具備被測試集群調(diào)度和運行pod的能力。
kubemark cluster為測試集群
k8s cluster為運行hollowpod的擴展集群
clusterloader2是一個自帶yaml的kubernetes負載測試工具,位于perf-tests工具集項目之中,是官方的k8s可擴展性和性能測試框架。目前可用的指標為
APIAvailabilityMeasurement
APIResponsivenessPrometheusSimple
APIResponsivenessPrometheus
CPUProfile
EtcdMetrics
MemoryProfile
MetricsForE2E
PodStartupLatency
ResourceUsageSummary
SchedulingMetrics
SchedulingThroughput
Timer
WaitForControlledPodsRunning
WaitForRunningPods
Sleep
測試目標
大規(guī)模K8s集群重要的特性是可擴展性和性能穩(wěn)定性。我們可以使用SLI(Service Level indicators)和 SLO(Service Level Objectives)來定義集群測試的標準和目標。
Kubernetes社區(qū)定義多種SLIs/SLOs以便衡量集群的服務質(zhì)量,在本文的測試中主要關注以下幾點:
測試方案
kubernetes管理面采用3 master進行部署,etcd采用ssd進行存取數(shù)據(jù)。clusterloader2將發(fā)起density負載測試。prometheus將對集群指標進行采集,通過grafana進行更好的數(shù)據(jù)展示。
受限于External Cluster的資源限制,本次我們將進行100節(jié)點、200節(jié)點、500節(jié)點的測試,觀察集群性能是否達標。
測試環(huán)境信息
1、Kubernetes版本與規(guī)格
采用華云云原生軟件上的Kubernetes v1.18 版本,集群采用 3 master 節(jié)點和模擬 node節(jié)點。
2、Master節(jié)點配置
CPU: 32C
MEMORY: 125G
ETCD DISK : Type:SSD,Size:120GB
3、External cluster配置: 8C16G * 3
4、參數(shù)調(diào)優(yōu)
kubelet參數(shù)默認情況下,最大pod數(shù)量為110。太小會導致模擬時每個節(jié)點的pod數(shù)量有限。
測試結果
分別進行100節(jié)點、200節(jié)點和500節(jié)點規(guī)模性能測試,其最大峰值時數(shù)據(jù)如下
1 Mutating API call latency(threshold=1s)
2 Read-only API call latency(scope=cluster, threshold=30s)
3 PodStartupLatency
總結
本文介紹了大規(guī)模 Kubernetes集群的測試方法,并設計測試方案和測試目標對模擬的大規(guī)模 K8s 集群進行了多輪的測試。
在華云云原生集群上,Kubernetes 控制面的API調(diào)用延遲和Pod啟動延遲均維持在較低值,符合Kubernetes社區(qū)的SLIs/SLOs指標,華云云原生集群能夠穩(wěn)定支持和管理大規(guī)模節(jié)點。