k8s集群可扩展性和性能SLI/SLO
2019-01-09 本文已影响0人
栗山海芋
k8s集群重要的特性是可扩展性和性能稳定性。参考k8s测试小组的文档,可以使用SLI(Service Level indicators)和 SLO(Service Level Objectives)来定义集群性能的衡量标准和集群性能要达到的目标。
SLI/SLO 需要满足如下特性:
- 必须是可测试的
- 必须是可以被用户理解的
SLO 类型
一般SLI是比较独立的,只用来定义测试什么以及怎样测试;而SLO会提供一个性能保证, 即在满足的集群环境中,集群性能可以获得保证。
一般有如下两类SLO
- 负载平稳状态下的SLO(Steady state SLO)
在负载平稳状态中,对集群做的所有操作,保证集群的行为满足SLO定义的要求。稳定状态的定义:
We define system to be in steady state when the cluster churn per second is <= 20, where
churn = #(Pod spec creations/updates/deletions) + #(user originated requests) in a given second
- 突发高负载下的SLO(Burst SLO)
在突发高负载的情况下,我们需要保证集群的稳定性。
环境
为了保证达到SLO定义的性能目标,集群部署环境需要满足如下要求:
- master规格: 16C32G
- 主etcd运行在master节点
- 事件保存在独立的etcd集群
- kubernets 版本至少在 x.y.z 以上
kubernetes SLI/SLO
以下是k8s集群要达到的服务质量目标(SLO),需要集群通过以下测试来保证性能的稳定性。
Steady state SLIs/SLOs
SLI | SLO |
---|---|
测试一段时间内k8s资源对象的 post/put/patch/delete api调用,观察api响应延时 | 99%的api延时 <= 500ms |
测试一段时间内k8s资源对象的 get/list api调用延时 | 99%的api延时: scope=resource: <= 1s, scope=namespace: <= 5s , scope=cluster: <= 30s |
测试无状态和可调度pod的启动延时,不包括拉取镜像和运行init容器的时间 | 99%的pod启动延时 <= 5s |
测试集群内service的访问延时(node之间网络延时) | node之间RTT值99% <= X |
测试集群内DNS域名解析延时 | 99%值 <= X |
Burst SLIs/SLOs
SLI | SLO |
---|---|
平均每个node启动30个pod,一共启动 30 * node_num 个pod所需要的时间 | 所有pod启动完成 <= X minutes |
Normal SLO
apiserver 进程的 cpu 使用率少于 70%