使用k8s部署微服务,本地开发调试是一个难题。网上的帖子较少,并且大多都是复制黏贴。今天实践了一下使用Telepresence实现本地调试,分享出来希望能帮助更多的开发者。
借助Telepresence实现以下:
后面也会尝试在window下实践一番并分享给大家。
参考官方文档:https://kubernetes.io/zh/docs/tasks/tools/install-kubectl/
我本地环境是ubuntu,使用apt方式安装:
sudo apt-get update && sudo apt-get install -y apt-transport-https
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee -a /etc/apt/sources.list.d/kubernetes.list
sudo apt-get update
sudo apt-get install -y kubectl
参考:https://www.telepresence.io/reference/install
curl -sO https://packagecloud.io/install/repositories/datawireio/telepresence/script.deb.sh
sudo env os=ubuntu dist=xenial bash script.deb.sh
sudo apt install --no-install-recommends telepresence
rm script.deb.sh
本地已经安装了kubectl,kubectl这个工具本质上是向k8s集群的api-server发送http请求
我们需要从远程k8s集群中复制一份~/.kube/config
到本地相同目录中,使得本地的kubectl能够访问到远程集群。
因为Telepresence需要借助kubectl来在远程集群中启动代理pod来实现双方的互通有无。
记得将本地的~/.kube/config
中的server
改为你远程集群的ip
直接使用telepresence命令就能启动了:
启动成功后,使用kubectl get pods
,你会发现远程集群中启动了一个telepresence的pod。
这时候,你可以直接在本地访问远程集群的服务啦。用nslookup也可以找到集群中的svc了。
直接用idea启动服务即可。我本地用IDEA启动了服务A,且在服务A中调用了服务B(B运行在集群中),经过测试,是可以顺利调用的。
我们团队每个成员负责不同的微服务模块,常常需要和同事联调,同事调我的接口,我本地使用IDEA进行debug。
以前使用eureka时,我只需要本地起服务,然后把其他实例下线,那么同事的请求就会请求到我本地了。
去除eureka后,微服务之间都是通过k8s的service进行请求,那么我们可以使用telepresence,将远程服务收到的请求转发到我本地。
telepresence --swap-deployment xxx-deployment --expose 9000:9000
请求转发到本地后,本地的服务是用IDEA启动的,那么自然可以进行debug了。