开箱即用的 Java Kubernetes Operator 运行时

Spark on K8S(spark-on-kubernetes-operator)环境搭建 Spark on K8S(spark-on-kubernetes-operator)环境搭建以及demo过程环境要求基本原理环境安装kubernetes 1.13环境安装Spark-on-kubernetes-operator环境安装关于kerberos 环境要求 Operator Version:最新即可 Kubernetes Version: 1.13或更高 Spark Version:2... 阅读详情

本篇分享的内容难度为“初学者/Beginner”级别,以下是阅读本文前推荐您了解的背景知识:

  • Java 语言编程基础

  • 了解过 Kubernetes 平台上的 Operator / Controller 工作机制

也可以同步参考 Kubernetes 官方博客内容:

https://kubernetes.io/blog/2019/11/26/develop-a-kubernetes-controller-in-java

图为何子波和金敏在 KubeCon NA2019 大会分享后交流

何子波 蚂蚁金服技术专家:

(adohe@github) Kubernetes 维护者,SIG CLI Co-Chair(包括 Kubectl 及其扩展插件,Kustomize 以及客户端运行时),同时关注安全容器,多租户等领域。

金敏 蚂蚁金服软件工程师:

(yue9944882@github) Kubernetes SIG API-Machinery 维护者及其子领域 Owner(CRD 服务实现,APIAggregation SDK 套件,控制面流控,OpenAPIv2/3,Java SDK 等),同时也是 OpenAPI 开源生态工具链 openapitools.org 的 Techincal Committee。

本文根据两位在 KubeCon NA2019 的分享内容整理。本次演讲与大家分享蚂蚁金服金融科技扩展云原生 Java 能力到云的实践和改造,并将收获的产出回馈开放给 Kubernetes 社区。

分享概要

在 Kubernetes 平台上开发部署运行 Operator 已经是在 Kubernetes 上拓展开发能力的默认范式。最早是 CoreOS 的工程师们创新提出了 Operator 的开发理念并且在社区收获了良好的反响,在经过一段时间的波折、打磨和实践之后,我们今天才看到丰富多样的 Operator 层出不穷。实际上 Operator 的效力往往要结合 Kubernetes API 的扩展能力才能更好发挥。所以其广泛传播反过来锤炼演进了 Kubernetes 上 CustomResourceDefinition 承载第三方 API 模型的能力。水涨船高,这也是社区集中投入人力从 v1.14 开始启动 Extensibility GA Sprint 小组冲刺 Kubernetes 扩展性建设的推动原因。

图为何子波和金敏在 KubeCon NA2019 大会现场演示

随着 Operator 的受众越来越多,社区也衍生出了面向 Operator 开发提效的工具链项目比如 operator-sdk、kubebuilder、metacontroller 等等优秀的开源项目。可是这些项目大都是面向 Go 语言研发者的,虽然越来越多的研发者向 Go 靠扰已是事实,但是 Go 语言尚不及其他主流编程语言成熟,倒是慢慢铺开的 Kubernetes 等其他开源项目的工业实践在“倒逼”Go 语言底层库的修复和稳固,比如 http2 的底层网络库[1]。与此相似的,我们最早内部孵化的 Java 语言的 Operator 运行时框架也是被实际业务“倒逼”出来的,并在 Kubernetes 社区露头试水之初便收获了许多反馈推动发展直到今天走到全面开放。

  • operator-sdk:

    https://github.com/operator-framework/operator-sdk

  • kubebuilder:

    https://github.com/kubernetes-sigs/kubebuilder

  • metacontroller:

    https://github.com/GoogleCloudPlatform/metacontroller

你为什么需要使用 Java 开发 Operator

如果你在犹豫不决是否要使用 Java 开发 Operator 并应用到实际中来,我们从以下几个方面进行对比看看哪一点是足够吸引你尝鲜:

  • 适配存量系统:如果在登陆 Kubernetes 之前你的基础设施底层系统都是通过 Java 开发的,那么恭喜你已经有了使用 Java Operator 的天然土壤。反过来把存量系统接口逐个“翻译”为 Go 语言既消耗大量人力又引出持续同步维护 Go 语言库的成本。

  • 堆内存快照:相比于 Java,Go 语言很难将运行中的程序的内存进行完整的快照分析,PProf 相关工具链能做的只是将内存的使用概况汇总输出,虽然也可以帮助分析锁定出泄漏的对象类型,但是粒度有限。反过来 Java 程序的堆内存进行快照分析已经具有成熟的工具链支持,研发者通过一份完整的堆快照可以直接锁定出比如 WorkQueue 中积压的内容,甚至限流器中逐个 Key 的瞬时状态,也可以在 Operator 静默不响应的场景下快速锁定问题。

  • 性能诊断/在线调试:结合比如 JMX Exporter 等工具链的帮助,我们直接将 Java 虚拟机的细节运行状态以 Prometheus Metrics 的形式收集起来,虽然 Go 程序也可以暴露出其运行时的 Metrics,但是对比后我们发现 Java 的 Metrics 在分析 GC 状态和堆分布上更加强大。除此之外,Java Operator 的远程调试更加方便上手。

  • 线程模型:与 Java 显著不同的是,Go 语言中的 Routine 不具有直接从外部“杀死”的功能,你需要结合 Channel/Context 等模型间接实现。而在 Java 虚拟机上的线程模型有和操作系统类似的生命周期管理,开发者可以白盒的操作干涉线程的生命周期。这对于某些业务场景是重要的。

  • OOP 范型编程接口:Go 语言本身的设计哲学是不认可面向对象编程的,尽管好处很多但是在 API 模型繁多的 Kubernetes 项目中,维护者不得己转向使用代码生成器批量为这些模型生成大量模版代码。Java 的优势之一是范型编程,这可以彻底取代代码生成器的工作,同一套代码可以自由地适配在各种模型,比如 Pod 到 Service 等等。

  • 第三方研发者库生态:经过数十年的演进,Java 积累的第三方工具库远比 Go 语言丰富的多,至少目前而已可以算得上是一个优势。

示例代码速览

下面两张代码片段为你展示了具体开发 Java Operator 所需要的全部工作,相信接触过 Kubernetes Client-Go 的开发者通过名字大致了解如何使用了:

(如何构造出一个 Informer 实例) 

https://github.com/kubernetes-client/java/blob/master/examples/src/main/java/io/kubernetes/client/examples/InformerExample.java

(如何构造出一个 Operator 实例) 

https://github.com/kubernetes-client/java/blob/master/examples/src/main/java/io/kubernetes/client/examples/ControllerExample.java

开发 Java Operator 需要额外注意什么

仅仅是通过代码开发 Operator 显然不是大结局,你还需要注意其他的问题,以下是我们在实际运用的获得的经验总结:

  • 严谨管理 CRD Yaml 定义:如最开始提到的,当 Java Operator 操作的是自定义资源比如 CRD 时,我们自然需要操作/维护该 CRD 对应的 Java 模型。这首先引入了 CRD Yaml 的良好维护的问题(具体细则这里暂不赘述),另外还有如何将 CRD Yaml 映射为 Java 模型的问题。关于后者我们既可以手动维护管理,也可以通过代码生成器将你的 CRD Yaml 一步转换为严丝合缝对应的 Java 模型。Kubernetes 的核心是 API 模型。社区自身对于 API 的变更是作为最高优先级进行审核,当我们自行拓展管理 API 模型时更应当谨慎细致。

  • 关注 Operator 的关停步骤:目前 Go 语言的 Operator 是不存在优雅退出的,然而这不代表我们不需要。在 Java 的线程管理模型下我们可以更细粒度地调整 Operator 关停时的行为,比如完整释放队列中的任务后再下线。

  • 把 Operator 解耦为独立部署的组件:开发 Java 程序时开发者往往倾向于将 Operator 声明为例如“Spring Bean”并注入到某个 RPC 服务中。但这其实是不推荐的,因为 Operator 的生命周期应该是在其续约“Lease 租期”中断时退出重启,而 RPC 服务的重启操作往往成本更高。两者并不对拍。

未来的拓展/行进路线

除了不断的将 Client-Go 现有的能力平行移植到 Java 客户端之外,我们还规划了以下内容作为未来的行进路线:

  • 大规模集群下的 Operator 拓展能力;

  • 适配 Kuberentes 社区标准的多集群的扩展能力;

  • Operator 下的分布式对象/任务追踪;

结束语

本文介绍了如何快速上手使用 Java 开发 Operator,感兴趣的读者可以根据官方实例在本地开发环境体验。Kubernetes 社区的 Java 客户端可以发展至今离不开社区的贡献和反馈,也感谢红帽的 Fabric8 客户端的协助得以让开发者收获更流畅的开发接口体验。对 Kubernetes 社区的 Java 未来发展有更多想法和建议朋友欢迎在我们的仓库留下足迹:

https://github.com/kubernetes-client/java

同时也欢迎致力于云原生领域的小伙伴们加入我们,我们一起探索和创新!

文中涉及相关链接

  • [1] 更多上下文参考:

    https://github.com/kubernetes/client-go/issues/374

  • [2] 通过 CRD Yaml 生成 Java 模型参考:

    https://github.com/kubernetes-client/java/blob/master/docs/generate-model-from-third-party-resources.md

本文归档在 sofastack.tech。

???? 奖励支持 SOFAStack 的你~

* 点下右下角“在看”

* 到公众号对话框发送“T 恤”,试试手气~

* 本期互动奖品“SOFAStack 定制 T 恤”

使用operator-sdk创建自己的k8s operator 前言 通过operator-sdk我们可以简单的创建自己k8s应用。 官方的文档其实已经很详细了。这篇文章主要记录了,在根据官方文档一步步做的过程当中完整的一个过程。相比官方的文档会更加详细一些。 前提条件 一台CentOS,物理机,虚拟机都可以。 安装docker # yum install -y yum-utils \ device-mapper-persistent-data \ l... 阅读详情

相关推荐

【kubernetes】使用flink-kubernetes-operator、使用java代码提交任务到远程k8s服务器

然后我们在文章中学会了怎么提交任务到自己本地的k8s环境中。现在我们要把任务提交到远程服务器,对方的是k8s环境,但是对方的环境使用的是contains,不是docker容器。我们本次是从本地的docker环境放到k8s环境上。先根据文章打包到本地镜像。然后我们在文章中导入本地镜像到远程。

九师兄 913

k8s java程序实现kubernetes Controller & Operator 使用CRD 学习总结

上一步中创建了自定义资源定义这样就可以基于定义的内容创建自定义资源MyCrdTestmy-crd-test.yaml 文件内容如下# 这个就是对应crd-simple.yaml 中定义的# api使用 crd中定义的组名称(group)+ 版本号(versions name)# kind使用 crd中定义的kind名称metadata:# 对应 crd-simple.yaml schema中的spec 配置spec:myarray:- aaabbbccc。

liuyij3430448的博客 4004

java-operator-sdk:用于构建Kubernetes运算符的Java SDK

用Java轻松构建Kubernetes运算符。 受到启发。 序号 内容 特征 处理Kubernetes API事件的框架 自动注册Custom Resource手表 重试失败后的操作 智能事件调度(仅处理同一资源的最新事件) 查阅此了解每个操作员都需要解决的非凡而又常见的问题。 如果您对如何处理更复杂的场景感兴趣,请查看。 为什么要建立自己的运营商? 利用Java的强大功能和灵活性实现基础架构自动化。 请参阅。 供应复杂的应用程序-避免Helm图表地狱 与云服务集成-例如秘密商店 更安全地部署应用程序-仅通过自定义资源向用户公开群集 路线图 在真实集群上运行时测试框架和所有示例。 生成项目框架 从CRD生成Java类 与Quarkus集成(包括本机映像构建) 与OLM集成(运营商生命周期管理器) 加入我们的Discord! 用户指南 您可以找到详细的文档。 请注意,这些文档目前

Operator-sdk004

webhook

u011739062的博客 284

java-operator:Java Operator SDK

Java Operator SDK 概述 该项目是的组成部分, 是一个开放源代码工具包,用于以有效,自动化和可扩展的方式管理称为Kubernetes的本机应用程序。 在了解更多。 可以轻松地在Kubernetes上管理复杂的有状态应用程序。 但是,由于诸如使用低级API,编写样板以及缺少导致重复的模块化等挑战,今天编写操作员可能会很困难。 执照 Operator SDK已获得Apache 2.0许可。 有关详细信息,请参见文件。

java-operator-sdk-tutorial:java-operator-sdk入门教程

Java Operator SDK教程 此仓库包含一个演示演练和一个使用的教程。 指示 请参阅以获取和。 贡献 请参阅以获取有关如何更新文档的信息。

Java Operator SDK

Operators 代表Kubernetes管理集群和非集群资源。这个Java Operator SDK (JOSDK) 旨在通过使用一个对Java开发人员来说应该感觉自然的API,使编写Kubernetes操作员变得尽可能容易,并且不必担心许多低级细节,因为SDK会自动处理。

zhengzaifeidelushang的博客 1895

角谱迭代与傅里叶变换迭代算法(GS)的原理及其实例演示分析

角谱迭代与傅里叶变换迭代算法(GS)的原理及其实例演示分析 目前,迭代法和强度传输方程(TIE)法是两类典型的非干涉相位检索技术(Phase Retrieval,被称为相位恢复、相位检索、相位反演法、相位复原等)。迭代法中的经典算法是Gerchberg-Saxton(GS),随后,出现了包括错误减少算法(ER)、混合输入输出法(HIO)、梯度搜索算法、角谱迭代算法等改进算法。...

简单光学 2万+

Unity Jar Resolver安装与配置:5分钟上手移动开发依赖管理

Unity Jar Resolver是一款强大的Unity插件,专为解决Android和iOS平台的依赖管理问题而设计。它能够自动解析项目所需的各种依赖库,并进行版本管理,让开发者无需手动处理复杂的依赖关系,从而专注于核心功能的开发。无论是Android的JAR/AAR库还是iOS的CocoaPods依赖,Unity Jar Resolver都能轻松应对,是移动开发中不可或缺的工具。 ## 快速

gitblog_00089的博客 613

GD-Link离线烧录全攻略:从配置到一键下载的保姆级教程

本文详细介绍了GD-Link离线烧录的全流程,从硬件准备到软件配置,再到一键下载的实战技巧。通过保姆级教程,帮助工程师快速掌握国产MCU的离线烧录技术,适用于产线批量烧录和现场设备维护等场景,显著提升工作效率。

ww90123的博客 652

2025年最新Cesium学习示例:Cesium-Examples

2025年最新Cesium学习示例:Cesium-Examples

2403_88103571的博客 1011

kubernetes Java_开箱即用的 Java Kubernetes Operator 运行时

本篇分享的内容难度为“初学者/Beginner”级别,以下是阅读本文前推荐您了解的背景知识:Java 语言编程基础;了解过 Kubernetes 平台上的 Operator/Controller 工作机制;图为何子波和金敏在 KubeCon NA2019 大会分享后的交流何子波 蚂蚁金服技术专家:(adohe@github)Kubernetes 维护者,SIG CLI Co-Chair(包括 Ku...

weixin_35815036的博客 292

最终篇——SWAT模型的建立

同理,Soil Data也是同样的方法导入,在Soil Database Options的选项中,选择UserSiol,用同样的方法导入土壤类型,进行重分类。打开窗口后,只定义HRU Thresholdes,其余两个不用设置,设定各数据单元的计算率,这里的10%的意思是计算精度,即分成级HRU计算单元太小,小于平均计算单元的10%,我们就不对这HRU单元进行计算(也就是说太破碎的计算单元不进行计算),若选择0%意味着全部进行计算,需要耗费大量的内存和时间,对计算机要求较高,不建议。

m0_72556434的博客 5621

java operator.less_开箱即用的 Java Kubernetes Operator 运行时

本篇分享的内容难度为“初学者/Beginner”级别,以下是阅读本文前推荐您了解的背景知识:Java 语言编程基础;了解过 Kubernetes 平台上的 Operator/Controller 工作机制;图为何子波和金敏在 KubeCon NA2019 大会分享后的交流何子波 蚂蚁金服技术专家:_(adohe@github) _Kubernetes 维护者,SIG CLI Co-Chair(包括...

weixin_28706541的博客 108

手把手教你用Three.js+Vue打造3D机房可视化系统(附完整代码)

本文详细介绍了如何使用Three.js与Vue 3构建企业级3D机房可视化系统。从技术选型、项目架构设计到3D场景构建、设备建模与渲染策略,提供了完整的开发方案和实战代码。重点讲解了如何实现设备状态实时监控、交互操作与性能优化,帮助开发者快速掌握3D可视化开发的核心技术。

ttt77的博客 317

C++动态规划详解

动态规划思想 一、动态规划概念: 动态规划(dp)是研究多步决策过程最优化问题的一种数学方法。在动态规划中,为了寻找一个问题的最优解(即最优决策过程),将整个问题划分成若干个相应的阶段,并在每个阶段都根据先前所作出的决策作出当前阶段最优决策,进而得出整个问题的最优解。即记住已知问题的答案,在已知的答案的基础上解决未知的问题。 在这类问题中,可能会有许多可行解。每一个解都对应于一个值,我们希望找到具有最优值的解。动态规划算法与分治法类似,其基本思想也是将待求解问题分解成若干个子问题,先求解子问题,然后

weixin_51951103的博客 2万+

K8s系列之:K8s OPERATOR是什么

Kubernetes 的 Operator 模式概念允许你在不修改 Kubernetes 自身代码的情况下, 通过为一个或多个自定义资源关联控制器来扩展集群的能力。Operator 是 Kubernetes API 的客户端, 充当自定义资源的控制器。部署 Operator 最常见的方法是将自定义资源及其关联的控制器添加到你的集群中。Operator 模式会封装你编写的(Kubernetes 本身提供功能以外的)任务自动化代码。如果生态系统中没有可以实现你目标的 Operator,你可以自己编写代码。

zhengzaifeidelushang的博客 5486

FM20S用户手册--Linux系统启动卡制作及系统固化

评估板出厂时,默认提供一张配套的Micro SD卡,此卡为可正常使用的Linux系统 启动卡。评估板断电,将Linux系统启动卡插入评估板Micro SD卡槽,根据评估底板丝印将 启动方式选择拨码开关拨为1010(1-4).此档位为Micro SD启动模式。使用Linux 系统启动卡启动系统时,将使用此目录的BOOTbn文件启动FSBL和U-Boot。Linux系统启动卡制作时,已将固化系统的脚本文件mkemmcboot.sh拷贝至Linux系 统启动卡文件系统的"/opt/tools/"目录下。

创龙,嵌入式一体化解决方案商 302

kubebuilder之一:kubernetes operator工作原理

简介 redHat: kubernetes operator 是一种封装、部署和管理 Kubernetes 应用的方法。 我们平时 使用kubernetes API (应用编程接口)和kubectl工具在kubernetes上部署并管理kubernetes应用。 而kubernetes operator 是一种特定于(定制)应用的控制器,可以扩展kubernetes API的功能,来代表kubernetes用户进行创建、配置和管理复杂应用的实例。 它基于基本 Kubernetes 资源和控制器概念构

张成基 3万+

【安全设备篇】HVV面试专题

还有就是这个可能是被访问的这个内网系统,本身业务系统存在业务逻辑问题,因为内网所布置的很多业务系统往往不会考虑一些安全性问题,比如在正常的业务逻辑请求中直接带了sql语句,就会触发设备规则产生告警,这一类是属于误报,然后会将此告警上报给研判人员,需要研判组专家和甲方客户确认下是否是该系统存在此业务逻辑问题,并且需要确认告警的源ip在此告警的时间段附近有没有进行操作过。天眼日志分析主要基于系统和应用程序的日志数据来识别安全威胁,而威胁感知则通过收集和分析多种来源的情报信息。理解威胁的性质和威胁背后的原理。

大河之犬的博客 7923

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Java Operator SDK完全指南:如何快速构建Kubernetes Operator

想要在Java中轻松构建Kubernetes Operator吗?Java Operator SDK正是您需要的终极解决方案!这个强大的框架让Java开发者能够快速、高效地创建和管理Kubernetes操作符,无需深入了解Kubernetes API的复杂性。作为CNCF(云原生计算基金会)Operator Framework的一部分,Java Operator SDK提供了生产就绪的功能,让您专

gitblog_00120的博客 547

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

来了解一下K8S的Operator模式

前面的文章介绍了 Kubernetes 自带的管理有状态应用的控制器 StatefulSet ,它能够完成应用的拓扑顺序状态管理 (比如,重启时按照顺序重建 Pod)以及结合 PVC 完...

kevin_tech的博客,微信搜「网管叨bi叨」 1万+

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Spark on Kubernetes官方实现及基于K8S的Operator设计模式

简述 Cloud云服务日益普遍,其后的支撑但是容器化的集群,所谓容器化(Containerization)就是将各种系统或用户服务,通过熟知的容器编排(Orchestration)工具,如docker、kubernetes等,部署运行,而不是直接与服务器直接打交道,容器化的服务大大减轻了服务部署、运维及资源控制等的繁琐程度,同时也使服务更加的健壮。 而Spark 2.3之前的版本,如果想要使用容器化的部署方式,只能通过mesos、yarn,但还不支持在Kubenetes集群上部署,至于他们之间的差异,或是优

Dreamming Time的博客 2075

Kubernetes Operator开发 (小白入门 包懂 包会)

本文介绍了Operator是什么 有什么作用 应用场景有哪些,也介绍了利用Kubebuild开源项目实现Operator完整的开发过程。希望对大家开发Operator有帮助

欢迎来到云逸的博客频道 4922
上一篇: 10年后,阿里给千万开源人写了一封信
下一篇: 云原生网络代理 MOSN 平滑升级原理解析 | 开源
SOFAStack
博客等级 码龄7年 747粉丝 389原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值