K8S Pod之间的网速测试

2020-06-22  本文已影响0人  蒙浩

说到两个节点间的网速测试,现在最通用的工具是iperf。iperf有两种运行模式,一种是server模式,一种是client模式。当我们要测试两个节点的网速的时候,就需要在其中一台机器上开启server模式,另一台机器则开启client模式。开启server模式很简单,一条简单的命令就可以了:

iperf -s

开启iperf client的模式也比较简单

iperf -c serverip -d -t xxxs

这里就有个问题,对于两台实体机,那么,serverip很容易就可以获得,但是如果两个节点都是K8S中的pod呢?serverip不光不容易获得,很有可能会在server pod发生故障之后变化,这样,iperf工具就没有办法正常工作了。

解决方法:
如果想要server pod固定一个访问ip给 client pod, K8S给我们提供了一个很方便的功能,就是service这个概念,如果把server pod绑定在某个service上,那这些pod对K8S集群内就可以暴露service ip,而这个抽象出来的ip地址是不会变化的,所以这样就可以给client pod 提供固定的ip地址去连接了。

server.yaml:

apiVersion: v1
kind: Service
metadata:
  name: broker-server
  namespace: default
spec:
  externalTrafficPolicy: Cluster
  ports:
  - port: 5201
    protocol: TCP
    targetPort: 5201
  selector:
    app: broker-server
  sessionAffinity: None

执行完上面的yaml文件后,可以获取到svc的信息:


image.png

我们可以看到,该service的ip地址,以及暴露的端口5201(iperf3 服务端默认暴露的端口)。
也就是说,client pod只需要将serverip 替换为10.97.191.10(cluster ip)就可以了。那么问题就转换为如何让client pod获取到server pod的service cluster ip地址。
这个地方我查阅了很多资料,最后发现,其实当service的yaml文件执行成功之后,在这之后启动的pod中会新增对应的环境变量:


image.png
那么,我们就可以通过获取环境变量的方式获取到这个ip地址了。
看下效果:
image.png

客户端成功连接上了服务端!搞定!

上一篇 下一篇

猜你喜欢

热点阅读