0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

K8S集群內(nèi)Debug微服務(wù)的最佳實(shí)踐

Linux愛(ài)好者 ? 來(lái)源:Linux愛(ài)好者 ? 作者:Linux愛(ài)好者 ? 2021-02-02 14:39 ? 次閱讀

在 K8s 集群中調(diào)試微服務(wù)很困難。有時(shí)我們遇到在不真實(shí)的環(huán)境下難以復(fù)現(xiàn)的 bug。在本機(jī)用你最習(xí)慣的工具調(diào)試達(dá)到和在集群中運(yùn)行服務(wù)一樣的效果,這其實(shí)只需要運(yùn)行幾個(gè)命令。

所用工具

為了達(dá)到目標(biāo)效果,我主要用如下工具:

Gebug

https://github.com/moshebe/gebug

這個(gè)開(kāi)源工具讓調(diào)試容器化了的Go程序非常方便,它是通過(guò)開(kāi)啟熱更新和debugger配置實(shí)現(xiàn)的。我就是這個(gè)工具的作者嘻嘻。

Telepresence

https://www.telepresence.io/

這是一個(gè)很厲害的 CNCF 項(xiàng)目,這個(gè)項(xiàng)目可以用來(lái)與集群網(wǎng)絡(luò)做網(wǎng)絡(luò)隧道。

我認(rèn)為,熟悉一個(gè)工具最好的辦法就是去用它,接著就來(lái)配置demo環(huán)境。

Kubernetes集群

我們使用一個(gè)小kubernetes集群,跑一個(gè)hello-world deployment、暴露一個(gè)服務(wù)。

既然是要做demo,我就用minikube了。如果你已經(jīng)有一個(gè)運(yùn)行中的非生產(chǎn)環(huán)境集群,那么你就用你的集群。注意不要在生產(chǎn)環(huán)境做測(cè)試。

kubectlcreatedeploymenthello-world--image=datawire/hello-world
kubectlexposedeploymenthello-world--type=LoadBalancer--port=8000

當(dāng)前kubernets集群狀態(tài)

8a5a8c46-5f10-11eb-8b86-12bb97331649.png

查看service external endpoint并跑些測(cè)試:

8ad2078a-5f10-11eb-8b86-12bb97331649.png

使用minikube提供的命令拉取外部地址。也可以通過(guò)kubectl get service hello world命令并查看 EXTERNAL_IP 字段內(nèi)的信息。img

hello world 服務(wù)

我們的hello-world部署很成功。我們來(lái)做一次把http返回做成json格式。

當(dāng)然也可以編譯你的程序、打鏡像、push到倉(cāng)庫(kù)、編輯deployment、等等等等,最后搞定。我們來(lái)用短平快的辦法做這事。

這是個(gè)簡(jiǎn)單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:[]

注意,如果沒(méi)有安裝Gebug可以運(yùn)行go get -u github.com/moshebe/gebug安裝。

Telepresence

這個(gè)強(qiáng)大的工具讓我們繞過(guò)了復(fù)雜難懂的網(wǎng)絡(luò)配置,可以直接把服務(wù)連接到集群中。

安裝指南: https://www.telepresence.io/reference/install

下一步是暴露本地的服務(wù)、把流量連接到集群,就可以替換掉已經(jīng)存在的deployment了。

我們的deployment叫hello-world,暴露8000端口,命令如下:

telepresence--swap-deploymenthello-world--expose8000:8000--methodinject-tcp--rungebugstart

上面這個(gè)命令做了幾件事:

  • 開(kāi)一個(gè)程序負(fù)責(zé)把命中的DNS和IP段的請(qǐng)求重定向到k8s集群上

  • swap-deployment 這個(gè)選項(xiàng)是讓Telepresence用運(yùn)行在Telepresence代理上的東西替換掉已經(jīng)存在的hello-world pod。一旦我們退出,老pod也會(huì)被恢復(fù)。

  • run 選項(xiàng)告訴Telepresence用Gebug工具運(yùn)行我們的服務(wù),把這個(gè)服務(wù)和網(wǎng)絡(luò)代理綁定。

只要 http server 在 telepresence 中運(yùn)行著,就可以從 k8s 集群內(nèi)部訪問(wèn)這個(gè)服務(wù)。

展示一下

下面演示 debug 一個(gè)發(fā)到 k8s 暴露的 endpoint 的請(qǐng)求:

8b1c8c88-5f10-11eb-8b86-12bb97331649.gif

完成。希望你可以從中獲益,為你調(diào)試微服務(wù)提速。

責(zé)任編輯:xj

原文標(biāo)題:K8S 集群內(nèi) Debug 微服務(wù)的最佳實(shí)踐

文章出處:【微信公眾號(hào):Linux愛(ài)好者】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。


聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 集群
    +關(guān)注

    關(guān)注

    0

    文章

    86

    瀏覽量

    17181
  • DEBUG
    +關(guān)注

    關(guān)注

    3

    文章

    94

    瀏覽量

    19934
  • 微服務(wù)器
    +關(guān)注

    關(guān)注

    0

    文章

    11

    瀏覽量

    8103

原文標(biāo)題:K8S 集群內(nèi) Debug 微服務(wù)的最佳實(shí)踐

文章出處:【微信號(hào):LinuxHub,微信公眾號(hào):Linux愛(ài)好者】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    k8s和docker區(qū)別對(duì)比,哪個(gè)更強(qiáng)?

    Docker和Kubernetes(K8s)是容器化技術(shù)的兩大流行工具。Docker關(guān)注構(gòu)建和打包容器,適用于本地開(kāi)發(fā)和單主機(jī)管理;而K8s則提供容器編排和管理平臺(tái),適用于多主機(jī)或云環(huán)境,具備自動(dòng)化
    的頭像 發(fā)表于 12-11 13:55 ?117次閱讀

    k8s微服務(wù)架構(gòu)就是云原生嗎??jī)烧呤鞘裁搓P(guān)系

    k8s微服務(wù)架構(gòu)就是云原生嗎?K8s微服務(wù)架構(gòu)并不等同于云原生,但兩者之間存在密切的聯(lián)系。Kubernetes在云原生架構(gòu)中扮演著核心組件的角色,它簡(jiǎn)化了容器化應(yīng)用程序的管理,提供了彈
    的頭像 發(fā)表于 11-25 09:39 ?163次閱讀

    混合云部署k8s集群方法有哪些?

    混合云部署k8s集群方法是首先需在本地與公有云分別建立K8s集群,并確保網(wǎng)絡(luò)連接。接著,配置kubeconfig文件連接兩集群,并安裝云
    的頭像 發(fā)表于 11-07 09:37 ?155次閱讀

    k8s可以部署私有云嗎?私有云部署全攻略

    Kubernetes(簡(jiǎn)稱K8S)可以部署私有云。Kubernetes是一個(gè)開(kāi)源的容器編排引擎,能夠自動(dòng)化容器的部署、擴(kuò)展和管理,使得應(yīng)用可以在各種環(huán)境中高效運(yùn)行。通過(guò)使用Kubernetes,企業(yè)可以在自己的數(shù)據(jù)中心或私有云環(huán)境中搭建和管理容器化的應(yīng)用,實(shí)現(xiàn)高度的靈活性和可擴(kuò)展性。
    的頭像 發(fā)表于 10-25 09:32 ?180次閱讀

    k8s云原生開(kāi)發(fā)要求

    IO性能。網(wǎng)絡(luò)要求穩(wěn)定,建議使用私有網(wǎng)絡(luò)VPC,并配置與Kubernetes兼容的網(wǎng)絡(luò)插件。操作系統(tǒng)需與K8s版本匹配,虛擬化平臺(tái)支持Docker等。此外,還需關(guān)注安全配置,如禁用Swap、調(diào)整Sysctl等,以及etcd數(shù)據(jù)存儲(chǔ)后端的配置。合理配置硬件可確保K8s
    的頭像 發(fā)表于 10-24 10:03 ?234次閱讀
    <b class='flag-5'>k8s</b>云原生開(kāi)發(fā)要求

    k8s容器啟動(dòng)失敗的常見(jiàn)原因及解決辦法

    k8s容器啟動(dòng)失敗的問(wèn)題通常出現(xiàn)在開(kāi)發(fā)者使用Kubernetes進(jìn)行容器編排時(shí),可能的原因有多種,例如:配置錯(cuò)誤、鏡像問(wèn)題、資源限制、依賴問(wèn)題、網(wǎng)絡(luò)問(wèn)題、節(jié)點(diǎn)狀態(tài)異常、其他因素等,以下是對(duì)這些常見(jiàn)原因的詳細(xì)分析:
    的頭像 發(fā)表于 10-11 10:12 ?268次閱讀

    服務(wù)器部署k8s需要什么配置?

    服務(wù)器部署K8s需要至少2核CPU、4GB內(nèi)存、50GBSSD存儲(chǔ)的主節(jié)點(diǎn)用于管理集群,工作節(jié)點(diǎn)建議至少2核CPU、2GB內(nèi)存、20GBSSD。還需安裝Docker,選擇兼容的Kubernetes版本,配置網(wǎng)絡(luò)插件,以及確保系
    的頭像 發(fā)表于 10-09 15:31 ?217次閱讀

    納尼?自建K8s集群日志收集還能通過(guò)JMQ保存到JES

    作者:京東科技 劉恩浩 一、背景 基于K8s集群的私有化交付方案中,日志收集采用了ilogtail+logstash+kafka+es方案,其中ilogtail負(fù)責(zé)日志收集,logstash負(fù)責(zé)對(duì)數(shù)
    的頭像 發(fā)表于 09-30 14:45 ?221次閱讀

    常用的k8s容器網(wǎng)絡(luò)模式有哪些?

    常用的k8s容器網(wǎng)絡(luò)模式包括Bridge模式、Host模式、Overlay模式、Flannel模式、CNI(ContainerNetworkInterface)模式。K8s的容器網(wǎng)絡(luò)模式多種多樣
    的頭像 發(fā)表于 09-19 11:29 ?255次閱讀

    K8S集群中使用JDOS KMS服務(wù)對(duì)敏感數(shù)據(jù)安全加密

    基本概念 KMS,Key Management Service,即密鑰管理服務(wù),在K8S集群中,以驅(qū)動(dòng)和插件的形式啟用對(duì)Secret,Configmap進(jìn)行加密。以保護(hù)敏感數(shù)據(jù), 驅(qū)動(dòng)和插件需要
    的頭像 發(fā)表于 08-09 16:00 ?245次閱讀
    <b class='flag-5'>K8S</b><b class='flag-5'>集群</b>中使用JDOS KMS<b class='flag-5'>服務(wù)</b>對(duì)敏感數(shù)據(jù)安全加密

    K8S學(xué)習(xí)教程三:在PetaExpress KubeSphere 容器部署 Wiki 系統(tǒng) wiki.js 并啟用中文全文檢索

    K8S學(xué)習(xí)教程(三):在PetaExpress KubeSphere 容器部署 Wiki 系統(tǒng) wiki.js 并啟用中文全文檢索? 。
    的頭像 發(fā)表于 07-08 17:03 ?660次閱讀
    <b class='flag-5'>K8S</b>學(xué)習(xí)教程三:在PetaExpress KubeSphere 容器部署 Wiki 系統(tǒng) wiki.js 并啟用中文全文檢索

    K8S學(xué)習(xí)教程(二):在 PetaExpress KubeSphere容器平臺(tái)部署高可用 Redis 集群

    并且需要手動(dòng)重啟節(jié)點(diǎn),相較之下,使用 PetaExpress 提供的 Kubernetes(k8s) 服務(wù) 進(jìn)行 Redis 集群的部署,則展現(xiàn)出了顯著的優(yōu)勢(shì): 1、安裝便捷:使用鏡像或者 yaml 配置文件即可一件安裝,極大地
    的頭像 發(fā)表于 07-03 15:30 ?784次閱讀
    <b class='flag-5'>K8S</b>學(xué)習(xí)教程(二):在 PetaExpress KubeSphere容器平臺(tái)部署高可用 Redis <b class='flag-5'>集群</b>

     K8S學(xué)習(xí)教程一:使用PetaExpress云服務(wù)器安裝Minikube 集群

    使得開(kāi)發(fā)人員能夠在本地機(jī)器上輕松創(chuàng)建一個(gè)單節(jié)點(diǎn)的 Kubernetes 集群,從而方便開(kāi)發(fā)、測(cè)試和學(xué)習(xí) Kubernetes。 我們看下如何使用PetaExpress云服務(wù)器安裝Minikube 集群
    的頭像 發(fā)表于 07-01 15:41 ?384次閱讀
     <b class='flag-5'>K8S</b>學(xué)習(xí)教程一:使用PetaExpress云<b class='flag-5'>服務(wù)</b>器安裝Minikube <b class='flag-5'>集群</b>

    淺析Ranther管理K8S集群

    Rancher 基于 Kubernetes 添加了新的功能,包括統(tǒng)一所有集群的身份驗(yàn)證和 RBAC,讓系統(tǒng)管理員從一個(gè)位置控制全部集群的訪問(wèn)。
    的頭像 發(fā)表于 01-21 10:28 ?908次閱讀
    淺析Ranther管理<b class='flag-5'>K8S</b><b class='flag-5'>集群</b>

    Java微服務(wù)隨機(jī)掉線排查過(guò)程簡(jiǎn)析

    我們的業(yè)務(wù)共使用 11 臺(tái)(阿里云)服務(wù)器,使用 SpringcloudAlibaba 構(gòu)建微服務(wù)集群, 共計(jì) 60 個(gè)微服務(wù), 全部注冊(cè)在同一個(gè) Nacos
    的頭像 發(fā)表于 01-13 17:41 ?954次閱讀
    Java<b class='flag-5'>微服務(wù)</b>隨機(jī)掉線排查過(guò)程簡(jiǎn)析