用Java开发Kubernetes控制器

作者: Min Kim(Ant Financial),Tony Ado(Ant Financial)

官方 Kubernetes Java SDK 项目 最近发布了有关为Java Kubernetes开发人员提供服务的最新工作 方便的Kubernetes controller-builder SDK,有助于轻松开发 高级工作负载或系统。

总体

毫无疑问,Java是世界上最受欢迎的编程语言之一,但是 对于那些非Golang开发者来说,建立一段时间以来很难 他们的自定义控制器/操作员,因为 社区。在Golang的世界中,已经有一些出色的控制器 框架,例如, 控制器运行时, 操作员SDK。这些 现有的Golang框架依赖于 Kubernetes Golang SDK 事实证明 多年来保持稳定。受到进一步整合到新需求的驱动 Kubernetes平台,我们不仅从Golang移植了许多基本工具 SDK到kubernetes Java SDK中,包括线人,工作队列,领导者选举, 等,但还开发了一个控制器构建器SDK,可将所有内容连接到 一个没有打ic的可运行控制器。

背景资料

为什么要使用Java来实现Kubernetes工具?您可以选择Java作为:

  • 集成遗留企业Java系统:许多公司都有其遗产 用Java编写的支持稳定性的系统或框架。我们无法 轻松地将所有内容移至Golang。

  • 更多开源社区资源:Java成熟并且积累了丰富的开源 数十年来,即使Golang越来越受到人们的青睐, 受到开发人员的欢迎。此外,如今的开发人员能够开发 它们通过SQL存储和Java提供的聚合API服务器对SQL有更好的支持。

如何使用?

以maven项目为例,将以下依赖项添加到您的依赖项中:

<dependency>
    <groupId>io.kubernetes</groupId>
    <artifactId>client-java-extended</artifactId>
    <version>6.0.1</version>
</dependency>

然后,我们可以使用提供的构建器库来编写您自己的控制器。 例如,以下一个是简单的控制器打印出节点信息 观看通知时,请参阅完整示例 这里 :

...
    Reconciler reconciler = new Reconciler() {
      @Override
      public Result reconcile(Request request) {
        V1Node node = nodeLister.get(request.getName());
        System.out.println("triggered reconciling " + node.getMetadata().getName());
        return new Result(false);
      }
    };
    Controller controller =
        ControllerBuilder.defaultBuilder(informerFactory)
            .watch(
                (workQueue) -> ControllerBuilder.controllerWatchBuilder(V1Node.class, workQueue).build())
            .withReconciler(nodeReconciler) // required, set the actual reconciler
            .withName("node-printing-controller") // optional, set name for controller for logging, thread-tracing
            .withWorkerCount(4) // optional, set worker thread count
            .withReadyFunc( nodeInformer::hasSynced) // optional, only starts controller when the cache has synced up
            .build();

如果您注意到了,新的Java控制器框架从以下方面的设计中学到了很多东西 控制器运行时 哪一个 成功地将控制器内部的复杂组件封装为多个 干净的界面。在Java Generics的帮助下,我们甚至可以继续进行一些简单的操作 以更好的方式封装。

至于更高级的用法,我们可以将多个控制器包装到一个控制器管理器中 还是一个领导,选举控制器,它有助于在HA设置部署。一句话,我们可以 基本上可以从Golang SDK和此处找到大多数等效实现 我们正在积极开发更多高级功能。

未来步骤

正式的Kubernetes Java SDK项目背后的社区将专注于 为希望对云原生编程的开发人员提供更多有用的实用程序 扩展Kubernetes的Java应用程序。如果您对更多细节感兴趣, 请看我们的仓库 kubernetes客户端/ java. 随时通过问题或与我们分享您的反馈意见 松弛.