JKube快速部署Java应用至k8s-零配置

853 阅读2分钟

本文介绍如何使用Eclipse JKube,零配置(不用写dockerfile,也不需要写yaml),快速将一个简单spring boot工程部署至k8s环境。

  • 1.Eclipse JKube简介
  • 2.Rancher desktop快速搭建本地k8s环境
  • 3.创建spring boot工程
  • 4.使用maven插件生成k8s资源描述文件
  • 5.使用maven插件创建docker镜像
  • 6.使用maven插件部署应用至k8s
  • 7.映射端口访问应用

1.Eclipse JKube简介

Eclipse JKube是一组插件(maven、gradle)和库的集合,用来快速部署应用服务至kubernestes环境。

Jkube官网:www.eclipse.org/jkube/

我们将要使用的是 kubernetes-maven-plugin 插件,使用该插件可以轻松的将一个spring boot应用部署至k8s环境中。

2.Rancher desktop快速搭建本地k8s环境

官方中文安装文档: docs.rancherdesktop.io/zh/getting-…

Rancher Desktop 利用虚拟机运行 containerd 或 dockerd 容器,同时创建一个简单的单节点 Kubernetes集群,适合用作本地开发、测试和学习使用。

支持windows/mac/linux操作系统。

image.png

Rancher Desktop安装完成后,可以直接在命令行工具中使用这些命令:Helm、kubectl、nerdctl、Moby、Docker Compose。

3.创建spring boot工程

在idea中创建maven工程,并引入spring-boot-starter-web依赖.

源代码在这:github.com/tzjavadmg/j…

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.7.5</version>
</parent>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
</dependencies>

创建一个简单的Controller,用来演示程序效果

@RestController
public class JkubeExampleController {
    @RequestMapping("/")
    public String index() {
        return "k8s中的spring boot应用展示";
    }
}

在pom.xml中配置jkube的kubernetes-maven-plugin插件,这里使用最简单的配置来演示,仅仅引入插件。 实际上你可以添加很多的自定义配置来满足你的个性化需求。

更多配置参考这里:www.eclipse.org/jkube/docs/…

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
        <plugin>
            <groupId>org.eclipse.jkube</groupId>
            <artifactId>kubernetes-maven-plugin</artifactId>
            <version>${jkube.version}</version>
        </plugin>
    </plugins>
</build>

4.使用maven插件生成k8s资源描述文件

运行如下mvn命令

mvn clean k8s:resource 

执行完成后,会在当前工程以下目录创建k8s资源描述文件 \target\classes\META-INF\jkube

生成的资源描述文件:

  • kubernetes.yml
  • kubernetes/spring-boot-deployment.yml
  • kubernetes/spring-boot-service.yml

5.使用maven插件创建docker镜像

mvn package k8s:build 

可以用docker images命令查看刚才创建的镜像文件,也可以打rancher desktop,在Images菜单模块中查询,如下图所示:

image.png

6.使用maven插件部署应用至k8s

mvn k8s:deploy

部署成功后,使用kubectl get pods命令查看部署成功的pod.或者从rancher dashboard中的pods菜单查看.如下图所示:

image.png

7.映射端口访问应用

接下来用以下命令设置端口转发,这样我们可以通过映射的8080端口来访问k8s中的服务。

kubectl port-forward pods/jkube-example 8080:8080

你也可以通过rancher desktop面板直接设置端口转发:

image.png

然后就可以通过浏览器访问了,效果如下:

image.png

是不是很简单?

当然实际应用时,不会直接端口转发,而是通过ingress代理转发请求,后续再尝试使用nginx-ingress代理。