本文发表于一年多前。旧文章可能包含过时内容。请检查页面中的信息自发布以来是否已变得不正确。
将端到端 Kubernetes 测试带到 Azure(第 2 部分)
此前,Kubernetes 测试一直由 Google 托管,在 Google Compute Engine (GCE) 和 Google Container Engine (GKE) 上运行端到端测试。事实上,提交队列的门控检查是这些测试平台上执行的测试的一个子集。联合测试旨在通过使组织能够在各种平台上托管测试作业并贡献测试结果以惠及 Kubernetes 项目来扩展测试覆盖范围。Google 的 Kubernetes 测试团队和 SIG-Testing 的成员创建了一个 Kubernetes 测试历史仪表板,该仪表板发布了所有联合测试作业(包括 Google 托管的作业)的结果。
在这篇博文中,我们描述了如何扩展 Azure 的端到端测试作业,并展示了如何为 Kubernetes 项目贡献联合测试。
Azure 的端到端集成测试
成功实施 “开发发行版”脚本以自动化在 Azure 上部署 Kubernetes 后,我们的下一个目标是运行端到端集成测试并与 Kubernetes 社区分享结果。
我们通过在私有 Jenkins 服务器中定义一个夜间作业,实现了在 Azure 上执行 Kubernetes 端到端测试的工作流自动化。图 2 显示了使用 kube-up.sh 在 Azure 中运行的 Ubuntu 虚拟机上部署 Kubernetes,然后执行端到端测试的工作流。测试完成后,该作业将测试结果和日志上传到 Google Cloud Storage 目录,其格式可由生成测试历史仪表板的脚本处理。我们的 Jenkins 作业使用 hack/jenkins/e2e-runner.sh 和 hack/jenkins/upload-to-gcs.sh 脚本以正确的格式生成结果。
| | | 图 2 - 夜间测试作业工作流 |
如何贡献端到端测试
在创建 Azure 端到端测试作业的过程中,我们与 SIG-Testing 的成员合作,寻找一种向 Kubernetes 社区发布结果的方法。这次合作的结果是文档和贡献联合测试作业结果的简化流程。贡献端到端测试结果的步骤可以概括为 4 个步骤。
- 创建一个 Google Cloud Storage 存储桶以发布结果。
- 定义一个自动化作业来运行端到端测试。通过设置一些环境变量,hack/jenkins/e2e-runner.sh 部署 Kubernetes 二进制文件并执行测试。
- 使用 hack/jenkins/upload-to-gcs.sh 上传结果。
- 通过提交修改了 kubernetes/test-infra 中几个文件的拉取请求,将结果整合到测试历史仪表板中。
联合测试文档更详细地描述了这些步骤。运行端到端测试和上传结果的脚本简化了贡献新联合测试作业的工作。设置自动化测试作业和部署 Kubernetes 的适当环境的具体步骤留给读者自行决定。对于使用 Jenkins 的组织,GCE 和 GKE 测试的 jenkins-job-builder 配置可能会提供有用的示例。
回顾
Azure 上的端到端测试已经运行了几周。在此期间,我们在 Kubernetes 中发现了两个问题。庄玮旭立即发布了修复程序,并已合并到 Kubernetes 主分支。
第一个问题发生在我们想使用 SaltStack 在 Azure 上的 Ubuntu VM 上启动 Kubernetes 集群时。一个提交 (07d7cfd3) 修改了 OpenVPN 证书生成脚本,使其使用一个只由 cluster/ubuntu 中的脚本初始化的变量。证书生成脚本对参数存在的严格检查导致其他使用该脚本的平台(例如我们为支持 Azure 所做的更改)失败。我们提交了一个修复此问题的拉取请求,通过使用默认值初始化该变量,使证书生成脚本在所有平台类型上更加健壮。
第二个拉取请求清除了 Daemonset 单元测试文件中未使用的导入。该导入语句导致单元测试在 golang 1.4 中中断。我们的夜间 Jenkins 作业帮助我们发现了此错误,我们迅速推出了修复程序。
结论和未来工作
为 Azure 上的 Kubernetes 添加夜间端到端测试作业有助于定义向 Kubernetes 项目贡献联合测试的流程。在工作过程中,当我们的 Azure 测试作业发现兼容性问题时,我们也看到了将测试覆盖范围扩展到更多平台的直接好处。
我们感谢 Aaron Crickenberger、Erick Fejta、Joe Finney 和 Ryan Hutchinson 帮助我们将 Azure 端到端测试的结果整合到 Kubernetes 测试历史中。如果您想参与测试以创建稳定、高质量的 Kubernetes 版本,请加入我们的 Kubernetes 测试 SIG (sig-testing)。