Kubernetes微服务入门教程:部署spring-boot应用
测试如下教程时,请确认kubernates环境正常,可参考该文件搭建kubernates环境Kubernetes微服务入门教程:环境安装_jacarri的博客-CSDN博客。
创建一个Spring boot应用
访问https://start.spring.io/创建一个最简单的 spring boot应用,如下图所示
添加测试和制作镜像的代码
添加用于测试java代码
@RestController
public class HelloWorldController {@RequestMapping("/")public String index() {return "Hello World\t" + new Date();}
}
添加用于制作镜像的文件:src/main/docker/Dockerfile,文件内容如下:
FROM openjdk:8-jdk-oracleADD spring-boot-demo-0.0.1-SNAPSHOT.jar /app.jarENV TZ=Asia/ShanghaiENTRYPOINT [ "java", "-jar", "/app.jar" ]
在pom.xml 添加用于制作镜像的 docker-maven-plugin 插件
<properties><java.version>1.8</java.version><maven.compiler.source>${java.version}</maven.compiler.source><maven.compiler.target>${java.version}</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><docker.image.prefix>jacarrichan</docker.image.prefix></properties>...<plugin><groupId>com.spotify</groupId><artifactId>docker-maven-plugin</artifactId><version>1.2.2</version><executions><execution><phase>package</phase><goals><goal>build</goal></goals></execution></executions><configuration><imageName>${docker.image.prefix}/${project.artifactId}</imageName><dockerDirectory>${project.basedir}/src/main/docker</dockerDirectory><imageTags><imageTag>${project.version}</imageTag><imageTag>latest</imageTag></imageTags><resources><resource><targetPath>/</targetPath><directory>${project.build.directory}</directory><include>${project.build.finalName}.jar</include></resource></resources></configuration></plugin>
...
添加用于声明Kubernates服务的yml文件,内容如下:
apiVersion: v1
kind: Service
metadata:name: spring-boot-demolabels:app: spring-boot-demo
spec:type: NodePortports:- name: httpport: 8080nodePort: 30000 # 此处定义POD的端口8080映射为Node的30000selector:app: spring-boot-demo---
apiVersion: apps/v1
kind: Deployment
metadata:name: spring-boot-demo
spec:replicas: 1selector:matchLabels:app: spring-boot-demotemplate:metadata:labels:app: spring-boot-demospec:containers:- name: spring-boot-demoimage: jacarrichan/spring-boot-demo:0.0.1-SNAPSHOTports:- name: httpcontainerPort: 8080 # 此处定义POD暴露的端口
代码打包和制作镜像
PS C:\Users\jacarrichan\temp\spring-boot-demo> mvn clean package -DskipTests
[INFO] Scanning for projects...
[INFO]
[INFO] ---------------< com.jacarrichan.demo:spring-boot-demo >----------------
[INFO] Building spring-boot-demo 0.0.1-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-clean-plugin:3.1.0:clean (default-clean) @ spring-boot-demo ---
[INFO] Deleting C:\Users\jacarrichan\temp\spring-boot-demo\target
[INFO]
[INFO] --- maven-resources-plugin:3.2.0:resources (default-resources) @ spring-boot-demo ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Using 'UTF-8' encoding to copy filtered properties files.
[INFO] Copying 1 resource
[INFO] Copying 0 resource
[INFO]
[INFO] --- maven-compiler-plugin:3.8.1:compile (default-compile) @ spring-boot-demo ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 2 source files to C:\Users\jacarrichan\temp\spring-boot-demo\target\classes
[INFO]
[INFO] --- maven-resources-plugin:3.2.0:testResources (default-testResources) @ spring-boot-demo ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Using 'UTF-8' encoding to copy filtered properties files.
[INFO] skip non existing resourceDirectory C:\Users\jacarrichan\temp\spring-boot-demo\src\test\resources
[INFO]
[INFO] --- maven-compiler-plugin:3.8.1:testCompile (default-testCompile) @ spring-boot-demo ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 1 source file to C:\Users\jacarrichan\temp\spring-boot-demo\target\test-classes
[INFO]
[INFO] --- maven-surefire-plugin:2.22.2:test (default-test) @ spring-boot-demo ---
[INFO] Tests are skipped.
[INFO]
[INFO] --- maven-jar-plugin:3.2.2:jar (default-jar) @ spring-boot-demo ---
[INFO] Building jar: C:\Users\jacarrichan\temp\spring-boot-demo\target\spring-boot-demo-0.0.1-SNAPSHOT.jar
[INFO]
[INFO] --- spring-boot-maven-plugin:2.6.6:repackage (repackage) @ spring-boot-demo ---
[INFO] Replacing main artifact with repackaged archive
[INFO]
[INFO] --- docker-maven-plugin:1.2.2:build (default) @ spring-boot-demo ---
[INFO] Using authentication suppliers: [ConfigFileRegistryAuthSupplier]
[INFO] Copying C:\Users\jacarrichan\temp\spring-boot-demo\target\spring-boot-demo-0.0.1-SNAPSHOT.jar -> C:\Users\jacarrichan\temp\spring-boot-demo\target\docker\spring-boot-demo-0.0.1-SNAPSHOT.jar
[INFO] Copying C:\Users\jacarrichan\temp\spring-boot-demo\src\main\docker\Dockerfile -> C:\Users\jacarrichan\temp\spring-boot-demo\target\docker\Dockerfile
[INFO] Building image jacarrichan/spring-boot-demo
Step 1/4 : FROM openjdk:8-jdk-oracle---> 5783fe09fd20
Step 2/4 : ADD spring-boot-demo-0.0.1-SNAPSHOT.jar /app.jar---> 4c07a1a20273
Step 3/4 : ENV TZ=Asia/Shanghai---> Running in cc7f05568a73
Removing intermediate container cc7f05568a73---> dac566480459
Step 4/4 : ENTRYPOINT [ "java", "-jar", "/app.jar" ]---> Running in a9a9088ac338
Removing intermediate container a9a9088ac338---> 98cf1242fba2
ProgressMessage{id=null, status=null, stream=null, error=null, progress=null, progressDetail=null}
Successfully built 98cf1242fba2
Successfully tagged jacarrichan/spring-boot-demo:latest
[INFO] Built jacarrichan/spring-boot-demo
[INFO] Tagging jacarrichan/spring-boot-demo with 0.0.1-SNAPSHOT
[INFO] Tagging jacarrichan/spring-boot-demo with latest
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 11.186 s
[INFO] Finished at: 2022-04-10T19:42:30+08:00
[INFO] ------------------------------------------------------------------------
PS C:\Users\jacarrichan\temp\spring-boot-demo>
确认镜像信息
在Docker Desktop中查看制作的镜像
在kubernates中运行spring-boot-demo应用
创建Pod运行应用
PS C:\Users\jacarrichan\temp\spring-boot-demo> kubectl create -f .\k8s.yaml
service/spring-boot-demo created
deployment.apps/spring-boot-demo created
PS C:\Users\jacarrichan\temp\spring-boot-demo>
查看应用运行日志日志
获取SVC信息
PS C:\Users\jacarrichan\temp\spring-boot-demo> kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 9d
spring-boot-demo NodePort 10.107.197.80 <none> 8080:30000/TCP 2m12s
从中可以看到spring-boot-demo 这个Service的 8080端口被映射为了30000端口。
在访问30000端口,测试链路状态信息:
查看POD 详细信息命令
PS C:\Users\jacarrichan\temp\spring-boot-demo> kubectl get pods
NAME READY STATUS RESTARTS AGE
spring-boot-demo-d8bdc7896-7d4l4 1/1 Running 0 7m39s
PS C:\Users\jacarrichan\temp\spring-boot-demo> kubectl describe pod spring-boot-demo-d8bdc7896-7d4l4
Name: spring-boot-demo-d8bdc7896-7d4l4
Namespace: default
Priority: 0
Node: docker-desktop/192.168.65.4
Start Time: Sun, 10 Apr 2022 19:46:15 +0800
Labels: app=spring-boot-demopod-template-hash=d8bdc7896
Annotations: <none>
Status: Running
IP: 10.1.1.188
IPs:IP: 10.1.1.188
Controlled By: ReplicaSet/spring-boot-demo-d8bdc7896
Containers:spring-boot-demo:Container ID: docker://e05adb4204782ab6851e86eb6eee97e2fc9027cf4bcac405acf3d3c0bcf0d821Image: jacarrichan/spring-boot-demo:0.0.1-SNAPSHOTImage ID: docker://sha256:98cf1242fba27986e06b26549d42417af93bf6a313d3490ef6a844507d0546f4Port: 8080/TCPHost Port: 0/TCPState: RunningStarted: Sun, 10 Apr 2022 19:46:16 +0800Ready: TrueRestart Count: 0Environment: <none>Mounts:/var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-mgdks (ro)
Conditions:Type StatusInitialized True Ready True ContainersReady True PodScheduled True
Volumes:kube-api-access-mgdks:Type: Projected (a volume that contains injected data from multiple sources)TokenExpirationSeconds: 3607ConfigMapName: kube-root-ca.crtConfigMapOptional: <nil>DownwardAPI: true
QoS Class: BestEffort
Node-Selectors: <none>
Tolerations: node.kubernetes.io/not-ready:NoExecute op=Exists for 300snode.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:Type Reason Age From Message---- ------ ---- ---- -------Normal Scheduled 7m42s default-scheduler Successfully assigned default/spring-boot-demo-d8bdc7896-7d4l4 to docker-desktopNormal Pulled 7m42s kubelet Container image "jacarrichan/spring-boot-demo:0.0.1-SNAPSHOT" already present on machineNormal Created 7m42s kubelet Created container spring-boot-demoNormal Started 7m42s kubelet Started container spring-boot-demo
本教程中涉及到的代码可从此处获取:
https://github.com/jacarrichan/spring-boot-kubernetes-demo
Kubernetes微服务入门教程:部署spring-boot应用相关推荐
- SpringCloud 微服务监控方案sentinel + spring boot admin
SpringCloud 微服务监控方案sentinel + spring boot admin 前言:项目基于springcloud框架,服务注册中心使用的是Eureka spring boot ad ...
- springboot controller访问不到_构建微服务:快速搭建Spring Boot项目
Spring Boot简介: Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员 ...
- 怎样把一个项目加入微服务器,构建微服务:快速搭建Spring Boot项目
Spring Boot简介: Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员 ...
- 阿里巴巴微服务核心手册:Spring Boot+Spring cloud+Dubbo
前言 微服务作为一项在云中部署应用和服务的新技术已成为当下最新的热门话题.但大部分围绕微服务的争论都集中在容器或其他技术是否能很好的实施微服务,而红帽说 API 应该是重点. 企业和服务提供商正在寻找 ...
- TDengine 入门教程⑪——基于Spring Boot+Alibaba Druid框架的智能电表项目的后端时序数据库开发实战
文章目录 一.前文 二.工程依赖 三.配置数据源 四.数据库连接池 五.电表数据实体类 六.数据库建表 七.业务Service层 八.总结 一.前文 TDengine 入门教程--导读 本开发实战配置 ...
- 微服务技术方案:Spring Cloud 从入门到实战
随着互联网技术的发展与不断创新,以及用户流量的不断增大,越来越多的企业项目面临大数据.高并发等问题,随之而来的就是通过分布式模型组建架构,微服务思想就集中体现了应用价值,2020 年的你还没有掌握微服 ...
- springboot 微服务_使用 Docker 部署 Spring Boot微服务
Docker 技术发展为微服务落地提供了更加便利的环境,使用 Docker 部署 Spring Boot 其实非常简单,这篇文章我们就来简单学习下. 首先构建一个简单的 Spring Boot 项目, ...
- docker 打包镜像_Spring Boot2 系列教程(四十一)部署 Spring Boot 到远程 Docker 容器
不知道各位小伙伴在生产环境都是怎么部署 Spring Boot 的,打成 jar 直接一键运行?打成 war 扔到 Tomcat 容器中运行?不过据松哥了解,容器化部署应该是目前的主流方案. 不同于传 ...
- k8s部署tomcat及web应用_部署 Spring Boot 应用到 K8S 教程
点击上方 Java后端,选择 设为星标 优质文章,及时送达 作者:qingmu qingmu.io/2020/04/08/Spring-Boot-Operator-User-Guide/ 前言 在Ku ...
最新文章
- vue实现多个元素或多个组件之间动画效果
- hadoop的hdfs文件操作实现上传文件到hdfs
- Java:File.separator作用相当于 ‘ \ ‘
- 如何愉快地学习 Go 语言?来场 Go 之旅吧!
- linux下命令集合
- css sgc加密,ASP+SGC实现柱状图
- LINUX SHELL中大小写转换及注意事项
- 韩顺平Java学习 面向对象【高级】(笔记)
- SCM系统是什么?供应链管理系统有哪些优势?
- word中Mathtype公式/标题及页码变成一串英文代码怎么办
- 【Unity】出现NullReferenceException:Object reference not set to an instance of an object.的原因总结
- vscode生成html5快捷键,vscode快捷键
- 33. Pay Gap for the Brightest Female Graduatea 最聪明的大学女毕业生面临的工资差距
- 医学影像研究的重要性 计算机,计算机辅助医学影像诊查之关键学习技术研究.doc...
- ros源码下载及编译
- tex常用函数 上下行对齐_tex常用函数 上下行对齐_【学术写作】如何优雅地(用TeX)写AI论文...
- 生命是罐头,胆量是开罐器
- 从头开始做一个智能家居设备:硬件准备
- 中小互联网软件公司的骗局--前言
- WFeB全球免费图书馆 World Free eBook