status和struct区别

性能测试是开发工作中不可或缺的一环,旨在评估服务的性能表现。对于如何进行性能测试,主要有两种常见方式:一是通过编码完成,编写大量脚本,使用完毕后即删除;二是基于平台,在平台定义的流程中进行。由于目标场景的复杂性,如特定的 workload、性能项目的观测、网络访问问题等,性能测试平台往往需要高成本才能满足不断变化的开发场景需求。
在云原生背景下,我们可以更好地解决这一问题。让我们先来看两个 yaml 文件:
首先是 `performance-test.yaml`,该文件描述了 K8s 中的操作流程,包括创建测试用的 Namespace、启动针对 Deployment 的创建效率和创建成功率的监控等。该文件的内容如下:
yaml
apiVersion: /v1alpha1
kind: Beidou
metadata:
name: performance
namespace: beidou
...
接下来是 `basic-1-pod-deployment.yaml`,该文件描述了使用的 workload 模板。
yaml
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: basic-1-pod
...
执行性能测试时,只需通过一个命令行工具执行 `performance-test.yaml` 文件:
bash
$ beidou server -c ~/.kube/config services/performance-test.yaml
执行效果会输出每个 Deployment 创建耗时、所有 Deployment 创建耗时的 TP95 值以及每个 Deployment 是否创建成功等 metrics。这些 metrics 按照 Prometheus 标准输出,可以被 Prometheus server 收集并展示在 Grafana 上。
核心实现详解
CRD(Custom Resource Definition)设计是阿里云容器服务团队实现云原生功能的一种重要方式。下面我们将详细介绍其中的一个设计实例及其核心实现流程。
设计概览:
我们定义了一个名为“Beidou”的CRD,用于描述服务相关的内容。其包含的主要字段有TypeMeta、ObjectMeta、Spec、Status等。其中Spec部分包含了Steps、References等子字段,用于描述具体的操作步骤和引用关系。
核心类型定义:
在Beidou的设计中,我们定义了一些关键的类型,如BeidouType、BeidouStep、BeidouOperation等。这些类型用于描述操作类型、步骤内容等。还定义了一些辅助类型,如BeidouArg、BeidouReference等,用于描述参数和引用关系。
核心流程:
在Beidou的核心流程中,我们实现了两个主要函数:ExecSteps和ExecOperation。ExecSteps函数用于执行一系列步骤,包括处理DeploymentCreationEfficiency等操作。ExecOperation函数则用于执行具体的操作,如任务执行。根据操作类型的不同,会调用不同的执行函数,如ExecTask和ExecTaskWithRefer。
操作原语实现示例:
作为操作原语的一个示例,PodAnnotations是用于检查Pod的注解是否符合预期的函数。该函数会从Kubernetes集群中获取指定命名空间的Pod列表,并检查每个Pod的注解是否满足要求。
项目进展与后续计划:
目前,阿里云容器服务团队已经实现了Beidou的初版,并用于部分云产品的内部性能测试和回归测试,显著提高了工作效率。这种在yaml中编程的方式,体现了云原生场景下的声明式操作,也是对声明式服务的一种实践。对于常规工作场景中的重复编码或重复操作,可以考虑采用类似的方式进行优化。
欢迎大家对这样的服务形态和项目进行讨论,共同探讨这种模式的价值。我们还将继续探索和完善这种基于CRD的设计方式,以满足更多云原生场景下的需求。我们也关注微服务、Serverless、容器、Service Mesh等技术领域的发展,以及云原生的大规模落地实践。我们期待与更多云原生开发者共同探讨和进步。
