SpringBoot部署应用到本地k8s

在windows+IDEA环境下,使用gradle将springboot打包,制作成镜像发布到docker上并部署到本地k8s访问web应用。

配置文件

build.gradle.kts

import org.jetbrains.kotlin.gradle.tasks.KotlinCompile

plugins {
    kotlin("plugin.jpa") version "1.6.10"
    id("org.springframework.boot") version "2.6.4"
    id("io.spring.dependency-management") version "1.0.11.RELEASE"
    kotlin("jvm") version "1.6.10"
    kotlin("plugin.spring") version "1.6.10"
    kotlin("plugin.allopen") version "1.4.32"
    kotlin("kapt") version "1.4.32"
}

group = "com.xun"
version = "0.0.1-SNAPSHOT"
java.sourceCompatibility = JavaVersion.VERSION_1_8

repositories {
    mavenCentral()
}

dependencies {
    kapt("org.springframework.boot:spring-boot-configuration-processor")
    implementation("org.springframework.boot:spring-boot-starter-data-jpa")
    implementation("org.springframework.boot:spring-boot-starter-mustache")
    implementation("org.springframework.boot:spring-boot-starter-web")
    implementation("com.fasterxml.jackson.module:jackson-module-kotlin")
    implementation("org.jetbrains.kotlin:kotlin-reflect")
    implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
    developmentOnly("org.springframework.boot:spring-boot-devtools")
    runtimeOnly("com.h2database:h2")
    testImplementation("org.springframework.boot:spring-boot-starter-test")
    testImplementation("org.springframework.boot:spring-boot-starter-test") {
        exclude(module = "junit")
        exclude(module = "mockito-core")
    }
    testImplementation("org.junit.jupiter:junit-jupiter-api")
    testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine")
    testImplementation("com.ninja-squad:springmockk:3.0.1")
}

allOpen{
    annotation("javax.persistence.Entity")
    annotation("javax.persistence.Embeddable")
    annotation("javax.persistence.MappedSuperclass")
}

tasks.withType<KotlinCompile> {
    kotlinOptions {
        freeCompilerArgs = listOf("-Xjsr305=strict")
        jvmTarget = "1.8"
    }
}

tasks.withType<Test> {
    useJUnitPlatform()
}

使用gradle打jar包

在这里插入图片描述
打包后的jar包会放在build->libs目录下
在这里插入图片描述

编写Dockerfile

FROM java
MAINTAINER 3340556441@qq.com
VOLUME /tmp
ADD /build/libs/springbootkotlin1-0.0.1-SNAPSHOT.jar myspringbootkotlinapp.jar
ENTRYPOINT ["java","-jar","myspringbootkotlinapp.jar"]

制作image

启动docker,启动minikube

minikube start

在Dockerfile所在目录下运行shell,制作镜像

docker build -t myspringbootkotlinapp .

在这里插入图片描述

查看镜像

docker images

在这里插入图片描述

上传镜像

打标签

docker tag myspringbootkotlinapp sunzhexun/myspringbootkotlinapp

登陆docker

docker login

在这里插入图片描述

push镜像

 docker push sunzhexun/myspringbootkotlinapp

在这里插入图片描述
在这里插入图片描述

minikube创建deployment

自动创建yaml文件

kubectl create deployment myspringbootkotlinapp --image=sunzhexun/myspringbootkotlinapp --dry-run=client -o=yaml > deployment.yaml
echo --- >> deployment.yaml

在这里插入图片描述

kubectl create service clusterip myspringbootkotlinapp --tcp=8080:8080 --dry-run=client -o=yaml >> deployment.yaml

在这里插入图片描述

apply yaml文件

kubectl apply -f deployment.yaml

在这里插入图片描述

查看deployment/svc

kubectl get all

在这里插入图片描述

创建容器可能需要几秒到几分钟,可以另起一个终端,查看dashboard

minikube dashboard

在这里插入图片描述
创建完成后,
在这里插入图片描述
暴露服务

kubectl port-forward svc/myspringbootkotlinapp 8080:8080

在这里插入图片描述

访问服务

localhost:8080
此时就可以本地访问我们的springboot应用啦
在这里插入图片描述

附录

此springboot项目代码(使用的是kotlin+jpa)

目录

在这里插入图片描述

在这里插入图片描述

build.gradle.kts配置

import org.jetbrains.kotlin.gradle.tasks.KotlinCompile

plugins {
    kotlin("plugin.jpa") version "1.6.10"
    id("org.springframework.boot") version "2.6.4"
    id("io.spring.dependency-management") version "1.0.11.RELEASE"
    kotlin("jvm") version "1.6.10"
    kotlin("plugin.spring") version "1.6.10"
    kotlin("plugin.allopen") version "1.4.32"
    kotlin("kapt") version "1.4.32"
}


group = "com.xun"
version = "0.0.1-SNAPSHOT"
java.sourceCompatibility = JavaVersion.VERSION_1_8

repositories {
    mavenCentral()
}

dependencies {
    kapt("org.springframework.boot:spring-boot-configuration-processor")
    implementation("org.springframework.boot:spring-boot-starter-data-jpa")
    implementation("org.springframework.boot:spring-boot-starter-mustache")
    implementation("org.springframework.boot:spring-boot-starter-web")
    implementation("com.fasterxml.jackson.module:jackson-module-kotlin")
    implementation("org.jetbrains.kotlin:kotlin-reflect")
    implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
    developmentOnly("org.springframework.boot:spring-boot-devtools")
    runtimeOnly("com.h2database:h2")
    testImplementation("org.springframework.boot:spring-boot-starter-test")
    testImplementation("org.springframework.boot:spring-boot-starter-test") {
        exclude(module = "junit")
        exclude(module = "mockito-core")
    }
    testImplementation("org.junit.jupiter:junit-jupiter-api")
    testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine")
    testImplementation("com.ninja-squad:springmockk:3.0.1")
}

allOpen{
    annotation("javax.persistence.Entity")
    annotation("javax.persistence.Embeddable")
    annotation("javax.persistence.MappedSuperclass")
}


tasks.withType<KotlinCompile> {
    kotlinOptions {
        freeCompilerArgs = listOf("-Xjsr305=strict")
        jvmTarget = "1.8"
    }
}

tasks.withType<Test> {
    useJUnitPlatform()
}

Entities.kt

实体类

import java.time.LocalDateTime
import javax.persistence.Entity
import javax.persistence.GeneratedValue
import javax.persistence.Id
import javax.persistence.ManyToOne

@Entity
class Article(
    var title: String,
    var headline: String,
    var content: String,
    @ManyToOne var author: User,
    var slug: String = title.toSlug(),
    var addedAt: LocalDateTime = LocalDateTime.now(),
    @Id @GeneratedValue var id: Long? = null)

@Entity
class User(
    var login: String,
    var firstname: String,
    var lastname: String,
    var description: String? = null,
    @Id @GeneratedValue
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 非常感谢您的问题。Kubernetes是一种可扩展的开源容器编排和管理平台,它可以帮助我们轻松地管理和部署应用程序。Spring Boot是一种轻量级的Java框架,可以帮助我们快速构建可靠的应用程序。在Kubernetes部署Spring Boot应用程序需要执行以下步骤: 1. 创建一个Docker镜像,并将Spring Boot应用程序打包到Docker镜像中。 2. 创建一个Kubernetes Deployment对象,定义应用程序的容器镜像和其他配置。 3. 创建一个Kubernetes Service对象,以公开应用程序并在群集中暴露其端点。 4. 如果需要,可以创建其他Kubernetes对象,例如ConfigMaps和Secrets,以管理应用程序的配置和敏感信息。 在完成这些步骤后,您的Spring Boot应用程序将在Kubernetes集群中成功部署和运行。希望这个回答能够帮助到您! ### 回答2: Kubernetes(简称为K8s)是一个用于容器编排和管理的开源平台,它可以帮助我们轻松地部署和扩展应用程序。Spring Boot是一个用于构建独立的、生产级的Java应用程序的框架。在K8s部署Spring Boot应用程序需要以下几个步骤: 1. 编写Dockerfile:首先,我们需要在项目根目录下创建一个Dockerfile文件。在Dockerfile中,我们可以指定基础镜像、添加应用程序文件和依赖项,并设置应用程序的启动命令。 2. 构建Docker镜像:使用Dockerfile,我们可以构建一个镜像,该镜像包含了我们的Spring Boot应用程序和所有的依赖项。我们可以使用Docker命令行工具或Docker客户端来构建镜像。 3. 将镜像推送到镜像仓库:构建完成后,可以将镜像推送到镜像仓库,以便在K8s集群中进行访问和部署。常见的镜像仓库包括Docker Hub、私有镜像仓库等。 4. 创建K8s部署文件:接下来,我们需要创建K8s部署文件,该文件定义了应用程序的部署配置,例如容器数量、资源限制等。部署文件可以使用YAML或JSON格式编写。 5. 部署应用程序:使用kubectl命令行工具或K8s API,我们可以将部署文件应用K8s集群中,从而部署我们的Spring Boot应用程序。K8s将自动为我们创建和管理应用程序的Pods、Services和其他相关资源。 6. 监控和扩展:一旦应用程序成功部署,我们可以使用K8s提供的监控和扩展功能来监视和调整应用程序的运行。K8s提供了各种工具和指标,可以帮助我们实现应用程序的自动扩展和高可用。 通过以上步骤,我们可以在K8s集群中轻松部署和管理Spring Boot应用程序。K8s提供了强大的容器编排和管理功能,可以帮助我们构建可靠、高可用的应用程序环境。 ### 回答3: K8sKubernetes)是一种开源的容器编排平台,它可以帮助我们更方便地部署、管理和扩展容器化应用Spring Boot是一种快速开发、便捷部署的Java框架,它提供了一种简化Spring应用开发的方式。 在将Spring Boot应用部署K8s上时,我们可以按照以下步骤进行操作: 1. 创建Docker镜像:首先,我们需要将Spring Boot应用打包成一个Docker镜像。我们可以使用Maven或Gradle构建工具来执行此操作。在创建镜像时,我们需要指定容器运行所需的基础镜像、将Spring Boot应用的JAR文件添加到镜像中,并配置容器的启动命令。 2. 配置K8s资源:接下来,我们需要定义一组K8s资源,用于描述如何部署和运行Spring Boot应用。这些资源包括Deployment、Service和Ingress。Deployment用于定义应用部署规则,Service用于暴露应用的网络访问入口,Ingress则用于将外部请求路由到应用的Service。 3. 应用部署:在配置完成后,我们可以使用Kubectl命令将应用部署K8s集群中。Kubectl是Kubernetes的命令行工具,它可以与K8s API进行交互,管理集群中的资源。通过执行`kubectl create`或`kubectl apply`命令,可以创建或更新我们定义的K8s资源。 4. 监控和扩展:一旦应用部署成功,我们可以使用K8s提供的监控工具来监控应用的性能和运行状态。K8s还提供了自动伸缩的功能,可以根据应用的负载情况自动调整副本数量,以提供更好的性能和可用性。 总结来说,将Spring Boot应用部署K8s上可以帮助我们更好地管理和扩展应用。通过将应用打包成Docker镜像,并使用K8s的资源配置和管理工具,我们可以轻松地将应用部署K8s集群中,并享受K8s提供的自动扩展和监控功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值