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

Posted Linux爱好者

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了K8S 集群内 Debug 微服务的最佳实践相关的知识,希望对你有一定的参考价值。

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

所用工具

为了达到目标效果,我主要用如下工具:

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集群状态

查看service external endpoint并跑些测试:

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

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 

以上是关于K8S 集群内 Debug 微服务的最佳实践的主要内容,如果未能解决你的问题,请参考以下文章

为啥说DDD是设计微服务的最佳实践?

在微服务架构下基于 Prometheus 构建一体化监控平台的最佳实践

Consul 快速入门 - Kong最佳实践

Kubernetes 上微服务之间集群间通信的最佳方式?

微服务容器化最短路径,微服务 on Serverless 最佳实践

在微服务架构下基于 Prometheus 构建一体化监控平台的最佳实践