智汇华云 | 如何进行大规模Kubernetes集群测试
前言
Kubernetes作为当下应用最广泛的容器集群管理系统,为容器化的应用提供资源调度、部署运行、滚动升级、扩容缩容等功能。容器集群管理给业务带来了便利,但是随着业务的不断增长,应用数量可能会发生爆发式的增长,这都对 Kubernenetes 集群的快速扩缩容和大规模大压力下的集群管理等能力提出了更高的要求。
测试工具介绍
kubemark 是 K8s 官方给出的性能测试工具,能够不受任何资源限制,模拟出一个大规模 K8s 集群。kubemark可以将在external 集群运行的hollowpod,注册成为测试集群的hollow node,实现增加node规模的作用。 该hollow node具备被测试集群调度和运行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
测试目标
大规模K8s集群重要的特性是可扩展性和性能稳定性。我们可以使用SLI(Service Level indicators)和 SLO(Service Level Objectives)来定义集群测试的标准和目标。
Kubernetes社区定义多种SLIs/SLOs以便衡量集群的服务质量,在本文的测试中主要关注以下几点:
测试方案
kubernetes管理面采用3 master进行部署,etcd采用ssd进行存取数据。clusterloader2将发起density负载测试。prometheus将对集群指标进行采集,通过grafana进行更好的数据展示。
受限于External Cluster的资源限制,本次我们将进行100节点、200节点、500节点的测试,观察集群性能是否达标。
测试环境信息
1、Kubernetes版本与规格
采用华云云原生软件上的Kubernetes v1.18 版本,集群采用 3 master 节点和模拟 node节点。
2、Master节点配置
CPU: 32C
MEMORY: 125G
ETCD DISK : Type:SSD,Size:120GB
3、External cluster配置: 8C16G * 3
4、参数调优
kubelet参数默认情况下,最大pod数量为110。太小会导致模拟时每个节点的pod数量有限。
测试结果
分别进行100节点、200节点和500节点规模性能测试,其最大峰值时数据如下
1 Mutating API call latency(threshold=1s)
2 Read-only API call latency(scope=cluster, threshold=30s)
3 PodStartupLatency
总结
本文介绍了大规模 Kubernetes集群的测试方法,并设计测试方案和测试目标对模拟的大规模 K8s 集群进行了多轮的测试。
在华云云原生集群上,Kubernetes 控制面的API调用延迟和Pod启动延迟均维持在较低值,符合Kubernetes社区的SLIs/SLOs指标,华云云原生集群能够稳定支持和管理大规模节点。