k8s集群可扩展性和性能SLI/SLO

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%

Reference:

Kubernetes scalability and performance SLIs/SLOs

你可能感兴趣的:(k8s集群可扩展性和性能SLI/SLO)