阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

K8S 集群内 Debug 微服务的最佳实践

23次阅读
没有评论

共计 1858 个字符,预计需要花费 5 分钟才能阅读完成。

导读 在 K8s 集群中调试微服务很困难。有时我们遇到在不真实的环境下难以复现的 bug。在本机用你最习惯的工具调试达到和在集群中运行服务一样的效果,这其实只需要运行几个命令。

K8S 集群内 Debug 微服务的最佳实践
为了达到目标效果,我主要用如下工具:

Gebug

https://github.com/moshebe/gebug

这个开源工具让调试容器化了的 Go 程序非常方便,它是通过开启热更新和 debugger 配置实现的。我就是这个工具的作者嘻嘻。

Telepresence

https://www.telepresence.io/

这是一个很厉害的 CNCF 项目,这个项目可以用来与集群网络做网络隧道。

我认为,熟悉一个工具最好的办法就是去用它,接着就来配置 demo 环境。

Kubernetes 集群

我们使用一个小 kubernetes 集群,跑一个 hello-world deployment、暴露一个服务。

既然是要做 demo,我就用 minikube 了。如果你已经有一个运行中的非生产环境集群,那么你就用你的集群。注意不要在生产环境做测试。

kubectl create deployment hello-world --image=datawire/hello-world
kubectl expose deployment hello-world --type=LoadBalancer --port=8000

当前 kubernets 集群状态

K8S 集群内 Debug 微服务的最佳实践

查看 service external endpoint 并跑些测试:

K8S 集群内 Debug 微服务的最佳实践

使用 minikube 提供的命令拉取外部地址。也可以通过 kubectl get service hello world 命令并查看 EXTERNAL_IP 字段内的信息。img

hello world 服务

我们的 hello-world 部署很成功。我们来做一次把 http 返回做成 json 格式。

当然也可以编译你的程序、打镜像、push 到仓库、编辑 deployment、等等等等,最后搞定。我们来用短平快的办法做这事。

这是个简单 HTTP server:

package main

import (
 "fmt"
 "net/http"
)

func main() {http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {fmt.Println("Got request 🎉")
  fmt.Fprintf(w, `{"hello":"world"}`)
 })
 http.ListenAndServe(":8000", nil)
}
这是 Gebug 配置:name: my-server
output_binary: /app
build_command: go build -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-deployment hello-world --expose 8000:8000 --method inject-tcp --run gebug start

上面这个命令做了几件事:

开一个程序负责把命中的 DNS 和 IP 段的请求重定向到 k8s 集群上

swap-deployment 这个选项是让 Telepresence 用运行在 Telepresence 代理上的东西替换掉已经存在的 hello-world pod。一旦我们退出,老 pod 也会被恢复。

run 选项告诉 Telepresence 用 Gebug 工具运行我们的服务,把这个服务和网络代理绑定。

只要 http server 在 telepresence 中运行着,就可以从 k8s 集群内部访问这个服务。

阿里云 2 核 2G 服务器 3M 带宽 61 元 1 年,有高配

腾讯云新客低至 82 元 / 年,老客户 99 元 / 年

代金券:在阿里云专用满减优惠券

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2024-07-25发表,共计1858字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中