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

使用 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.

相关推荐
热点推荐
外媒:特朗普三权在握,正在密谋废掉中国重要地位,专家发出警告

外媒:特朗普三权在握,正在密谋废掉中国重要地位,专家发出警告

小lu侃侃而谈
2024-11-25 20:13:26
丹麦军舰截停中国货船,俄假旗行动?还没意识到事态严重性

丹麦军舰截停中国货船,俄假旗行动?还没意识到事态严重性

吕喆有话说
2024-11-25 09:34:18
熊皇倒下,姆巴佩机会来了!搭档3选1,皇马将重回442

熊皇倒下,姆巴佩机会来了!搭档3选1,皇马将重回442

叶青足球世界
2024-11-25 20:21:31
抖音如果不限制吴柳芳关注,不对她限流,吴柳芳抖音粉丝将破千万

抖音如果不限制吴柳芳关注,不对她限流,吴柳芳抖音粉丝将破千万

探寻者
2024-11-25 12:46:40
土地卖不出去了,数量庞大的公务员靠什么吃法?

土地卖不出去了,数量庞大的公务员靠什么吃法?

逍遥论经
2024-11-25 09:11:50
程序员错扔7500枚比特币,价值51亿!恼羞成怒蹲守垃圾场11年:谁帮我挖到就分钱!

程序员错扔7500枚比特币,价值51亿!恼羞成怒蹲守垃圾场11年:谁帮我挖到就分钱!

英国报姐
2024-11-25 21:23:27
海南县委副书记落马,曾被实名举报出轨人妻,露骨聊天记录流出…

海南县委副书记落马,曾被实名举报出轨人妻,露骨聊天记录流出…

娱官儿
2024-11-25 14:32:25
形势到底有多严峻?天呢!上海已经刷新国人的认知…

形势到底有多严峻?天呢!上海已经刷新国人的认知…

慧翔百科
2024-11-21 12:03:47
有一个炒股的最笨办法,几乎能百分百获利。

有一个炒股的最笨办法,几乎能百分百获利。

流苏晚晴
2024-11-24 16:58:59
形式主义的最大恶果:基层人员在粪便中雕刻,管理者在恶臭中寻香

形式主义的最大恶果:基层人员在粪便中雕刻,管理者在恶臭中寻香

笑熬浆糊111
2024-11-26 00:05:22
休赛期完美错过克莱和乔治两大坑货

休赛期完美错过克莱和乔治两大坑货

大眼瞄世界
2024-11-25 22:22:57
多个微信群已出现!千万不要点开!紧急提醒→

多个微信群已出现!千万不要点开!紧急提醒→

环球网资讯
2024-11-25 08:58:28
闹掰离队!再见了,八村塁!这可是湖人的首发核心……

闹掰离队!再见了,八村塁!这可是湖人的首发核心……

篮球实战宝典
2024-11-25 17:53:28
玩火自焚!菲律宾彻底乱了!

玩火自焚!菲律宾彻底乱了!

燕梳楼频道
2024-11-24 22:30:09
低空经济+芯片+国企改革,掌握低空经济双牌照,未来4元涨至100元

低空经济+芯片+国企改革,掌握低空经济双牌照,未来4元涨至100元

牛哥板
2024-11-25 07:17:19
上海八星凶宅,不觉得恐怖,只觉得是人间惨剧。

上海八星凶宅,不觉得恐怖,只觉得是人间惨剧。

美食阿鳕
2024-11-25 21:23:37
斯诺克大冷门!3冠王被轰4-1,或成第5位出局种子,卢卡2-2暂平!

斯诺克大冷门!3冠王被轰4-1,或成第5位出局种子,卢卡2-2暂平!

刘姚尧的文字城堡
2024-11-26 05:11:24
直辖市两区迎来新区长

直辖市两区迎来新区长

鲁中晨报
2024-11-25 23:44:50
若想要平安过冬,60岁老人注意:1不洗、2不做、3不睡、4不喝

若想要平安过冬,60岁老人注意:1不洗、2不做、3不睡、4不喝

今日养生之道
2024-11-25 21:17:18
搞不懂!2024年标配卤素灯,百公里12秒,10月卖曝3万台,凭啥呢

搞不懂!2024年标配卤素灯,百公里12秒,10月卖曝3万台,凭啥呢

牛斯克
2024-11-25 06:19:54
2024-11-26 06:03:00
墨谈科技
墨谈科技
业务数码玩家.无聊的博主
3815文章数 579关注度
往期回顾 全部

科技要闻

特斯拉又降价,知情人士:冲刺今年销售目标

头条要闻

挪威史上最大规模性丑闻 妇科医生20年强奸87名患者

头条要闻

挪威史上最大规模性丑闻 妇科医生20年强奸87名患者

体育要闻

杨瀚森这态度,是打不了NBA的...

娱乐要闻

爆料郑雨盛和女模特,女方非正常怀孕

财经要闻

刘煜辉最新演讲全文:蛇的策略

汽车要闻

特斯拉限时优惠:Model Y仅23.99万起 还能5年0息

态度原创

本地
健康
房产
公开课
军事航空

本地新闻

城市24小时|领跑万亿城市,武汉“开挂”了?

花18万治疗阿尔茨海默病,值不值?

房产要闻

合生把上百个亿万富豪搞破防了

公开课

一块玻璃,如何改变人类世界?

军事要闻

俄方称在库尔斯克州上空击落多枚导弹及多架无人机

无障碍浏览 进入关怀版