---
title: 部署测试环境
description: "部署测试环境需要先获取并修改测试工具源码，安装测试工具依赖，再部署测试Pod。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengcpfs/ecosystemEnable/Istio/kunpeng_istio_zn_010.html
sourcePath: /source/zh/kunpengcpfs/ecosystemEnable/Istio/kunpeng_istio_zn_010.html
indexId: dc5455c7ae88166de1c947625d45772c1b4334b31277c433d3d9973146c8030470
---
# 部署测试环境

部署测试环境需要先获取并修改测试工具源码，安装测试工具依赖，再部署测试Pod。

1. 获取测试工具源码。工具源码有多个版本，此处以release-1.23版本为例。

```
git clone https://github.com/istio/tools.git -b release-1.23
```


2. 进入操作目录。

```
cd tools/perf/benchmark
```


3. 修改测试工具源码。
测试工具源码主要基于x86开发，在ARM64架构中使用时需要进行以下修改。

  a. 修改values.yaml中的curlImage。
    修改前：

```
curlImage: cfmanteiga/alpine-bash-curl-jq:latest
```


    修改后：

```
curlImage: docker.io/ricsanfre/docker-curl-jq:latest
```


  b. 修改“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行
```


      - 修改第56行的type，使得测试Pod网络可以连通。
        修改前：

```
type: LoadBalancer
```


        修改后：

```
type: ClusterIP
```


4. 安装测试工具依赖。
依据“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
```


5. 部署测试Pod。
- 部署测试环境前请确保网络环境可顺利拉取所需容器镜像。若所处环境无法直接拉取容器镜像，需要提前准备相关镜像并导入至目标环境。对于release-1.23版本的测试工具，所需容器镜像如下。
  fortio/fortio:latest_release

  docker.io/istio/proxyv2:1.23.4-distroless

  ricsanfre/docker-curl-jq:latest

- 上述目标环境指的是K8s集群中将要进行测试的相关节点。用户可尝试修改“tools/perf/benchmark/fortio.yaml”文件中的内容控制测试Pod调度到指定节点，若用户不熟悉相关操作，可以在所有节点导入相关镜像。


  a. 运行命令加载相关模块。

```
modprobe iptable_nat
```


  b. 在“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
```


6. 准备测试Python环境。

  a. 进入“tools/perf/benchmark”目录。

```
cd tools/perf/benchmark
```


  b. 创建本地虚拟Python环境。

```
pipenv shell
```


  c. 安装所需Python包。

```
pipenv install
```


    安装成功后有类似如下输出：
