本文发布已超过一年。较旧的文章可能包含过时的内容。请检查页面中的信息自发布以来是否已变得不正确。

为 Azure 带来端到端 Kubernetes 测试(第 2 部分)

历史上,Kubernetes 测试由 Google 托管,在 Google Compute Engine (GCE) 和 Google Container Engine (GKE) 上运行 e2e 测试。实际上,提交队列的门控检查是这些测试平台上执行的测试的子集。联邦测试旨在通过使组织能够为各种平台托管测试作业并贡献测试结果以使 Kubernetes 项目受益,从而扩展测试覆盖率。Google 的 Kubernetes 测试团队和 SIG-Testing 的成员创建了一个 Kubernetes 测试历史仪表板,该仪表板发布所有联邦测试作业的结果(包括 Google 托管的作业)。

在这篇博文中,我们将描述如何扩展 Azure 的 e2e 测试作业,并展示如何为 Kubernetes 项目贡献一个联邦测试。

Azure 的端到端集成测试

在成功实施了 “开发发行版”脚本以自动化在 Azure 上部署 Kubernetes 之后,我们的下一个目标是运行 e2e 集成测试,并与 Kubernetes 社区分享结果。

我们通过在我们的私有 Jenkins 服务器中定义一个夜间作业,自动化了在 Azure 上执行 Kubernetes e2e 测试的工作流程。图 2 显示了使用 kube-up.sh 在 Azure 中运行的 Ubuntu 虚拟机上部署 Kubernetes,然后执行 e2e 测试的工作流程。测试完成后,作业会将测试结果和日志上传到 Google Cloud Storage 目录,格式可由 生成测试历史仪表板的脚本 处理。我们的 Jenkins 作业使用 hack/jenkins/e2e-runner.sh 和 hack/jenkins/upload-to-gcs.sh 脚本以正确的格式生成结果。

| Azure 上的 Kubernetes - 流程图 - 新页面.png | | 图 2 - 夜间测试作业工作流程 |

如何贡献一个 E2E 测试

在我们创建 Azure e2e 测试作业的过程中,我们与 SIG-Testing 的成员合作,找到了一种向 Kubernetes 社区发布结果的方法。这次合作的结果是文档和一个简化的流程,用于贡献来自联邦测试作业的结果。贡献 e2e 测试结果的步骤可以概括为 4 个步骤。

  1. 创建一个 Google Cloud Storage 存储桶,用于发布结果。
  2. 定义一个自动化作业来运行 e2e 测试。通过设置一些环境变量,hack/jenkins/e2e-runner.sh 会部署 Kubernetes 二进制文件并执行测试。
  3. 使用 hack/jenkins/upload-to-gcs.sh 上传结果。
  4. 通过提交一个拉取请求,修改 kubernetes/test-infra 中的几个文件,将结果整合到测试历史仪表板中。

联邦测试文档更详细地描述了这些步骤。运行 e2e 测试和上传结果的脚本简化了贡献新的联邦测试作业的工作。设置自动化测试作业和部署 Kubernetes 的适当环境的具体步骤留给读者自行选择。对于使用 Jenkins 的组织,GCE 和 GKE 测试的 jenkins-job-builder 配置可能会提供有用的示例。

回顾

Azure 上的 e2e 测试已经运行了几个星期。在此期间,我们在 Kubernetes 中发现了两个问题。Weixu Zhuang 立即发布了已合并到 Kubernetes master 分支中的修复程序。

第一个问题发生在我们想使用 SaltStack 在 Azure 上使用 Ubuntu VM 启动 Kubernetes 集群时。一个提交 (07d7cfd3) 修改了 OpenVPN 证书生成脚本,以使用一个仅由 cluster/ubuntu 中的脚本初始化的变量。证书生成脚本对参数存在性的严格检查导致使用该脚本的其他平台失败(例如,我们对 Azure 的支持更改)。我们提交了一个 拉取请求,修复了该问题,通过使用默认值初始化该变量,使证书生成脚本在所有平台类型上更加健壮。

第二个 拉取请求清理了 Daemonset 单元测试文件中未使用的导入。导入语句破坏了 golang 1.4 的单元测试。我们的夜间 Jenkins 作业帮助我们找到了这个错误,我们迅速推送了一个修复程序。

结论和未来工作

为 Azure 上的 Kubernetes 添加夜间 e2e 测试作业有助于定义向 Kubernetes 项目贡献联邦测试的流程。在工作过程中,当我们的 Azure 测试作业发现兼容性问题时,我们也看到了将测试覆盖率扩展到更多平台的直接好处。

我们要感谢 Aaron Crickenberger、Erick Fejta、Joe Finney 和 Ryan Hutchinson 在将我们的 Azure e2e 测试结果整合到 Kubernetes 测试历史中所提供的帮助。如果您想参与测试以创建稳定、高质量的 Kubernetes 版本,请加入我们 Kubernetes 测试 SIG (sig-testing)