开发者
资源
文档评分
获取效率
正确性
完整性
易理解
在线提单
论坛求助

部署测试环境

部署测试环境需要先获取并修改测试工具源码,安装测试工具依赖,再部署测试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架构中使用时需要进行以下修改。

    1. 修改values.yaml中的curlImage。

      修改前:

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

      修改后:

      curlImage: docker.io/ricsanfre/docker-curl-jq:latest
    2. 修改“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调度到指定节点,若用户不熟悉相关操作,可以在所有节点导入相关镜像。
    1. 运行命令加载相关模块。
      modprobe iptable_nat
    2. “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环境。
    1. 进入“tools/perf/benchmark”目录。
      cd tools/perf/benchmark
    2. 创建本地虚拟Python环境。
      pipenv shell
    3. 安装所需Python包。
      pipenv install

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