Kubernetes 新玩法:在 yaml 中编程


Kubernetes 新玩法:在 yaml 中编程
本文插图
引子
性能测试在日常的开发工作中是常规需求 , 用来摸底服务的性能 。
那么如何做性能测试?要么是通过编码的方式完成 , 写一堆脚本 , 用完即弃;要么是基于平台 , 在平台定义的流程中进行 。 对于后者 , 通常由于目标场景的复杂性 , 如部署特定的 workload、观测特定的性能项、网络访问问题等 , 往往导致性能测试平台要以高成本才能满足不断变化的开发场景的需求 。
在云原生的背景下 , 是否可以更好解决这种问题?
先看两个 yaml 文件:

  • performance-test.yaml 描述了在 K8s 中的操作流程:
1.创建测试用的 Namespace
2.启动针对 Deployment 创建效率和创建成功率的监控
3.下述动作重复 N 次:① 使用 workload 模板创建 Deployment;② 等待 Deployment 变为 Ready
4.删除测试用的 Namespace
  • basic-1-pod-deployment.yaml 描述使用的 workload 模板
performance-test.yaml :
apiVersion: aliyun.com/v1alpha1 kind: Beidou metadata: name: performance namespace: beidou spec: steps: - name: ''Create Namespace If Not Exits'' operations: - name: ''create namespace'' type: Task op: CreateNamespace args: - name: NS value: beidou - name: ''Monitor Deployment Creation Efficiency'' operations: - name: ''Begin To Monitor Deployment Creation Efficiency'' type: Task op: DeploymentCreationEfficiency args: - name: NS value: beidou - name: ''Repeat 1 Times'' type: Task op: RepeatNTimes args: - name: TIMES value: ''1'' - name: ACTION reference: id: deployment-operation - name: ''Delete namespace'' operations: - name: ''delete namespace'' type: Task op: DeleteNamespace args: - name: NS value: beidou - name: FORCE value: ''false'' references: - id: deployment-operation steps: - name: ''Prepare Deployment'' operations: - name: ''Prepare Deployment'' type: Task op: PrepareBatchDeployments args: - name: NS value: beidou - name: NODE_TYPE value: ebm - name: BATCH_NUM value: ''1'' - name: TEMPLATE value: ''./templates/basic-1-pod-deployment.yaml'' - name: DEPLOYMENT_REPLICAS value: ''1'' - name: DEPLOYMENT_PREFIX value: ''ebm'' - name: ''Wait For Deployments To Be Ready'' type: Task op: WaitForBatchDeploymentsReady args: - name: NS value: beidou - name: TIMEOUT value: ''3m'' - name: CHECK_INTERVAL value: ''2s''basic-1-pod-deployment.yaml:
apiVersion: apps/v1 kind: Deployment metadata: labels: app: basic-1-pod spec: selector: matchLabels: app: basic-1-pod template: metadata: labels: app: basic-1-pod spec: containers: - name: nginx image: registry-vpc.cn-hangzhou.aliyuncs.com/xxx/nginx:1.17.9 imagePullPolicy: Always resources: limits: cpu: 2 memory: 4Gi然后通过一个命令行工具执行 performance-test.yaml:
$ beidou server -c ~/.kube/config services/performance-test.yaml执行效果如下 (每个 Deployment 创建耗时 , 所有 Deployment 创建耗时的 TP95 值 , 每个 Deployment 是否创建成功):
Kubernetes 新玩法:在 yaml 中编程
本文插图
这些 metrics 是按照 Prometheus 标准输出 , 可以被 Prometheus server 收集走 , 再结合 Grafana 可以可视化展示性能测试数据 。


推荐阅读