在 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文章
88瀏覽量
17208 -
DEBUG
+關注
關注
3文章
94瀏覽量
19976 -
微服務器
+關注
關注
0文章
11瀏覽量
8114
原文標題:K8S 集群內 Debug 微服務的最佳實踐
文章出處:【微信號:LinuxHub,微信公眾號:Linux愛好者】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論