当前位置: 首页 > 科技观察

您是否在Kubernetes基础架构上运行自动化测试?

时间:2023-03-18 12:36:19 科技观察

软件测试软件开发中的自动化测试是保证软件质量不可或缺的一部分。随着容器化技术的不断发展,Kubernetes已经成为事实上的标准。然后,以自动化方式验证Kubernetes等基础设施的有效性变得越来越重要。本文介绍如何使用和扩展现有工具来测试Kubernetes集群。为什么要测试?您应该利用自动化集群测试的原因有很多。Kubernetes是一个非常复杂的系统,由多个独立的组件组成。仅仅因为它们在一种配置中运行良好并不意味着它们在所有配置中都能完美运行。使用安装程序(例如kubeadm或kops)或其他设置集群的方法可以通过多种方式启动Kubernetes集群。对于每种方式,都有许多配置选项,使两种配置看起来不同。在用户使用集群之前对其进行测试可确保我们的设置按预期执行,从而为用户提供可用且有价值的平台。然而,集群设置只是第一步,因为Kubernetes的更新经常发布。这时候测试就有作用了,可以验证更新后集群基本功能还是可以用的。Kubernetes不仅仅是一个平台,它还是一个可以通过插件和附加组件进行扩展的框架。因此,没有Kubernetes集群的行为方式相同。Kubernetes自身的测试并没有涵盖插件,所以测试的范围只取决于插件开发者的测试。为了确保我们的插件不会相互干扰或影响Kubernetes,我们还应该在我们的设置中测试它们。对于您自己编写的插件尤其如此。一致性测试Kubernetes一致性测试是端到端测试用例的一个子集,用于测试Kubernetes的核心功能。用开发者团队的话说,“目前的测试只能测试API必要的功能”,通过这些测试的集群是合格的,可以通过CNCFk8s合格工作组的认证。目前可以测试的功能包括创建API对象、节点启动容器和挂载基本卷、测试kubectl。不包括可选功能,例如基于角色的访问控制、NetworkPolicy和PodSecurityPolicy。插件和附加组件也大多免于一致性测试,例如DNS已测试,但一些测试仅隐含地要求与Weave或Calico等插件联网。未来插件也可能通过一致性测试配置文件进行测试,但目前需要单独测试。然而,他们对基本集群功能的验证使一致性测试成为测试集群的理想起点。要执行这些测试,我们可以使用kubetest或sonobuoy等工具。kubetestkubetest是Kubernetes管道中用于运行端到端测试的CLI工具。由于一致性测试是端到端测试的一个子集,因此可以使用kubetest通过过滤要运行的测试来在集群上运行它们。#安装最新版本的kubetestgoget-uk8s.io/test-infra/kubetest#测试需要匹配集群版本K8S_VERSION=$(kubectlversion-ojson|jq-r'.serverVersion.gitVersion')#设置这个变量为yexportKUBERNETES_CONFORMANCE_TEST=y#DisplaySetconfigurationexportKUBECONFIG=”$HOME/.kube/config”#运行测试,skeleton为当前集群kubetest--provider=skeleton--test--test_args=”--ginkgo.focus=\[Conformance\]”--extract${K8S_VERSION}在为我们的集群版本下载并提取所需的Kubernetes二进制文件后,将执行所有标记为[Conformance]的测试。您还可以使用并行测试来缩短测试运行时间。kubetest--provider=skeleton--test--ginkgo.parallel--test_args="--ginkgo.focus=\[Conformance\]--ginkgo.skip=\[Serial\]"--extract${K8S_VERSION}kubetest--provider=skeleton--test--test_args="--ginkgo.focus=\[Serial\].*\[Conformance\]"--extract${K8S_VERSION}你也可以只运行kubetestextract一次,然后解压from在Kubernetes目录中执行测试以加速后续执行。出于调试目的,您还可以告诉kubetest不要删除测试失败的名称空间:kubetest--provider=skeleton--test--test_args="--ginkgo.focus=\[Conformance\]--delete-namespace-on-failure=false"--extract${K8S_VERSION}虽然kubetest是高度可定制的,但它不一定是面向最终用户的,而且它的标志很少被记录并且经常令人困惑。为了简单地运行一致性测试,Heptio发布了Sonobuoy,它简化了这个过程。SonobuoySonobuoy是一种运行Kubernetes一致性测试的诊断工具。它由一个CLI组成,该CLI启动一个pod来管理集群中的测试运行,并允许您在之后检索结果。它是一个简单的开箱即用解决方案,是运行合规性测试的标准工具。我们还可以选择使用kubetest和Sonobuoy为我们的一些插件运行端到端测试套件的额外测试。例如,如果我们要在我们的集群中使用网络策略,我们可能应该测试它们是否被强制执行。您可以使用Sonobuoy执行以下基本测试:#executesonobuoy,覆盖默认的skip和focus参数sonobuoyrun--e2e-focus="\[Feature:NetworkPolicy\]"--e2e-skip=""这些测试创建Restricted基础网络策略和??pod,并验证它们是否在集群中得到执行(请注意,它们不会验证集群中存在的策略是否按预期工作,因此可以使用netassert或illuminatio等工具)。其他功能也存在类似的测试。编写您自己的端到端测试您还可以为集群设置编写您自己的端到端测试。这在运行本地开发的附加组件时特别有用,因为单元测试很难模仿正在运行的Kubernetes集群的行为。使用Golang开发测试,可以使用Kubernetes本身的E2E框架。如果您使用其他编程语言,您仍然可以使用kubernetes客户端库,但您必须自己编写一些样板代码,例如用于设置和拆除测试命名空间。像pytest这样的单元测试框架对于将测试用例与运行测试分开并收集结果仍然很有用。无论您是刚刚开始您的Kubernetes之旅还是已经在生产环境中运行集群多年,我认为您应该立即开始测试这些集群。运行Sonobuoy以在管道中进行一致性测试,开始对您使用的功能进行一些E2E测试,并针对导致集群多次失败的组件开发您自己的测试。这会让事情变得更容易,让你安心。