kubernetes test SIG组相关能力梳理

Posted by Shi Hai's Blog on June 12, 2023

提供的服务及相关能力:

  • 项目CI和工作流自动化工具:prow、tide;
  • 支持规划化项目CI的基础设施:boskos、ghproxy、greenhouse;
  • 测试工件的提取、展示和分析: gubernator、kettle、testgrid、triage;
  • 任务配置管理并确保它们使用一致的流程:job configs、kubetest;
  • 方便github的配置管理:peribolos、label_sync;
  • 方便k8s本地测试:greenhouse、kind;

k8s测试基础设施(test-infra)的主要项目清单:

从PR触发测试执行的完整流程:

k8s test-infra代码仓

一、自动化

prow

用途:基于k8s的CI/CD系统。
主要的组件清单及功能:

  • Crier: 用于报告prowjobs的状态,现在已有的reporter:Gerrit reporter、Pubsub reporter、GitHub reporter、Slack reporter,当然你也可以扩展reporter;
  • Deck: 在prow页面上展示正在运行或最近运行的jobs;
  • prow-controller-manager:管理在k8s中运行的作业执行和生命周期;
  • Tide:管理Github的PR,可以对PR进行合并;
  • Horologium: 创建周期性任务;
  • Sinker: TBD;

prow status汇总信息图如下所示: Prow Status

kubetest1/2

用途: kubetest是一个部署k8s集群并能运行端到端测试,kubetest已经被kubetest2替代。详细文档
k8s中的e2e测试建立在GinkgoGomega之上,该行为驱动开发测试框架(BDD)提供了很多特性。 构建k8s、启动cluster、执行测试、清理所有资源,可以使用这些命令:

# 构建k8s
kubetest2 gce --build --legacy-mode
# 执行测试
kubetest2 gce --gcp-project <project> --up
kubetest2 gce --test ginkgo -- --focus-regex "\[Feature:Performance\]"
# 清理
kubetest2 gce --gcp-project <project> --down

一个nodepool e2e测试用例,具体测试代码块,如下所示:

var _ = SIGDescribe("GKE node pools [Feature:GKENodePool]", func() {

	f := framework.NewDefaultFramework("node-pools")
	f.NamespacePodSecurityEnforceLevel = admissionapi.LevelPrivileged

	ginkgo.BeforeEach(func() {
		e2eskipper.SkipUnlessProviderIs("gke")
	})

	ginkgo.It("should create a cluster with multiple node pools [Feature:GKENodePool]", func(ctx context.Context) {
		framework.Logf("Start create node pool test")
		testCreateDeleteNodePool(ctx, f, "test-pool")
	})
})

个人遗留问题,TBD:这里的实际用例执行为什么用的是命令行去触发?是用户接触的是命令行模式?还是其他什么原因?

boskos

用途:资源管理服务,为测试提供干净的GCP项目或者k8s集群。 Boskos支持两种资源类型:静态资源、动态资源。

---
resources:
  # Static
  - type: "aws-account"
    state: free
    names:
    - "account1"
    - "account2"
  # Dynamic
  - type: "aws-cluster"
    state: dirty
    min-count: 1
    max-count: 2
    lifespan: 48h
    needs:
      aws-account: 1
    config:
      type: AWSClusterCreator
      content: "..."

gopherage

用途:go覆盖率工具,并且可以转换为testgrid兼容的junit。

二、可视化

testgrid

用途:用于在网格中查看测试结果。
k8s的testgrid实例可以查看此链接,现在主要的代码都归档于GCP group中。 呈现的结果图如下所示:

三、本地测试

kind

TBD

四、参考文献