本文已發布超過一年。較舊的文章可能包含過時的內容。請檢查頁面中的資訊自發布以來是否已變得不正確。
在 Java 中開發 Kubernetes 控制器
官方 Kubernetes Java SDK 專案最近發布了他們的最新成果,為 Java Kubernetes 開發人員提供方便的 Kubernetes 控制器建構器 SDK,這有助於輕鬆開發進階工作負載或系統。
總體而言
Java 無疑是世界上最流行的程式語言之一,但由於社群中缺乏函式庫資源,非 Golang 開發人員在一段時間內很難建立自己的自訂控制器/運算子。在 Golang 的世界中,已經有一些出色的控制器框架,例如 controller runtime、operator SDK。這些現有的 Golang 框架依賴於 Kubernetes Golang SDK 中的各種實用程式,這些實用程式已被證明多年來穩定可靠。在進一步整合到 Kubernetes 平台的新興需求驅動下,我們不僅將許多重要的工具從 Golang SDK 移植到 Kubernetes Java SDK 中,包括 informers、work-queues、leader-elections 等,還開發了一個控制器建構器 SDK,它將所有內容連接到一個可運行的控制器中,而不會出現任何問題。
背景
為什麼使用 Java 實作 Kubernetes 工具?您可能會選擇 Java,因為:
整合舊版企業 Java 系統:許多公司為了穩定性而使用 Java 編寫了舊版系統或框架。我們無法輕易地將所有內容都遷移到 Golang。
更多開源社群資源:Java 已經成熟,並且在數十年中累積了大量的開源函式庫,即使 Golang 對於開發人員來說變得越來越流行和時髦。此外,現在開發人員能夠在 SQL 儲存之上開發他們的聚合 API 伺服器,而 Java 對 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 控制器框架從 controller-runtime 的設計中學到了很多,controller-runtime 成功地將控制器內部的複雜組件封裝到幾個清晰的介面中。在 Java 泛型的幫助下,我們甚至更進一步,以更好的方式簡化了封裝。
至於更進階的用法,我們可以將多個控制器包裝到控制器管理器或領導者選舉控制器中,這有助於在高可用性設定中部署。總之,我們基本上可以在這裡找到 Golang SDK 中的大多數等效實作,並且我們正在積極開發更進階的功能。
未來步驟
官方 Kubernetes Java SDK 專案背後的社群將專注於為希望編寫雲原生 Java 應用程式以擴展 Kubernetes 的開發人員提供更有用的實用程式。如果您對更多詳細資訊感興趣,請查看我們的 repo:kubernetes-client/java。歡迎隨時通過 Issues 或 Slack 與我們分享您的回饋。