加入收藏 | 设为首页 | 会员中心 | 我要投稿 衡阳站长网 (https://www.0734zz.cn/)- 数据集成、设备管理、备份、数据加密、智能搜索!
当前位置: 首页 > 云计算 > 正文

如何对Pod内容器实行Remote Debug

发布时间:2022-06-16 11:04:53 所属栏目:云计算 来源:互联网
导读:在一个面试场景中,就 debug 问题,一般会出现下面的对话: 二哥:你平时开发的时候是用什么方法 debug ? 应聘者:看日志。 二哥:万一 log level 没设对或者关键的地方没有加 log 怎么办呢? 应聘者:那就改代码,加 log ,重启服务,然后继续看日志。 先不
  在一个面试场景中,就 debug 问题,一般会出现下面的对话:
 
  二哥:你平时开发的时候是用什么方法 debug ?
 
  应聘者:看日志。
 
  二哥:万一 log level 没设对或者关键的地方没有加 log 怎么办呢?
 
  应聘者:那就改代码,加 log ,重启服务,然后继续看日志。
 
  先不谈通过看 log 来 debug 的效率问题,在 VM 上这样搞尚且可行,可当我们把应用容器化并让 K8s 管理后,怎么办呢?我们都知道在 Pod 里是没法方便地通过执行类似 systemctl 或 monit 等命令来重启应用的,那继续用看日志的方式的话,就剩下一条路了:
 
  改代码,加 log。
  commit 到 git。
  CI / CD。
  如果 log 没有加对,或者想看一下某一个函数调用的返回值,那从步骤1开始重头再来。
  um, 看上去挺累的样子。CI / CD 和 K8s 也被折腾得够呛。二哥稍微有点强迫症,不能忍受这么折磨人的 debug 方式。另外,相比人肉看 Log,通过调试器的方式来 debug 更优雅、更快捷,也更能激发RD的想象力。最重要的是,通过调试器debug会倒逼 RD 从代码调用逻辑、和 OS 交互等多角度思考问题。比如会设断点不难,难的是知道何时设断点,把断点设在哪里最合适。“道—法—术—器—势”,是老子《道德经》的精髓思想。本文讲的其实是“术”和“器”,但二哥想说“道”更本质,也更重要,它是核心思想、理念、本质规律。强烈建议好奇心重的同学多思考一下这些“术”背后的实现原理。二哥通过一个示例给老铁们演示一下,如何从本地机器远程调试 Pod 里面的应用。应用本身非常简单,是用 Node.js 写的一段 http server。对于其它语言写的应用,你肯定能找到变通方法。
 
  一、准备工作,排除干扰项
  下面所列的准备工作是为了在调试过程中不要引入过多的干扰因素,让我们把精力聚焦在问题本身。二哥友情提醒:可别在生产环境干这个哦。
 
  为了方便调试,我们会对 Deployment / ReplicaSet / StatefulSet / DaemonSet 等 workload resource 做一些修改。修改完后,需要恢复原样,所以我们得记得修改前的现场是啥。
 
  复制
  # 得到最近一次 depoyment REVISION 为 4,留作后面还原使用
  $ kubectl rollout history deployment/nodejs -n lancehbzhang
  REVISION CHANGE-CAUSE
  
  三、 K8s port-forward
  下面的问题是:如何才能把本地 debugger 发出的调试命令连进来?
 
  方法其实有不少。比如通过一个 Load Balancer 类型的 service 。不过这种方法比较费钱,据我所知,腾讯云的 Load Balancer 价格不菲。这里二哥介绍一个既免费又通用的方法。

(编辑:衡阳站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读