利用 Tanzu Application Platform 实现应用云调试与面向开发者的应用运行状态监控

61770cb282bb8f689a23415e999280d7.jpeg

题图摄于北京三环路

本篇转发TAP系列文章之十一,Tanzu Application Platform (TAP) 的应用云调试与运行状态监控。

从云原生平台的广泛应用谈起......

云原生平台,特别是以 Kubernetes 为代表的容器调度平台,已经得到了非常快速的普及。各行业企业的数据中心,纷纷调研并落地适合各自企业现状的 Kubernetes 云原生应用平台;但是遗憾的是,很少有企业在落地并实施Kubernetes 云原生应用平台的时候,考虑如何降低由于云原生平台所带来的开发阶段的额外应用开发成本。

我们可以简单的将开发阶段(或者定义为开发闭环 Inner Loop)的活动,分成下面几个主要板块:

5e19240a1605960d6ce546ae8f481195.png

Learn的阶段

随着微服务软件架构与 DevOps 的兴起,以及互联网大厂所引领的 “you build it, you run it”,这样的理念的推行,应用开发团队的职责,越来越向传统基础架构所负责的领域延展,包括:设计,开发,测试,打包,运行应用。

为了有效的实践这样的理论,应用开发团队需要及早学习并熟悉应用实际的物理运行计算环境;在云原生 K8S 平台的广泛普及下,意味着开发团队需要学习并熟悉基于 K8S 的应用部署平台,利用这样的平台进行应用的开发、调试,甚至进而打包并部署应用到 K8S 环境中,并提供精益运维的支持;

可现实是,随着 K8S 平台的实践,越来越多的开发团队意识到,直接基于 K8S 平台提供的接口进行开发活动,严重影响开发团队的开发效率;因此,退而求其次,开发环境采用桌面版的容器环境,例如:Docker/Docker Compose,集成测试、生产环境用 K8S 平台。这种环境的差异,特别是在微服务架构的应用开发、部署、运维场景下,为后期精益运维引入了巨大的风险;更严重的是,有的应用系统非常的复杂,桌面版的容器环境没法满足应用算力的需求,不得不依赖远程的 K8S 平台进行开发活动,仍然会产生开发效率下降的问题。

Tanzu Application Platform 提供了一个服务层,将 K8S 的接口屏蔽在了这个服务层之下;利用 TAP 的服务层接口,开发团队可以快速的开展应用的日常开发、测试、部署等活动。

需要说明的是,本文主要关注在开发,调试阶段如何利用 TAP 服务层的快速调试 API,帮助开发工程师,利用本地或远程的 K8S 进行应用的开发,调试活动;如果需要了解 TAP 服务层提供的推送应用 API、Bind Backing Service 等 API 的需求,请参考系列文章的其它主题。

●Discovery and Start 阶段

开发团队在这个阶段,通过 DDD(Domain Driven Design)学习并形成各个子系统的边界、Boris 分析子系统间的调用与依赖、SnapE 记录子系统的接口规格与描述;同时,学习部署系统的计算平台的基本功能已帮助解决应用系统的可用性等非功能特性;对于基于 Kubernetes 平台部署的云原生应用系统,意味着开发团队需要分配宝贵的开发时间,让团队成员熟悉 Kubernetes 平台的基本功能。

Tanzu Application Platform 可以极大的降低开发团队成员学习 Kubernetes 的门槛,将应用在 Kubernetes 环境中的开发、调试、部署与访问集成到开发团队熟悉并广泛使用的 IDE(Integrated Development Environment)中,实现降低开发工程师基于 Kubernetes 开发应用的门槛。

●Code、Test、Debug 工作流

这个阶段是开发团队的主要日常工作。一个普遍的广为接受的想法和目标,就是尽量让开发团队专注于领域需求的业务代码开发。

但我们发现在基于 K8S 云原生平台的开发过程中,很少有开发团队在日常的开发中,基于 K8S 平台来进行日常的开发、调试等工作流程。一个最为朴素的原因,从修改代码,到构建 OCI image 镜像,到装配 K8S yaml,再到最后的部署,发布应用,访问代码实现修改的结果,这一系列操作下来,至少需要 15 到 20 分钟。更麻烦的是如何利用开发工程师熟悉的 IDE 进行应用的 K8S 远程断点调试呢?妥协的结果,就是开发团队仍然利用已有的工具,利用桌面环境,利用 Docker 工具栈,开展 Code、Test、Debug 的日常工作。对于复杂的微服务应用,或者受限于外部系统依赖, 再或者受限于桌面算力,必然影响开发团队的开发效率。

Tanzu Application Platform 专门针对开发团队使用 K8S 云原生环境进行应用的开发、测试、调试的场景,利用开源社区提供的 Tilt 工具,结合 TAP Developer Tools Extensions 以及 IDE 开发工具 3 重优势,尝试解决开发团队有效利用 K8S 进行微服务开发、测试、Debug 的日常需求。这也是本文重点分享的内容。

利用 TAP 实现应用云调试

基于之前的背景铺垫,期待大家能够认识到,在云原生下的微服务应用开发循环(inner loop)阶段,在必要的情况下,利用与应用部署的 QA 或者预生产环境相近似的 Developer K8S 环境进行开发、测试、调试,能够极大的提升开发效率同时减少未来可能因为环境的差异导致的测试、部署上的风险。

接下来,我们会利用 Tanzu Application Platform 应用开发调试 Developer API,以及开源 Tilt 工具、VS code IDE 、Tanzu Developer Tools Plugin,给大家演示如何利用 TAP 所提供的工具链,帮助开发团队实现快速,便捷的 K8S 应用云调试。

安装准备工作

如下图所示,在利用 TAP 实现应用的云调制之前,需要准备一下 TAP 环境以及必要工具:

准备基于 Dev 角色的桌面或远程 TAP Enabled K8S 集群

关于基于角色的 TAP Dev 环境安装,请参考系列文章的 TAP 安装篇,本文不在赘述;

桌面 IDE 开发环境的准备,目前 TAP v1.1 支持的 IDE 是支持 Java 开发环境的 VSCode,后续版本会继续加入 Eclipse 与 Intellij 的 IDE 的 plugin 支持;

1.通过 Tanzu Network 官方网站下载 Tanzu Developer Tools for Visual Studio Code;

2.打开 VS Code IDE

7349a982facab723e26e9f8453f6ddfa.jpeg

a.运行“Extensions: Install from VSIX…”.

b.选择扩展文件:tanzu-vscode-extension.vsix.

13721d208d33a7e6b86e03a03fcbe17d.png

65df0262d1bae755fde4a3b5c7b68ebd.png

安装成功后,Reload VSCode

注意:VSCode 的 Tanzu Application Platform Plugin 的安装详情请参考官方手册;

正常安装 Tanzu Developer Tools extension 会同时安装如下 Plugin:

-Debugger for Java

-Language Support for Java(™) by Red Hat

-YAML extensions

注意:如果任何依赖的 Plugin 安装失败,请参考官方安装手册,重新手工安装这 3 个 Plugin;

3.请按下图操作,确认 Language Support for Java is running in Standard Mode。

b59a59c2fcf15db454c40e6534cb4a85.png

·在桌面环境中安装 Tilt v0.24.0 或以上版本;

·VSCode 的 Tanzu Developer Tools extension 的全局配置

1.如果您的桌面环境可以访问多个 K8S 集群,请启动 VSCode 的时候,确保其引用正确的安装有 TAP 的 K8S 环境;

2.启动 VSCode 后,点击菜单 File -> Preferences -> Settings -> Extensions -> Tanzu ;

3.在当前的配置页面,配置如下参数:

§  Source Image (必选配置):TAP Developer Plugin 会将当前项目环境的源代码项目打包,格式为 OCI image 并推送到本地镜像仓库。这么做的目的是对比前后项目的变化,已决定如何快速更新远程 K8S 环境中运行的应用。配置举例:

your-registry.io/project/tanzu-java-web-app-source

§  Local Path (可选配置):配置当前项目环境的本地路径,默认配置:current directory

§  Namespace (可选配置):配置应用推送的 K8S Namespace 的租户空间,默认配置:当前桌面环境 kubeconfig 文件中设定的 Namespace。

项目工程 Tiltfile 配置文件

通过 Tanzu Developer Tools Extension 以及 本地 Tilt 工具,进行 Java 应用的云端(K8S)调试,需要准备一个叫 Tiltfile 的配置文件;这个文件可以利用 Tanzu Developer Tools Extension 提供的模板进行创建和定制化;

如图所示:

ab8ff1392d7563664d44e9c3fb473c1a.png

1.在项目工程的根目录,创建一个叫 Tiltfile 的空白文件;

2.在文件的空白处,敲入 ti,Tanzu Developer Tools Extension 会自动提示 Tiltfile 的模板,Tab 可以自动填充;

3.根据项目的实际情况,进行模板的定制化,如下图:

f188ab538b2b4c2775562039e2381ca7.png

利用 TAP 进行 Java 应用的云调试 

远程应用自动更新

应用/服务开发工程师日常开发工作,最经常的工作就是编写代码、编译、打包、部署与验证结果。这样的工作流程在云原生(K8S)的开发平台下,变的耗时耗力;下面我们演示利用 TAP Developer Tools Extensions 使得开发工程师在云原生的环境下,可以像传统开发环境一样的进行日常的开发工作。

1.启动 Tilt 环境,如下图:

9be31b4c70ae51520dc14436488b15df.jpeg

2.(Optional) 启动 Tilt Dashboard

2e2f99aae1d750415c6b33b1ed184e77.png

de5e864e2e8f053d1ebdb0b386b6d687.png

f2a0890aad327c3bd484a4a32f141555.png

3.第一次启动应用调试,依赖项目的规模,以及 TAP 平台架构师提供的云环境的流水线的配置,需要一定的时间完成应用从构建,到部署,以及最后的访问;例如下图,是作者的 TAP 环境,应用部署的流水线配置:

0f7dfdb445cf582ec285ccc8a9fc1f70.png

注意:

尽管在本文,我们一直强调的是 TAP PaaS 平台如何帮助开发团队、开发工程师利用 TAP 快速开发、迭代云原生的应用程序;我们同时也考虑并实践如何利用 DevSecOps 的理念,将部分 Security、Ops 相关的工作,左移到开发阶段;作为 TAP 的平台架构师,可以将安全相关的工作,例如:代码 CVE 扫描、容器镜像扫描加入到开发阶段的开发、调试流水线中;一个显而易见的好处,在不影响开发工程师日常工作流程的前提下,提前将安全相关的最佳实践加入到开发阶段以减少后期因为安全、审计而导致的项目延期;

4.访问应用 URL

f654f1d8a22fb3c97f46a9c2c1d25a37.png

通过上图,可以看到,利用 TAP Developer Tools Extension,开发工程师无需被暴露在 K8S 云原生的环境下,就可以进行应用的开发与调试工作;

当然,如果确实需要利用 K8S 的 native 命令,进行调试,也可以方便的进行操作,如下:

1f9debdb924b892d65a01c56474505f1.png

5.应用开发的 Iterate,即修改代码,测试结果

例如:修改如下的代码

3c7e87b0ab98a8a7d0c976a1580d9ce4.png

fa1f23f25a65a5b5c3cfc9dfbaedb34f.png

b3c5d891b00cd611169ca9a2fb54a847.png

 5.至于具体的代码,重点关注红框中的时间 tag,我们可以观察到,从 Save 代码的变更,到访问 URL,只用了极短的时间 (4ms);经过测试,基本跟工程师利用本地环境进行开发、测试时间大体相同。

利用 TAP 进行 Java 应用的云调试 - 远程设置断点

断点调试,开发工程师开发应用最基本的技能与工作,在基于云原生(K8S)的环境下,变得异常的陌生与复杂。利用 TAP Developer Tools Extension for IDE (VSCode) 开发工程师可以在必要的情况下,利用 IDE 的断点调试能力,通过 TAP Developer Tools Extension,对运行在 K8S 云原生环境下的应用,进行类似桌面程序开发体验类似的云断点调试功能。

具体的操作如下:

1.IDE (VSCode) 的 TAP Developer Extension 的配置跟前文提到的过程一致;

2.利用 workload.yaml,右键功能菜单,选择 Tanzu: Java Debug Start;

d7e6335cf2d6a6dc46b99614e1e65bf9.jpeg

3.利用 IDE 的断点调试能力,进行正常的断点的设置,调试;如下图:

dc376404e0ba460f5273a5c15e83264c.png

利用 TAP 实现面向开发的应用运行状态监控

国内外互联网大厂,一直都在布道云原生 DevOps 或者 Google SRE,其中有一句最经典的话:”you build it, you run it”;但是具体到如何成功实践这样的理念,一个最朴素的需求:将生产环境中的应用运行状态展示给开发团队。这样的一个朴素的需求,其实对基础架构是非常有挑战的任务:

1.开发团队对运行中的应用需要展示什么样的信息?基础架构通常的集中观测/监控/预警平台提供的各种监控图表,Trace,Log 等信息,能否直接暴露给开发团队来使用?这种集中式的平台,培训工作如何展开?

2.运行在生产环境中的应用,在传统的基础架构部门的管理下,能否开放给开发团队成员去访问?会不会产生运维安全问题?

Tanzu Application Platform GUI 为开发团队提供了一个 ReadOnly 的、面向开发工程师的应用状态展示面板(Application Live View)。

在这里,ReadOnly 的目的显然是消除生产环境运维团队的顾虑,对于开发工程师来说,一个只读的应用运行状态展示面板,大多数的情况下,已经可以帮助开发团队开展故障排查,应用运行调优、产品精益等活动;另外,面向开发工程师的应用状态展示/监控面板,除了大家比较熟悉的 CPU 利用率、 Memory 使用趋势等常规指标以外,应用当时的请求 RPS、Response Time、Delay、线程池状态、应用运行时的环境变量等等,对开发工程师排查故障都是非常重要的信息。

另外,Tanzu Application Platform GUI 基于 Spotify 开源项目 Backstage 进行的定制化开发,意味着开发团队,可以基于 Backstage 的 Plugin 机制,定制符合自己团队、组织的应用运行状态展示面板;

下面的图示,是基于 TAP v1.1 为大家展示几个典型应用运行状态信息:

1.进入 SpringBoot 应用的部署 Pod 页面

ea50971f9f95b2a0663eeaf3732053eb.jpeg

2.通过 App Live View 从 Information Category 中选择你关心的运行状态信息;

211bc07b9160e7d5e730420c7f7d72f7.jpeg

9cd587e16fe5b91ed504828c58152bca.jpeg

3.下图展示应用运行时的 Env 信息,对应用故障排查至关重要:

4c1aa326ceeea60e60820f30eef5d086.jpeg

4.Log Levels 可在特殊情况下临时动态调整当前应用实例的 Log 输出级别;

dd6790c3abc500eed3d7a20372e87dae.png

5.SpringBoot Actuator 应用运行状态展示

ddf591cdc2f69de40555f8ce8dfb4724.jpeg

6.HTTP 请求状态展示

be464801a8d6c3334713f711a0209ab8.jpeg

更多的应用运行状态信息,读者可以尝试参考之前提供的 TAP 安装配置文档进行安装并体验,能够获取到比本文中提到的更多的应用检测状态信息的展示,并体会到 TAP 给企业级应用带来的可观测性的价值。

文章小结

基于云原生平台或者说 K8S 平台,进行应用的日常开发、调试,当前在业界还处于刚刚开始的阶段,但是发展非常迅猛;尽管目前很多的开发团队,特别是传统企业开发团队,利用桌面的计算环境进行开发还是当前的主流;但是我们已经注意到,越来越多的企业,在实践以微服务架构进行新业务应用的开发过程中,对利用工具、IDE 实现云调试也越来越期待;

VMware TAP PaaS 平台在支持开发人员实现应用程序的云调试的这种特性,能够给诸多企业用户软件开发人员带来更好的开发体验。

此外,Tanzu Application Platform 是一款面向开发的,高度可扩展的应用 PaaS 平台。还有很多“有趣”能力等待大家的发掘。请持续关注 TAP 系列文章的其它专题;

58e0eeaca8d4dcea9ab7932f8c5ddc96.png

作者简介  毕建华 

VMware 大中华区应用现代化部门高级解决方案架构师。多年来一直从事云原生相关领域工作,包括系统设计以及参与多种容器调度平台开发,部署,运维工作;包括,基于 Mesos、DCOS 平台,开发 Dbaas 框架;

参与 Kubernetes 开源项目KUDO 的开发与推广;

CNCF 认证 CKA 工程师;VMware 认证 Spring Professional 工程师


要想了解联邦学习、隐私计算、云原生和区块链等技术原理,请立即长按以下二维码,关注本公众号亨利笔记 ( henglibiji ),以免错过更新。

a2a799b3639fe550723f33efcdbd25ed.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值