QCon 演讲火热征集中,快来分享技术实践与洞见! 了解详情
写点什么

运行在 Kubernetes 上的应用程序的 Java 远程调试

  • 2020-03-12
  • 本文字数:1077 字

    阅读完需:约 4 分钟

运行在Kubernetes上的应用程序的Java远程调试

Kubernetes1.2 版本最近刚发布就立马成为容器(Docker,Rocket,Hyper 等等的事实上的集群管理路径。这里是一些关于 1.2 版本的有趣特点:


  • 集群现在可以扩容到 30,000 个容器一个集群

  • 优雅的关闭节点,过渡到集群里运行的其他节点

  • 自定义指定指标作为自动扩容的基础

  • 动态配置管理

  • 当你在本地笔记本上面开发微服务的时候,你可以使用 Kubernetes 来运行你的本地 Docker 容器,并且在你配置你的应用程序的时候,得到开发人员/QA/生产过程等相似过程。

  • 对于 Java 开发人员来说,有一件事肯定会发生:就是你如何看日志、做远程调试以及如何追踪协议栈。文章以下的内容是一些小提示:


为你的 Pod 跟踪日志


在一些集群管理系统中,你基本上不得不查找应用程序的本地 IP(如果是在容器里运行的话),无论如何都要 ssh 到它,然后找到日志并且跟踪它。有了 Kubernetes,你就不用必须做上述的任意事情了。除了你正在运行的那台机器(也就是你运行 Kubernetes client 的地方),你可以按照下面的来:


在你的集群里列出以下 pods



追踪日志


现在选择你想要追踪的日志,并且运行它!



如果必须的话,通过 Shell 连接


如果你由于某些原因必须登陆到 pod(在文件系统中试探一下,查看其它配置文件等等)



虚拟机远程调试你的应用程序


这样的话,查看你的应用程序上面发生了什么就会变得十分方便。为了做到这个,你只要做跟今天做的一样的事情就好了。当你 bootstrap 你的 JVM,你应该有方法启动 JVM 调试。例如,HawtApp Maven plugin 就是一个简单的 mvn 插件,可以将 Java Main 作为可执行的、简单的、灵活的 bootrtrap bin/run.sh 脚本(或者 windows 的批处理文件),允许你控制路径和通过环境变量调试。


令 Bootstrap Java 可以暴露到调试端口


比如:



通过 Kubernetes 密钥清单在 docker 容器里定义调试端口


现在你需要在你的 Docker 容器里面通过你的 Kubernetes 密钥清单(json/yaml)曝光端口 5005 (在这个例子里)



注意,我们已经添加了一个 env 变量到 Kubernetes 密钥清单文件到可以控制我们是否想要远程调试打开或者关闭(true/false)。Bootstrap 脚本(以上所述)会检查 env 变量,并且你可以通过 kube 密钥清单控制它(现在 Kube1.2 有了 ConfigMap,或者 OpenShift templates)。


最后一步是代理服务调试端口到你的本地机器。如果你在本地运行 kubectlclient,就会十分容易:


列出集群里的 pods



代理 pod 到一个特殊端口


上述代码会从你的本地环境(5005)端口转发到 pod 的端口 5005。现在你可以将你的远程调试器附加到 localhost:5005。


本文转载自才云 Caicloud 公众号。


原文链接:https://mp.weixin.qq.com/s/juz9Lc_WwFUSeM2uS2Qm_Q


2020-03-12 22:501424

评论

发布
暂无评论
发现更多内容

教你使用CANN将照片一键转换成卡通风格

华为云开发者联盟

人工智能 CANN 昇腾 卡通

冲刺金九银十!2022最新Java核心知识大全吃透轻松年薪50万

了不起的程序猿

Java java程序员 java面试 java 编程

网易游戏 Flink SQL 平台化实践

Apache Flink

大数据 flink 编程 流计算 实时计算

STEPN链游系统开发模式详解(运动赚钱模式)

开发微hkkf5566

2022年中国娱乐直播市场年度综合分析

易观分析

直播市场

实操演示:如何用 ONES 制定 Scrum 迭代计划?

万事ONES

如何做好安全开发?

华为云开发者联盟

云计算 开源 安全 开发

开源轻量级 IM 框架 MobileIMSDK v6.2 发布

JackJiang

网络编程 Netty 即时通讯 im开发 开源im

如何在Docker部署安装ETL调度运维工具TASKCTL

敏捷调度TASKCTL

DevOps 大数据运维 Kafka ETL TASKCTL Docker 镜像

汇聚开发者智慧 夯实数据库产业根基

科技热闻

面试官:Redis&MySQL的三种缓存更新策略是怎样的?

Java全栈架构师

Java MySQL redis 程序员 程序人生

云图说丨数字资产链:您的数字资产产权保护神

华为云开发者联盟

区块链 云计算 开发 开发工具

银行业数据安全建设专题分析

易观分析

银行安全

基于 SPICE 协议的硬编推流整合方案在云游戏中的应用

字节跳动视频云技术团队

视频编解码 云游戏

Python网页解析库:用requests-html爬取网页

和牛

测试

数据治理新动态:欧盟发布数据治理研究报告,对国内有何影响

雨果

数据治理

云服务器ECS老用户专享,10余款实例新购低至3.6折

阿里云弹性计算

阿里云 云服务器 ECS

连续最大和与判断回文

未见花闻

7月月更

前端之路React学习笔记

恒山其若陋兮

7月月更

关于研发效能(41/100)

hackstoic

团队管理

C2B模式下优惠券架构演进

转转技术团队

Java 架构 Elastic Search

接口调试还能这么玩?

Liam

前后端分离 Postman API 接口开发 前后端

2022年移动应用运营增长洞察白皮书:流量红利消退时代的“破局”之道

科技汇

50个名额限量开放|带着OceanBase年度发布会的消息走来了!

OceanBase 数据库

百度、阿里、腾讯,谁最先倒下?

雨果

数据中台 数据服务

AIOps 还是 APM,企业用户应如何作出选择?

云智慧AIOps社区

APM 智能运维AIOps

话实践,行实干,成实事:“巡礼”数字化的中国大地

脑极体

Ceph在手天下我有!

穿过生命散发芬芳

Ceph 7月月更

用代码画时序图!简直太爽了

冉然学Java

Java 代码 UML

融云推出实时社区解决方案,垂直兴趣社交「高级玩家」上线

融云 RongCloud

社交网络 即时通讯IM

BigQuery和Snowflake谁更适合你?两大数据仓库8个角度逐一对比

雨果

数据中台 数据仓库 DaaS DaaS数据即服务 数据即服务

运行在Kubernetes上的应用程序的Java远程调试_行业深度_才云科技_InfoQ精选文章