在 K8s 集群中调试微服务很困难。有时我们遇到在不真实的环境下难以复现的 bug。在本机用你最习惯的工具调试达到和在集群中运行服务一样的效果,这其实只需要运行几个命令。
所用工具
为了达到目标效果,我主要用如下工具:
Gebug
https://github.com/moshebe/gebug
这个开源工具让调试容器化了的Go程序非常方便,它是通过开启热更新和debugger配置实现的。我就是这个工具的作者嘻嘻。
Telepresence
https://www.telepresence.io/
这是一个很厉害的 CNCF 项目,这个项目可以用来与集群网络做网络隧道。
我认为,熟悉一个工具最好的办法就是去用它,接着就来配置demo环境。
Kubernetes集群
我们使用一个小kubernetes集群,跑一个hello-world deployment、暴露一个服务。
既然是要做demo,我就用minikube了。如果你已经有一个运行中的非生产环境集群,那么你就用你的集群。注意不要在生产环境做测试。
kubectlcreatedeploymenthello-world--image=datawire/hello-world
kubectlexposedeploymenthello-world--type=LoadBalancer--port=8000
当前kubernets集群状态
查看service external endpoint
并跑些测试:
使用minikube提供的命令拉取外部地址。也可以通过kubectl get service hello world
命令并查看 EXTERNAL_IP 字段内的信息。img
hello world 服务
我们的hello-world部署很成功。我们来做一次把http返回做成json格式。
当然也可以编译你的程序、打镜像、push到仓库、编辑deployment、等等等等,最后搞定。我们来用短平快的办法做这事。
这是个简单HTTP server:
packagemain
import(
"fmt"
"net/http"
)
funcmain(){
http.HandleFunc("/",func(whttp.ResponseWriter,r*http.Request){
fmt.Println("Gotrequest")
fmt.Fprintf(w,`{"hello":"world"}`)
})
http.ListenAndServe(":8000",nil)
}
这是Gebug配置:
name:my-server
output_binary:/app
build_command:gobuild-gcflags="all=-N-l"-o/app
run_command:/app
runtime_image:golang:1.15.2
debugger_enabled:true
debugger_port:4321
expose_ports:
-8000:8000
networks:[]
environment:[]
注意,如果没有安装Gebug可以运行go get -u github.com/moshebe/gebug
安装。
Telepresence
这个强大的工具让我们绕过了复杂难懂的网络配置,可以直接把服务连接到集群中。
安装指南: https://www.telepresence.io/reference/install
下一步是暴露本地的服务、把流量连接到集群,就可以替换掉已经存在的deployment了。
我们的deployment叫hello-world,暴露8000端口,命令如下:
telepresence--swap-deploymenthello-world--expose8000:8000--methodinject-tcp--rungebugstart
上面这个命令做了几件事:
-
开一个程序负责把命中的DNS和IP段的请求重定向到k8s集群上
-
swap-deployment
这个选项是让Telepresence用运行在Telepresence代理上的东西替换掉已经存在的hello-world pod。一旦我们退出,老pod也会被恢复。 -
run
选项告诉Telepresence用Gebug工具运行我们的服务,把这个服务和网络代理绑定。
只要 http server 在 telepresence 中运行着,就可以从 k8s 集群内部访问这个服务。
展示一下
下面演示 debug 一个发到 k8s 暴露的 endpoint 的请求:
完成。希望你可以从中获益,为你调试微服务提速。
责任编辑:xj
原文标题:K8S 集群内 Debug 微服务的最佳实践
文章出处:【微信公众号:Linux爱好者】欢迎添加关注!文章转载请注明出处。
-
集群
+关注
关注
0文章
85浏览量
17166 -
DEBUG
+关注
关注
3文章
89浏览量
19881 -
微服务器
+关注
关注
0文章
11浏览量
8094
原文标题:K8S 集群内 Debug 微服务的最佳实践
文章出处:【微信号:LinuxHub,微信公众号:Linux爱好者】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
评论