测试 ¶
单元和集成测试 ¶
可以使用 go test
运行单元和集成测试
要运行所有测试
go test -v ./...
添加集成测试 ¶
集成测试将使用集群规范构建 Terraform 模板。对于新功能,请考虑将其添加到 complex.example.com
集群中,除非它与该集群中现有的功能冲突。要添加新的集成测试,请在 tests/integration/update_cluster/
中创建一个新目录,并将集群规范放在 in-v1alpha2.yaml
中。使用唯一的集群名称。
然后编辑 ./cmd/kops/integration_test.go
并添加使用上述集群名称和目录的测试函数。
最后运行 ./hack/update-expected.sh
生成预期的输出。
Kubernetes e2e 测试 ¶
Kubetest2 是在 Kubernetes 上启动和运行端到端测试的框架,测试 kOps 集群的最佳方法是使用相同的 Go 模块来执行 e2e 测试。
准备环境 ¶
在运行 kubetest2
之前,您需要安装核心以及所有部署器和测试器 Go 模块。
make test-e2e-install
作为参考,构建目标命令可以在 这里 找到。
请参阅 GitHub kubetest2 以进一步了解 Kubernetes e2e 测试框架。
按照以下示例,kubetest2
将测试工件下载到 ./_artifacts
。
针对现有集群运行 ¶
您可以运行类似以下内容来让 kubetest2
重用现有集群。
这假设您已经从源代码构建了 kOps 二进制文件。--kops-binary-path
标志中使用的 kops
二进制文件的精确路径可能会有所不同。
环境变量 KOPS_ROOT
是本地 GitHub kOps 工作目录的完整路径。
kubetest2 kops \
-v 2 \
--test \
--cloud-provider=aws \
--cluster-name=my.testcluster.com \
--kops-binary-path=${KOPS_ROOT}/.build/dist/$(go env GOOS)/$(go env GOARCH)/kops \
--kubernetes-version=v1.20.2 \
--test=kops \
-- \
--test-package-version=v1.20.2 \
--parallel 25 \
--skip-regex="\[Slow\]|\[Serial\]|\[Disruptive\]|\[Flaky\]|\[Feature:.+\]|\[HPA\]|Dashboard|RuntimeClass|RuntimeHandler"
也可以通过将 --skip-regex
标志替换为 --focus-regex='\[Conformance\]'
来运行 Kubernetes 一致性测试套件。
针对新集群运行 ¶
通过添加 --up
标志,kubetest2
将启动一个新集群。可以使用 --create-args
标志将标志传递给 kops create cluster
命令。在大多数情况下,您还需要添加一些额外的标志。有关完整列表,请参阅 kubetest2 kops --help
。
kubetest2 kops \
-v 2 \
--up \
--cloud-provider=aws \
--cluster-name=my.testcluster.com \
--create-args="--networking calico" \
--kops-binary-path=${KOPS_ROOT}/.build/dist/$(go env GOOS)/$(go env GOARCH)/kops \
--kubernetes-version=v1.20.2 \
--test=kops \
--
-- \
--test-package-version=v1.20.2 \
--parallel 25 \
--skip-regex="\[Slow\]|\[Serial\]|\[Disruptive\]|\[Flaky\]|\[Feature:.+\]|\[HPA\]|Dashboard|RuntimeClass|RuntimeHandler"
如果您未指定任何其他标志,kOps 部署器 Go 模块将使用以下默认值创建 Kubernetes 集群。
kops create cluster --name my.testcluster.com --admin-access <Client Public IP> --cloud aws --kubernetes-version v1.20.2 --master-count 1 --master-volume-size 48 --node-count 4 --node-volume-size 48 --set cluster.spec.nodePortAccess=0.0.0.0/0 --ssh-public-key /home/ubuntu/.ssh/id_rsa.pub --yes --zones <Random Zone> --master-size c5.large --networking calico
对于 --zones
标志,kOps 部署器将根据 --cloud-provider
标志选择一个随机区域,对于 aws
,完整的 AWS 区域列表可以在 这里 找到,对于 gce
,完整的 GCE 区域列表可以在 这里 找到。
或者,您可以使用 kops create cluster my.testcluster.com ... --dry-run -oyaml > my.testcluster.com.yaml
根据您自己的要求生成 kOps 集群规范 YAML 清单,然后使用 --template-path
标志运行 kubetest2
e2e 测试以指定 YAML 清单的完整路径。
kubetest2 kops \
-v 2 \
--up \
--cloud-provider=aws \
--cluster-name=my.testcluster.com \
--kops-binary-path=${KOPS_ROOT}/.build/dist/$(go env GOOS)/$(go env GOARCH)/kops \
--kubernetes-version=v1.20.2 \
--template-path=my.testcluster.com.yaml \
--test=kops \
-- \
--test-package-version=v1.20.2 \
--parallel 25 \
--skip-regex="\[Slow\]|\[Serial\]|\[Disruptive\]|\[Flaky\]|\[Feature:.+\]|\[HPA\]|Dashboard|RuntimeClass|RuntimeHandler"
如果您遇到以下错误,则需要将您的 SSH 公钥添加到 kOps 集群规范 YAML 清单中。
SSH public key must be specified when running with AWS (create with `kops create secret --name training.kops.k8s.local sshpublickey admin -i ~/.ssh/id_rsa.pub`)
---
apiVersion: kops.k8s.io/v1alpha2
kind: SSHCredential
metadata:
name: admin
labels:
kops.k8s.io/cluster: my.testcluster.com
spec:
publicKey: "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQC..."
如果您想针对您的 kOps 开发版本运行测试,则需要上传二进制文件并设置环境变量,如 添加新功能 中所述。
由于我们假设您使用此集群进行测试,因此我们在测试完成后让集群保持运行状态,以便您在出现意外情况时检查节点。如果您不需要这样做,可以添加 --down
标志。否则,只需像其他集群一样删除集群:kops delete cluster my.testcluster.com --yes