当前位置: 首页 > 新闻中心 > springboot2精髓从构建小系统到架构分布式大系 李家智 实战开发入门

springboot2精髓从构建小系统到架构分布式大系 李家智 实战开发入门

发布时间:2024-03-30 10:31:47

  1. spring boot怎么启动
  2. K8s 部署 Spring boot 实践应用指南

一、spring boot怎么启动

springboot的三种启动方式

一:ide 运行application这个类的main方

二:在springboot的应用的根目录下运行mvn spring-boot:run

三:使用mvn install 生成jar后运行

先到项目根目录

mvn install

cd target

java -jar xxxx.jar

二、K8s 部署 Spring boot 实践应用指南

对k8s知识有一定了解掌握,能够明白pod、deployment、service、ingress 具体概念

准备一套可用的k8s环境

准备一个部署的spring boot 应用

k8s最小单元是pod, 而pod 是一组运行的容器,那么容器是怎么运行起来的呢 ? 就是通过构建的镜像。(目前我们使用的容器技术都是基于docker)

那先让我们来一起制作个镜像,

将一个可运行的项目打包成一个jar文件,创建一个文件dockerfile,dockerfile和jar放到同一个目录 编写dockerfile

执行生成镜像命令

docker build -f ./dockerfile -t "/test/helloworld-server:v1" .

查看镜像 docker images

运行镜像是否正常 9000为宿主机访问端口

docker run -p 9000:8080 /test/helloworld-server:v1

通过curl或者浏览器访问 localhost:9000 服务是否正常,如果正常说明镜像制作成功,开始准备把镜像上传到仓库, 上传之前确定是否登录,如果没有登录执行 : docker login 仓库地址

如果仓库使用的是harbor tag的名字格式改为:

仓库地址/仓库/名称,

比如 harbor.com/test/helloword-service

修改镜像 tag

docker tag <imageid> reg.com/test/helloworld-server:v1

上传镜像

docker push reg.com/test/helloworld-server:v1

上传完镜像可以登录仓库查看是否上传成功。

创建deployment.yaml

执行 kubectl apply -f deployment.yaml

查看pod 是否创建成功 处于ready 状态

kubectl get pod -o wide

如果没有创建成功,通过log 或者 describe 查看具体原因

kubectl describe pod pod-namexxxxx

pod 的ip重启之后就会有变化,所以为了能够固定访问pod有了service的概念,pod绑定service,我们通过service来访问pod,service可以理解为集群内部的负载均衡流量的控制器,接下来我们开始创建service

创建service.ymal

我们使用的service type是nodeport,yaml里没有申明nodeport 所以k8s会默认创建一个nodeport (30000-40000),然后我们通过node ip 加 nodeport 就可以访问service。

kubectl apply -f service.yaml

查看nodeport kubectl get svc -o -wide

通过curl node ip : nodeport 查看是否路由到pod的服务,service的路由是针对内部使用,所以对外我们还需要提供另一种访问方式 那就是ingress,(还有其它访问方式,本章使用ingress)接下俩就是创建ingress

ingress.ymal

kubectl apply -f ingress.ymal

安装ingress contoller

查看ingress contoller pod 是否创建成功,一般情况pull镜像的时候会失败,需要手动 docker pull .

配置host nodeip helloserver.com,通过 curl helloserver.com:ingress contoller nodeport 访问。可以配置ha proxy 解决不用加端口问题

查看ingress contoller nodeport

kubectl get svc -o -wide -n ingress-nginx

到目前为止整个访问流程就配置完成了,如果我们配置完之后仍然访问不了

,可以一步一步的排除

绑定关系

检查pod是否正常

kubectl describe pod <pod name>

检查service 绑定pod配置是否正确 从service 访问pod endpoints

kubectl describe service <service-name> | grep endpoints

一个 endpoint 是一对<ip address:port>,并且当 service(至少)target 一个 pod 时。至少有一对

检查ingress 配置

kubectl describe ingress <ingress-name>

如果你能在 /backend/ 列中看到 endpoint,但依旧无法访问应用程序,那么可能是以下问题:

如果你毫无头绪,那么在 kubernetes 中进行故障排除可能是一项艰巨的任务。

你应该永远记住以从下至上的顺序解决问题:现检查 pod,然后向上移动堆栈至 service 和 ingress。