17.7. 在断开连接的集群中运行延迟测试
CNF 测试镜像可在无法访问外部 registry 的断开连接的集群中运行测试。这需要两个步骤:
-
将
cnf-tests
镜像镜像到自定义断开连接的 registry。 - 指示测试使用来自自定义断开连接的 registry 的镜像。
将镜像镜像(mirror)到集群可访问的自定义 registry
mirror
中提供了镜像可执行文件,以提供 oc
需要的输入来镜像运行测试到本地 registry 所需的镜像。
从可访问集群和 registry.redhat.io 的中间机器运行这个命令:
$ podman run -v $(pwd)/:/kubeconfig:Z -e KUBECONFIG=/kubeconfig/kubeconfig \ registry.redhat.io/openshift4/cnf-tests-rhel8:v4.17 \ /usr/bin/mirror -registry <disconnected_registry> | oc image mirror -f -
其中:
- <disconnected_registry>
-
是您配置的断开连接的镜像 registry,如
my.local.registry:5000/
。
当您将
cnf-tests
镜像 mirror 到断开连接的 registry 中时,您必须覆盖用于运行测试时用来获取镜像的原始 registry,例如:podman run -v $(pwd)/:/kubeconfig:Z -e KUBECONFIG=/kubeconfig/kubeconfig \ -e IMAGE_REGISTRY="<disconnected_registry>" \ -e CNF_TESTS_IMAGE="cnf-tests-rhel8:v4.17" \ -e LATENCY_TEST_RUNTIME=<time_in_seconds> \ <disconnected_registry>/cnf-tests-rhel8:v4.17 /usr/bin/test-run.sh --ginkgo.v --ginkgo.timeout="24h"
配置测试以使用自定义 registry 中的镜像
您可以使用 CNF_TESTS_IMAGE
和 IMAGE_REGISTRY
变量来使用自定义测试镜像和镜像 registry 运行延迟测试。
要将延迟测试配置为使用自定义测试镜像和镜像 registry,请运行以下命令:
$ podman run -v $(pwd)/:/kubeconfig:Z -e KUBECONFIG=/kubeconfig/kubeconfig \ -e IMAGE_REGISTRY="<custom_image_registry>" \ -e CNF_TESTS_IMAGE="<custom_cnf-tests_image>" \ -e LATENCY_TEST_RUNTIME=<time_in_seconds> \ registry.redhat.io/openshift4/cnf-tests-rhel8:v4.17 /usr/bin/test-run.sh --ginkgo.v --ginkgo.timeout="24h"
其中:
- <custom_image_registry>
-
是自定义镜像 registry,如
custom.registry:5000/
。 - <custom_cnf-tests_image>
-
是自定义 cnf-tests 镜像,如
custom-cnf-tests-image:latest
。
将镜像镜像 (mirror) 到集群 OpenShift 镜像 registry
OpenShift Container Platform 提供了一个内建的容器镜像 registry,它作为一个标准的工作负载在集群中运行。
流程
通过使用路由公开到 registry 的外部访问权限:
$ oc patch configs.imageregistry.operator.openshift.io/cluster --patch '{"spec":{"defaultRoute":true}}' --type=merge
运行以下命令来获取 registry 端点:
$ REGISTRY=$(oc get route default-route -n openshift-image-registry --template='{{ .spec.host }}')
创建用于公开镜像的命名空间:
$ oc create ns cnftests
使镜像流可供用于测试的所有命名空间使用。这需要允许 test 命名空间从
cnf-tests
镜像流中获取镜像。运行以下命令:$ oc policy add-role-to-user system:image-puller system:serviceaccount:cnf-features-testing:default --namespace=cnftests
$ oc policy add-role-to-user system:image-puller system:serviceaccount:performance-addon-operators-testing:default --namespace=cnftests
运行以下命令,检索 docker secret 名称和 auth 令牌:
$ SECRET=$(oc -n cnftests get secret | grep builder-docker | awk {'print $1'}
$ TOKEN=$(oc -n cnftests get secret $SECRET -o jsonpath="{.data['\.dockercfg']}" | base64 --decode | jq '.["image-registry.openshift-image-registry.svc:5000"].auth')
创建
dockerauth.json
文件,例如:$ echo "{\"auths\": { \"$REGISTRY\": { \"auth\": $TOKEN } }}" > dockerauth.json
对镜像进行 mirror:
$ podman run -v $(pwd)/:/kubeconfig:Z -e KUBECONFIG=/kubeconfig/kubeconfig \ registry.redhat.io/openshift4/cnf-tests-rhel8:4.17 \ /usr/bin/mirror -registry $REGISTRY/cnftests | oc image mirror --insecure=true \ -a=$(pwd)/dockerauth.json -f -
运行测试:
$ podman run -v $(pwd)/:/kubeconfig:Z -e KUBECONFIG=/kubeconfig/kubeconfig \ -e LATENCY_TEST_RUNTIME=<time_in_seconds> \ -e IMAGE_REGISTRY=image-registry.openshift-image-registry.svc:5000/cnftests cnf-tests-local:latest /usr/bin/test-run.sh --ginkgo.v --ginkgo.timeout="24h"
对不同的测试镜像进行镜像(mirror)
您可以选择更改对延迟测试镜像的默认上游镜像。
流程
mirror
命令默认尝试对上游镜像进行 mirror。这可以通过向镜像传递带有以下格式的文件来覆盖:[ { "registry": "public.registry.io:5000", "image": "imageforcnftests:4.17" } ]
将文件传递给
mirror
命令,例如将其在本地保存为images.json
。使用以下命令,本地路径挂载到容器内的/kubeconfig
中,并可传递给 mirror 命令。$ podman run -v $(pwd)/:/kubeconfig:Z -e KUBECONFIG=/kubeconfig/kubeconfig \ registry.redhat.io/openshift4/cnf-tests-rhel8:v4.17 /usr/bin/mirror \ --registry "my.local.registry:5000/" --images "/kubeconfig/images.json" \ | oc image mirror -f -