0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

Linux爱好者 来源:Linux爱好者 作者:Linux爱好者 2021-02-02 14:39 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

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

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

查看service external endpoint并跑些测试:

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

使用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 的请求:

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

完成。希望你可以从中获益,为你调试微服务提速。

责任编辑:xj

原文标题:K8S 集群内 Debug 微服务的最佳实践

文章出处:【微信公众号:Linux爱好者】欢迎添加关注!文章转载请注明出处。


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 集群
    +关注

    关注

    0

    文章

    130

    浏览量

    17595
  • DEBUG
    +关注

    关注

    3

    文章

    95

    浏览量

    21256
  • 微服务器
    +关注

    关注

    0

    文章

    13

    浏览量

    8309

原文标题:K8S 集群内 Debug 微服务的最佳实践

文章出处:【微信号:LinuxHub,微信公众号:Linux爱好者】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    K8s集群性能调优实战技巧

    大多数团队在遇到K8s性能问题时,第一反应是"加机器"。但根据我对超过50个生产集群的分析,80%的性能问题源于配置不当,而非资源不足。
    的头像 发表于 09-08 09:36 483次阅读

    K8s存储类设计与Ceph集成实战

    在云原生时代,存储是制约应用性能的关键瓶颈。本文将带你深入理解K8s存储类的设计原理,并手把手实现与Ceph的完美集成,让你的集群存储性能提升300%!
    的头像 发表于 08-22 11:50 600次阅读

    高效管理Kubernetes集群的实用技巧

    作为一名经验丰富的运维工程师,我深知在日常的Kubernetes集群管理中,熟练掌握kubectl命令是提升工作效率的关键。今天,我将分享15个经过实战检验的kubectl实用技巧,帮助你像艺术家一样优雅地管理K8s集群
    的头像 发表于 08-13 15:57 601次阅读

    Linux内核参数调优方案

    在高并发微服务环境中,网络性能往往成为K8s集群的瓶颈。本文将深入探讨如何通过精细化的Linux内核参数调优,让你的K8s节点网络性能提升30%以上。
    的头像 发表于 08-06 17:50 706次阅读

    解析K8S实用命令

    前言: 作为运维工程师,掌握 Kubernetes 命令行工具是日常工作的核心技能。本文将深入解析 K8S 最实用的命令,从基础操作到高级技巧,助你成为容器化集群管理专家。
    的头像 发表于 07-24 14:07 531次阅读

    k8s权限管理指南说明

    我们在目前的k8s集群环境里面,只能在master节点上执行kubectl的一些命令,在其他节点上执行就会报错。
    的头像 发表于 06-26 14:06 538次阅读

    什么是 K8S,如何使用 K8S

    连续性。 适用场景: 大规模容器集群管理。 微服务架构的部署与运维。 需要弹性伸缩的在线服务。 多租户环境(如开发测试、生产环境隔离)。 总的来说,K8S 通过标准化容器管理,极
    发表于 06-25 06:45

    k8s网络的基本介绍

    Kubernetes网络是指在Kubernetes集群中不同组件之间进行通信和交互的网络架构。
    的头像 发表于 06-16 13:42 617次阅读

    Ubuntu K8s集群安全加固方案

    在Ubuntu系统上部署Kubernetes集群时,若服务器拥有外网IP,需采取多层次安全防护措施以确保集群安全。本方案通过系统防火墙配置、TLS通信启用、网络策略实施和RBAC权限控制四个核心层
    的头像 发表于 05-12 16:17 617次阅读

    简述K3SK8S的区别

    K3s 是CNCF 认证的 Kubernetes 发行版和Sandbox项目,专为低资源环境而设计。由 Rancher Labs 维护着 K3s
    的头像 发表于 04-18 10:27 1394次阅读

    k8s集群安全机制说明

    Kubernetes 作为一个分布式集群的管理工具,保证集群的安全性是其一个重要的任务。API Server 是集群内部各个组件通信的中介, 也是外部控制的入口。所以 Kubernetes 的安全机制基本就是围绕保护 API S
    的头像 发表于 04-03 14:09 602次阅读

    如何通过Docker和K8S集群实现高效调用GPU

    在有GPU资源的主机安装,改主机作为K8S集群的Node。
    的头像 发表于 03-18 16:50 925次阅读
    如何通过Docker和<b class='flag-5'>K8S</b><b class='flag-5'>集群</b>实现高效调用GPU

    搭建k8s需要买几台云主机?

    至少3台。搭建Kubernetes(K8s集群所需的云主机数量因实际需求而异。一个基本的K8s集群通常需要至少3台云主机,包括1个Master节点和2个Worker节点。如果考虑高可
    的头像 发表于 02-20 10:40 877次阅读

    自建K8S集群认证过期

    今天使用kubectl命令查看pod信息时,一直正常运行的k8s集群突然不能访问了,输入任何命令都提示以下报错。
    的头像 发表于 02-07 12:32 644次阅读

    k8s和docker区别对比,哪个更强?

    Docker和Kubernetes(K8s)是容器化技术的两大流行工具。Docker关注构建和打包容器,适用于本地开发和单主机管理;而K8s则提供容器编排和管理平台,适用于多主机或云环境,具备自动化
    的头像 发表于 12-11 13:55 1121次阅读