网易首页 > 网易号 > 正文 申请入驻

使用 Kubernetes Maven 插件在 Java 中进行 Kubernetes 远程开发

0
分享至

在本文中,我们将探讨在 Kubernetes 之上开发 Java 应用程序时的一些痛点。我们将研究Eclipse JKube的Kubernetes Maven 插件中新添加的功能,它允许您在本地机器上运行的应用程序在 Kubernetes 集群中公开。

如果您还没有听说过 Eclipse JKube 或 Kubernetes Maven Plugin,我建议您先阅读以下 DZone 文章:

  1. DZone:使用 JKube Kubernetes Maven 插件将 Maven 应用程序部署到 Kubernetes
  2. DZone:使用 JKube Kubernetes Gradle 插件容器化 Gradle 应用程序并部署到 Kubernetes
目标听众:
  1. 这篇博文面向使用 Kubernetes 并熟悉容器化应用程序开发的 Java 开发人员。我们假设读者有使用 Docker 和 Kubernetes 的经验。
  2. Eclipse JKube 的 Kubernetes 远程开发功能适用于开发与 Kubernetes 中的多个微服务通信的 Java 应用程序的 Java 开发人员,这很难在本地计算机上复制。
当前解决方案
  1. Docker Compose: 您可以提供自己的 YAML 文件来配置您的应用程序服务,并通过您提供的 YAML 配置启动所有服务。这仅限于 Docker 环境。有时,由于资源限制,这些服务可能无法启动。此外,我们可能不允许在本地复制敏感数据。
  2. 开发服务:一些流行的框架还支持在开发/测试环境中自动提供依赖服务。开发人员只需关心启用此功能,框架负责启动服务并将其与您的应用程序连接。这也仅限于 Docker 环境。
  3. 构建和部署工具: 使用 Kubernetes 相关工具部署所有依赖服务,然后将您的应用程序部署到 Kubernetes。
    • 与以前仅限于 Docker 的替代方案相比并不流畅
    • 在每个小变化上构建和部署应用程序会导致开发迭代变慢
什么是 Eclipse JKube Kubernetes 远程开发

我们在 Eclipse Cloud Tooling 的团队专注于创建工具,以简化跨分布式服务的开发人员活动和开发工作流程。在Kubernetes Maven Plugin上工作和测试时,我们注意到在本地开发的同时重复构建和部署应用程序到 Kubernetes 并不是最有效的工作方式。

在Kubernetes Maven Plugin v1.10.1 中,我们添加了一个新的目标k8s:remote-dev。这个目标试图通过以下方式简化跨分布式服务的 Java 开发人员工作流程:

  1. 使用在 Kubernetes 集群中运行的远程服务
  2. 实时应用程序编码,同时与 Kubernetes 集群中运行的其他服务交互
  3. 公开本地运行的应用程序或通过连接到远程服务
为什么选择 Kubernetes 远程开发?

让我们考虑一个场景,我们正在编写一个试图从其他微服务获取笑话字符串的笑话微服务。下面是一张图表,让您更好地理解:

图 1:使用两个现有服务的 Simple Joke 应用程序

自定义笑话服务是我们的主要应用程序,它有一个端点 /random-joke。它分别通过 /chuck-norris 和 /joke 端点依赖于另外两个微服务 ChuckNorris 和 Jokes。用户使用 /random-joke 端点请求一个笑话,我们的应用程序从两个微服务之一随机获取一个笑话字符串。

为了开发和测试我们的应用程序,我们需要分别访问这些依赖的 ChuckNorris 和 Jokes 服务。让我们看看开发人员的工作流程是什么样的:

  1. 在本地开发和测试 Custom Joke 微服务时,开发人员不得不在本地一次又一次地设置依赖的微服务。
  2. 为了验证应用程序在 Kubernetes 中是否正常工作。开发人员必须在每次开发迭代中构建、打包 Custom Joke 应用程序并将其部署到 Kubernetes。
  3. 依赖服务(ChuckNorris 和 Joke)可能是相当重量级的服务,并且可能有一些它们自己的依赖服务。在开发人员的环境中本地设置这些可能并不简单。
在本地公开远程 Kubernetes 服务

假设您有两个应用程序已经在 Kubernetes 集群中运行,您当前的应用程序依赖于它们:

让我们将运行在 Kubernetes 集群中的这些远程服务暴露给我们的本地机器。下面是一张图表,让你更好地理解:

图二:JKube远程开发简化远程开发

为此,我们需要为我们的插件提供 XML 配置以公开这些服务:


org.eclipse.jkube
kubernetes-maven-plugin
${jkube.version}
service1
8080
8081
service2
8080
8082

上面的配置正在做这两件事:

  1. 在本地计算机上的端口 8081 上公开名为 service1 的 Kubernetes 服务
  2. 在本地计算机上的端口 8082 上公开名为 service2 的 Kubernetes 服务

运行 Kubernetes 远程开发目标:

$ mvn k8s:remote-dev
[INFO] Scanning for projects...
[INFO]
[INFO] -----------< org.eclipse.jkube.demos:random-jokes-generator >-----------
[INFO] Building random-jokes-generator 1.0.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- kubernetes-maven-plugin:1.10.1:remote-dev (default-cli) @ random-jokes-generator ---
[INFO] k8s: Waiting for JKube remote development Pod [jkube-remote-dev-9cafc1e1-054b-4fab-8f4e-b4345056478e] to be ready...
[INFO] k8s: JKube remote development Pod [jkube-remote-dev-9cafc1e1-054b-4fab-8f4e-b4345056478e] is ready
[INFO] k8s: Opening remote development connection to Kubernetes: jkube-remote-dev-9cafc1e1-054b-4fab-8f4e-b4345056478e:54252
[INFO] k8s: Kubernetes Service service1:8080 is now available at local port 8081

[INFO] k8s: Kubernetes Service service2:8080 is now available at local port 8082尝试在端口上访问本地可用的服务:


$ curl localhost:8081/
Chuck Norris's OSI network model has only one layer - Physical.
$ curl localhost:8082/
Why do Java programmers have to wear glasses? Because they don't C#.

如您所见,您可以分别在端口 8081 和 8082 上本地访问 Kubernetes 服务 service1 和 service2。

结论

在本文中,您了解了 Eclipse JKube 的 Kubernetes Maven 插件的远程开发目标,以及如何将本地应用程序公开到 Kubernetes 集群,反之亦然。

如果您有兴趣了解有关 Eclipse JKube 的更多信息,可以查看以下链接:

  1. Documentation
  2. Github Issue Tracker
  3. StackOverflow
  4. YouTube Channel
  5. Twitter
  6. Gitter Chat

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
纳斯达克中国金龙指数收跌1.27% 百度跌逾7%

纳斯达克中国金龙指数收跌1.27% 百度跌逾7%

每日经济新闻
2025-02-19 05:09:36
诺兰新片《奥德赛》首曝剧照 达蒙饰奥德修斯

诺兰新片《奥德赛》首曝剧照 达蒙饰奥德修斯

3DM游戏
2025-02-18 08:47:34
网友列出被AI弄得比较惨的12个行业!

网友列出被AI弄得比较惨的12个行业!

去非
2025-02-17 08:40:52
开学第一天,陈金山调研华东师大

开学第一天,陈金山调研华东师大

上观新闻
2025-02-18 22:23:07
东莞往事:工厂大姐的情欲,让我叹为观止

东莞往事:工厂大姐的情欲,让我叹为观止

三惊胖爷
2025-02-12 19:38:39
媒体人谈国青潜在对手:沙特、伊拉克实力半斤八两,但后者冲击力更强

媒体人谈国青潜在对手:沙特、伊拉克实力半斤八两,但后者冲击力更强

雷速体育
2025-02-18 22:30:17
雷声大作,证监会的“立案调查”,6.78万股东“中招”了!

雷声大作,证监会的“立案调查”,6.78万股东“中招”了!

风口招财猪
2025-02-19 00:51:01
封杀? 华为拿出三项里程碑式成果, 绝境翻盘!

封杀? 华为拿出三项里程碑式成果, 绝境翻盘!

粤语音乐喷泉
2025-02-19 05:32:28
拜登称“中国永远不会超过美国” 外交部回应

拜登称“中国永远不会超过美国” 外交部回应

财联社
2025-01-14 15:51:11
新冠病毒两大结局已成定局,提醒:60岁以上的老年人要特别注意

新冠病毒两大结局已成定局,提醒:60岁以上的老年人要特别注意

老鹈爱历史
2024-12-02 15:12:33
63岁阿姨说:和再婚老伴同居后才懂得,男人老了还要找老伴的原因

63岁阿姨说:和再婚老伴同居后才懂得,男人老了还要找老伴的原因

烙任情感
2025-02-17 15:52:21
至少活了100年?披金“清道夫王”现身福建,男子拍照留念后放生

至少活了100年?披金“清道夫王”现身福建,男子拍照留念后放生

文雅笔墨
2025-02-17 17:15:55
2025款全新雷克萨斯ES太炸裂,全面超越预期!

2025款全新雷克萨斯ES太炸裂,全面超越预期!

沙雕小琳琳
2025-02-18 05:26:39
过安检能让多少人“身败名裂”?网友分享太炸裂,一看一个不吱声

过安检能让多少人“身败名裂”?网友分享太炸裂,一看一个不吱声

奇特短尾矮袋鼠
2024-06-26 20:24:41
第一个被DeepSeek整体淘汰的行业出现了!这4个行业也将面临风险

第一个被DeepSeek整体淘汰的行业出现了!这4个行业也将面临风险

投行圈子
2025-02-17 10:57:57
亚冠出线形势:中超3选2,海港或挤掉申花,泰山拿1分将晋级

亚冠出线形势:中超3选2,海港或挤掉申花,泰山拿1分将晋级

奥拜尔
2025-02-18 22:22:17
都醒醒吧,你拼了命想要当的豪门全职太太,真相其实是这样的

都醒醒吧,你拼了命想要当的豪门全职太太,真相其实是这样的

祝晓塬
2025-02-19 04:57:47
挺乌的梅尔茨极可能赢得德国大选!亲俄候选人的民调垫底

挺乌的梅尔茨极可能赢得德国大选!亲俄候选人的民调垫底

项鹏飞
2025-02-17 20:58:54
朝鲜外交官叛逃韩国后爆出金家“猛料”:金正恩有个“特别之处”

朝鲜外交官叛逃韩国后爆出金家“猛料”:金正恩有个“特别之处”

阿器谈史
2025-01-30 19:45:50
亚洲杯最惨球队诞生!3场狂丢14球,球迷:去年怎么赢的中国队?

亚洲杯最惨球队诞生!3场狂丢14球,球迷:去年怎么赢的中国队?

绿茵舞着
2025-02-18 23:47:34
2025-02-19 06:52:49
墨谈科技 incentive-icons
墨谈科技
业务数码玩家.无聊的博主
4193文章数 590关注度
往期回顾 全部

科技要闻

马斯克发布"最聪明AI":号称碾压DeepSeekV3

头条要闻

10元1个螺母被认定为枪支散件 父子被刑拘获分案调查

头条要闻

10元1个螺母被认定为枪支散件 父子被刑拘获分案调查

体育要闻

曾遭遇两年欠薪,国足最新归化球员是他?

娱乐要闻

陈晓与陈妍希宣布离婚:今后各自安好

财经要闻

存款准备金率5%隐形下限能否突破?

汽车要闻

两种电池可选 小米YU7最大续航820km

态度原创

时尚
家居
健康
艺术
本地

色彩,才是平淡生活里的光!

家居要闻

自然人居空间 恬淡安舒

抑郁症患者称好的“乌托邦”宝地

艺术要闻

故宫珍藏的墨迹《十七帖》,比拓本更精良,这才是地道的魏晋写法

本地新闻

非遗版春节|新春青岛行,是谁闯入了动漫世界?

无障碍浏览 进入关怀版