部署测试环境
部署测试环境需要先获取并修改测试工具源码,安装测试工具依赖,再部署测试Pod。
- 获取测试工具源码。工具源码有多个版本,此处以release-1.23版本为例。
git clone https://github.com/istio/tools.git -b release-1.23 - 进入操作目录。
cd tools/perf/benchmark
- 修改测试工具源码。
测试工具源码主要基于x86开发,在ARM64架构中使用时需要进行以下修改。
- 修改values.yaml中的curlImage。
修改前:
curlImage: cfmanteiga/alpine-bash-curl-jq:latest
修改后:
curlImage: docker.io/ricsanfre/docker-curl-jq:latest
- 修改“templates/fortio.yaml”。
- 在(文件未修改前的)第511行之后增加内容。
{{- else }} # 原第510行 image: {{ $.Values.fortioImage }} # 原第511行,如下三行为新增内容 volumeMounts: - name: shared-data mountPath: /var/lib/fortio args: # 原第512行
- 在(文件未修改前的)第485行之后增加内容。
image: {{ $.Values.curlImage }} # 原第485行 imagePullPolicy: IfNotPresent # 新增内容
- 单机测试(即仅在一个节点上部署所有测试Pod)时:修改podAntiAffinity字段内的内容,使得测试Pod可以被调度到同一节点。
修改前:
podAntiAffinity: # 原392行 requiredDuringSchedulingIgnoredDuringExecution: - labelSelector: matchExpressions: - key: app operator: In values: {{- if eq $.name "fortioclient" }} - "fortioserver" {{- else }} - "fortioclient" {{- end }} topologyKey: "kubernetes.io/hostname" # 原404行修改后:
podAntiAffinity: preferredDuringSchedulingIgnoredDuringExecution: - weight: 100 podAffinityTerm: labelSelector: matchExpressions: - key: app operator: In values: {{- if eq $.name "fortioclient" }} - "fortioserver" {{- else }} - "fortioclient" {{- end }} topologyKey: "kubernetes.io/hostname"
- 当K8s的master节点也会部署测试Pod时,进行如下修改。
- 在(文件未修改前的)第417行之后增加如下内容,使得测试Pod可以调度到master节点部署。
{{- end }} # 原417行 tolerations: # 与第417行对齐,自行调整缩进 - operator: "Exists" # 与第417行对齐,自行调整缩进 effect: "NoSchedule" # 较417行多两个空格 containers: # 原418行 - name: captured # 原419行
- 在(文件未修改前的)第417行之后增加如下内容,使得测试Pod可以调度到master节点部署。
- 在(文件未修改前的)第511行之后增加内容。
- 修改values.yaml中的curlImage。
- 安装测试工具依赖。
依据“tools/perf/benchmark/README.md”的Prerequisites段落确认具体的依赖,本文中使用的测试工具的依赖包括Python3 >= 3.5、pipenv、helm。
- openEuler 24.03 LTS SP2操作系统依赖安装示例如下。
yum install python3 -y pip install --user pipenv # 查看 user base python3 -m site --user-base # 上述命令将显示~/.local,通过下面的export命令将~/.local/bin加入PATH使pipenv可用 export PATH=$PATH:~/.local/bin ## 手动安装helm:自行下载对应二进制包后运行如下命令(下载链接见表2) tar -zxvf helm-v3.14.3-linux-arm64.tar.gz sudo mv linux-arm64/helm /usr/local/bin/helm # 验证 helm version
- Debian12 bookworm操作系统依赖安装示例如下。
apt install python3 pipx -y pipx install pipenv # 安装pipenv pipx ensurepath # 将~/.local/bin加入PATH使pipenv可用 ## 手动安装helm:自行下载对应二进制包后运行如下命令 tar -zxvf helm-v3.14.3-linux-arm64.tar.gz sudo mv linux-arm64/helm /usr/local/bin/helm # 验证 helm version
- openEuler 24.03 LTS SP2操作系统依赖安装示例如下。
- 部署测试Pod。
- 部署测试环境前请确保网络环境可顺利拉取所需容器镜像。若所处环境无法直接拉取容器镜像,需要提前准备相关镜像并导入至目标环境。对于release-1.23版本的测试工具,所需容器镜像如下。
docker.io/istio/proxyv2:1.23.4-distroless
ricsanfre/docker-curl-jq:latest
- 上述目标环境指的是K8s集群中将要进行测试的相关节点。用户可尝试修改“tools/perf/benchmark/fortio.yaml”文件中的内容控制测试Pod调度到指定节点,若用户不熟悉相关操作,可以在所有节点导入相关镜像。
- 运行命令加载相关模块。
modprobe iptable_nat
- 在“tools/perf/benchmark”目录运行如下命令。
export NAMESPACE=twopods-istio export INTERCEPTION_MODE=REDIRECT export ISTIO_INJECT=true export LOAD_GEN_TYPE=fortio export DNS_DOMAIN=v104.qualistio.org chmod +x ./setup_test.sh ./setup_test.sh
- 部署测试环境前请确保网络环境可顺利拉取所需容器镜像。若所处环境无法直接拉取容器镜像,需要提前准备相关镜像并导入至目标环境。对于release-1.23版本的测试工具,所需容器镜像如下。
- 准备测试Python环境。
- 进入“tools/perf/benchmark”目录。
cd tools/perf/benchmark
- 创建本地虚拟Python环境。
pipenv shell
- 安装所需Python包。
pipenv install
安装成功后有类似如下输出:

- 进入“tools/perf/benchmark”目录。
父主题: Benchmark测试