说到两个节点间的网速测试,现在最通用的工具是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
客户端成功连接上了服务端!搞定!
网友评论