这篇文章已发布一年多。较旧的文章可能包含过时内容。请检查页面中的信息自发布以来是否已失效。
为 Azure 带来端到端 Kubernetes 测试 (第二部分)
历史上,Kubernetes 测试一直由 Google 托管,在 Google Compute Engine (GCE) 和 Google Container Engine (GKE) 上运行端到端 (e2e) 测试。实际上,提交队列的门控检查是这些测试平台执行的测试的一个子集。联合测试 (Federated testing) 旨在通过允许组织托管针对各种平台的测试作业并将测试结果贡献给 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 上传结果。
- 通过提交 pull-request,修改 kubernetes/test-infra 中的几个文件,将结果整合到测试历史仪表盘中。
联合测试文档更详细地描述了这些步骤。用于运行端到端测试和上传结果的脚本简化了贡献新的联合测试作业的工作。设置自动化测试作业和适当的 Kubernetes 部署环境的具体步骤取决于读者的偏好。对于使用 Jenkins 的组织,GCE 和 GKE 测试的 jenkins-job-builder 配置可能提供有用的示例。
回顾
Azure 上的端到端测试已经运行了几周。在此期间,我们在 Kubernetes 中发现了两个问题。庄维旭 (Weixu Zhuang) 立即发布了修复,这些修复已合并到 Kubernetes master 分支。
第一个问题发生在我们想在 Azure 上使用 SaltStack 配合 Ubuntu VM 启动 Kubernetes 集群时。一个 commit (07d7cfd3) 修改了 OpenVPN 证书生成脚本,使其使用一个只在 cluster/ubuntu 脚本中初始化的变量。证书生成脚本对参数存在的严格检查导致其他使用该脚本的平台失败(例如我们为支持 Azure 所做的更改)。我们提交了一个pull-request 修复了该问题,通过用默认值初始化该变量,使证书生成脚本在所有平台类型中更加健壮。
第二个pull-request 清理了 Daemonset 单元测试文件中的一个未使用导入。该导入语句导致在使用 golang 1.4 时单元测试失败。我们的夜间 Jenkins 作业帮助我们发现了这个错误,我们及时推送了修复。
结论与未来工作
在 Azure 上增加夜间端到端 Kubernetes 测试作业,有助于定义向 Kubernetes 项目贡献联合测试的流程。在工作过程中,我们也看到了将测试覆盖范围扩展到更多平台的直接好处,例如我们的 Azure 测试作业识别出了兼容性问题。
我们要感谢 Aaron Crickenberger、Erick Fejta、Joe Finney 和 Ryan Hutchinson 帮助我们将 Azure 端到端测试结果整合到 Kubernetes 测试历史中。如果您想参与测试工作,为 Kubernetes 创建稳定高质量的版本,请加入我们Kubernetes 测试 SIG (sig-testing)。