本地开发最佳实践:Java,Docker,Kubernetes

Cha*_*Hey 5 java docker kubernetes

我试图找出在本地环境中或在开发代码时使用Kubernetes部署的Docker容器中使用Java的最终最佳实践。在理想状态下,Java开发人员应该能够像python / javascript开发人员一样快地移动,但是我很难适应这种速度(甚至接近)。

目前,我有一个工作的手动部署的k8集群。通过Maven是手动(运行构建命令后,我的Java Spring项目建成mvn clean install),然后我运行一个脚本来使图像,在那之后我运行一个脚本来运行minkube(如果尚未运行),最后我不得不apply一部署清单文件(将容器启动到Pod中)。

我所缺少的:

  1. 所有这些都是手动完成的(在创建代码之后,有一个清晰的空间可以自动化构建映像的过程,并可以使用新映像更新k8s)。
  2. 构建是手动指定的(Python在代码保存时重新启动。据我所知,在Java世界中没有热重装)。
  3. 我还没有看到本地开发环境和托管k8集群的云之间的集成。理想情况下,开发人员将在本地进行测试,直到他们准备将其部署到云中为止。准备就绪后,单击按钮并从远程注册表中读取群集可能会很棒,该群集可以获取Docker映像更改并重新加载。

令人遗憾的是,我很高兴使用Skaffold的工具不适用于Java。Java开发人员是否使用其他工具来使其本地部署超级快速并与DUCK语言(py,js)竞争?

Yog*_*h_D 1

我对您的开发工作流程的看法:

  • 就像 @Ortomala Lokni 提到的,用于docker-maven-plugin从您的 Maven 构建构建直接 docker 镜像。
  • 您可以使用https://github.com/fabric8io/fabric8-maven-plugin直接推送到 kubernetes 集群。
  • 如果您的集群托管在云中,您的构建机器应该能够访问 k8s API 服务器。为此,您可能需要使用 SSH 隧道和Bastions,具体取决于您的云 k8s 集群的 API 服务器是否公开可用。
  • 查看本地 k8s 测试集群的 minikube,即使是最新版本的桌面版 docker现在也内置了一个简单的 k8s 服务器。
  • 尚未使用过 Skaffold,但对文档的基本了解表明它也应该适合您,因为它接管了监视代码、启动 docker 构建和部署到 k8s 的基本功能。这些功能在不同语言中保持相同。话虽如此,上述两个插件将构建 docker 镜像并部署到 k8s 集成到您的 Maven 工作流程中。

您提到 python/js 速度很快,但请注意,即使对于这些语言,基本步骤也保持不变:构建 docker 映像、推送到存储库、更新 k8s 部署。

此外,热部署也适用于 Java,即使在像 eclipse 这样的基于 Spring Boot 的微服务中,您也可以使用spring-dev-tools进行实时重新加载和自动重启。然而,我不知道有什么可以帮助您处理对 docker 容器的实时更改,我会要求您避开它,docker 容器应该是不可变的。