如何在AKS容器中运行可执行文件完成NetPerfTest网络性能测试
AKS容器环境适配NetPerfTest实现网络性能测试方案
整体架构设计
保留你提出的三角色逻辑,适配AKS容器特性调整部署形态:
- 编排器:单Pod部署,挂载持久化存储,负责触发测试指令、采集两端测试数据、汇总存储结果
- 接收端:单Pod+ClusterIP Service部署,固定集群内访问地址,负责监听测试流量、生成本端统计数据
- 发送端:单Pod部署,和接收端同属AKS集群网络,负责按参数发送测试流量、生成本端统计数据
核心问题解决方案
1. 在AKS容器中运行NPT可执行文件
核心思路是将NPT可执行文件和依赖打包到容器镜像中,容器启动后保留常驻进程供远程调用执行测试命令,参考Dockerfile如下(以Linux版本NPT为例):
FROM ubuntu:22.04 # 安装基础依赖、ssh服务(用于远程控制容器执行命令) RUN apt update && apt install -y openssh-server iproute2 && \ echo "PermitRootLogin yes" >> /etc/ssh/sshd_config && \ echo "root:NptTest2024" | chpasswd && \ mkdir /run/sshd # 拷贝NPT可执行文件到容器系统路径并赋予执行权限 COPY NetPerfTest /usr/local/bin/ RUN chmod +x /usr/local/bin/NetPerfTest # 暴露ssh端口和NPT默认测试端口 EXPOSE 22 5201 # 启动sshd前台运行,保持容器存活 CMD ["/usr/sbin/sshd", "-D"]
备注:如果使用Windows版本NPT,将基础镜像替换为
mcr.microsoft.com/windows/servercore:ltsc2022,配置WinRM作为远程控制协议即可。
2. 实现两个容器之间的流量发送
AKS集群内Pod默认网络互通,只需为接收端创建ClusterIP Service,发送端可直接通过Service域名访问接收端:
- 接收端启动测试服务命令示例:
NetPerfTest -s - 发送端发起测试命令示例:
NetPerfTest -c npt-receiver-svc -t 60(其中npt-receiver-svc为接收端Service名称,集群内可自动解析)
3. 测试数据存储方案
- 为编排器Pod挂载PersistentVolumeClaim(PVC)存储测试结果,测试完成后可通过两种方式获取数据:
- 直接使用
kubectl cp <编排器Pod名称>:/存储路径/测试结果文件 ./本地路径拷贝到本地 - 在编排器中部署轻量Nginx服务,映射结果存储目录,通过ClusterIP直接访问下载
- 直接使用
部署YAML配置示例
持久化存储PVC(用于存储测试结果)
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: npt-result-pvc spec: accessModes: - ReadWriteOnce resources: requests: storage: 10Gi storageClassName: default # 替换为你的AKS集群实际存储类名称
接收端Deployment+Service
apiVersion: apps/v1 kind: Deployment metadata: name: npt-receiver spec: replicas: 1 selector: matchLabels: app: npt-receiver template: metadata: labels: app: npt-receiver spec: containers: - name: npt image: <替换为你构建的NPT镜像地址> ports: - containerPort: 22 - containerPort: 5201 --- apiVersion: v1 kind: Service metadata: name: npt-receiver-svc spec: selector: app: npt-receiver ports: - name: ssh port: 22 targetPort: 22 - name: npt-test port: 5201 targetPort: 5201 type: ClusterIP
发送端Deployment
apiVersion: apps/v1 kind: Deployment metadata: name: npt-sender spec: replicas: 1 selector: matchLabels: app: npt-sender template: metadata: labels: app: npt-sender spec: containers: - name: npt image: <替换为你构建的NPT镜像地址> ports: - containerPort: 22 - containerPort: 5201
编排器Deployment
apiVersion: apps/v1 kind: Deployment metadata: name: npt-orchestrator spec: replicas: 1 selector: matchLabels: app: npt-orchestrator template: metadata: labels: app: npt-orchestrator spec: containers: - name: npt image: <替换为你构建的NPT镜像地址> volumeMounts: - name: result-storage mountPath: /npt-results volumes: - name: result-storage persistentVolumeClaim: claimName: npt-result-pvc
测试流程参考
- 进入编排器Pod:
kubectl exec -it deployment/npt-orchestrator -- bash - 远程启动接收端NPT服务:
ssh root@npt-receiver-svc "NetPerfTest -s > /dev/null 2>&1 &" - 远程触发发送端发起测试,生成结果文件:
ssh root@npt-sender "NetPerfTest -c npt-receiver-svc -t 60 > /tmp/test_result.txt" - 将测试结果拷贝到编排器持久化存储:
scp root@npt-sender:/tmp/test_result.txt /npt-results/ - 退出容器后拷贝结果到本地:
kubectl cp <编排器Pod完整名称>:/npt-results/test_result.txt ./local_test_result.txt
内容的提问来源于stack exchange,提问作者yunlee
相关产品推荐
相关产品推荐

