k8s部署springboot实践应用指南

author author     2023-04-09     725

关键词:

参考技术A

对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。

《springboot编程实战与面试指南》05-04:springboot应用的打包和部署(代码片段)

 《SpringBoot编程实战与面试指南》05-04:SpringBoot应用的打包和部署 传统的Web应用进行打包部署时,通常会打成War包的形式,然后将War包部署到Tomcat等服务器中,而SpringBoot应用使用的是嵌入式Servlet容器,也就是说,SpringBoo... 查看详情

使用docker部署springboot并接入skywalking(代码片段)

一、概述最近在研究skywalking,打算使用k8s部署skywalking并将pod中的应用接入skywalking进行服务链路追踪。这篇文章先不介绍skywalking在k8s中的部署和使用,而是先介绍如何使用手动和docker的方式使用skywalking。在整个实践过程中查阅... 查看详情

在k8s中部署springboot应用,爽!(代码片段)

....io/2020/04/08/Spring-Boot-Operator-User-Guide/前言在Kubernetes中部署springboot应用整体上来说是一件比较繁琐的事情,而SpringBootOperator则能带给你更清爽简单的体验。SpringBootOperator基于 查看详情

k8s实践12:traefik基础部署(外部访问kuberntes业务应用)(代码片段)

1.项目地址https://docs.traefik.io/获取配置文件wgethttps://raw.githubusercontent.com/containous/traefik/v1.7/examples/k8s/traefik-rbac.yamlwgethttps://raw.githubusercontent.com/containous/traefik/v1.7/examples/k 查看详情

istio实践-路由控制及多应用部署(netcore&springboot)

...istio应用部署及服务间调用,本文介绍通过构建.netcore与springboot简单服务应用,实现服务间调用及相关路由控制等1、.netcore代码介绍及应用部署新建.netcorewebapi服务项目,添加简单服务调用方法(getStrByServiceName与getS 查看详情

springsecurity接口认证鉴权入门实践指南

...“太复杂了”的说法也是很有道理的。本文以一个简单的SpringBootWeb以应用为例,重点介绍以下内容:创建SpringBoot示例,用于演示SpringSecurity在SpringBoot环境下的应用,简要介绍四部分内容:pom.xml、application.yml、IndexController和HelloC... 查看详情

k8s集群使用ingress实现网站入口动静分离实践(代码片段)

...份在公司的内部k8s培训会上,和研发同事详细探讨了应用部署容器化部署的几个问题,问题简要如下:1、java应用容器化部署首先通过自动化部署工具编译出全量的war包,将war包直接编译到docker镜像后推送到私用仓库并版本化控... 查看详情

在k8s中部署springboot应用,爽..(代码片段)

....io/2020/04/08/Spring-Boot-Operator-User-Guide/前言在Kubernetes中部署springboot应用整体上来说是一件比较繁琐的事情,而SpringBootOperator则能带给你更清爽简单的体验。SpringBootOperator基于Kubernetes的customresourcedefinitions(CRDs)扩展API进行的开发... 查看详情

springboot部署jar文件,瘦身优化指南!

...问题可Issue反馈以便及时更正,感谢支持!概要说明随着SpringBoot的流行,大家体验到只需构建输出一个jar文件,然后只需一个java-jar命令就能部署运行应用的 查看详情

springboot在k8s下实现优雅停机

...,否则滚动升级时,还是会影响到业务。所以,我们希望SpringBoot应用实现优雅停机。此次教程基于SpringBoot2.5.0。默认情况下,SpringBoot是直接关机的,所以,需要将优雅停机配置打开。在applicatoin.yaml中配置:这时我们只需要在发... 查看详情

使用springbootoperator部署springboot到k8s(代码片段)

...u.io/2020/04/08/Spring-Boot-Operator-User-Guide前言在Kubernetes中部署springboot应用整体上来说是一件比较繁琐的事情,而SpringBootOperator则能带给你更清爽简单的体验。SpringBootOperator基于Kubernete 查看详情

k8s部署springboot项目

...署,接下来需要验证,本文选择通过一个简单的springboot项目来验证。springboot项目构建springboot项目这里不过多介绍,主要介绍如何构建镜像及推送到镜像仓库镜像构建首先新建文件dockerfileFROMopenjdk 查看详情

k8s部署springboot项目

...印并且返回可以看到2个副本pod已经Running访问前需要先把springboot.demo.com域名添加到宿主机的/etc/hosts中保证可以正常解析到ingress-nginx那台机器上的nginx即可(不详可以看上一篇)请求接口:http://springboot.demo.com/k8s/hello?name=johnny查... 查看详情

部署k8s集群(k8s集群搭建详细实践版)

1、部署k8s的两种方式:目前生产部署Kubernetes集群主要有两种方式:kubeadmKubeadm是一个K8s部署工具,提供kubeadminit和kubeadmjoin,用于快速部署Kubernetes集群。二进制包从github下载发行版的二进制包,手动部署每个... 查看详情

部署k8s集群(k8s集群搭建详细实践版)

1、部署k8s的两种方式:目前生产部署Kubernetes集群主要有两种方式:kubeadmKubeadm是一个K8s部署工具,提供kubeadminit和kubeadmjoin,用于快速部署Kubernetes集群。二进制包从github下载发行版的二进制包,手动部署每个... 查看详情

k8s1.8.2部署实践(代码片段)

由于业务需要,近期在研究k8s,故就需要先部署一套。我通过官方文档来部署发现还是有一些坑,故整理了部署中遇到的问题做个记录。本文章主要介绍了在centos7环境下k8s1.8.2+dashboard+metricsserver+ingress的部署。系统环境1,k8s的版... 查看详情

tungstenfabric与k8s集成指南丨部署准备与初始状态

...Kubernetes集成指南系列,本文介绍K8s组件和TungstenFabric组件部署的准备工作,以及运行的初始状态。TungstenFabric与K8s集成指南系列文章,由TF中文社区为您呈现,旨在帮助大家了解TungstenFabric与K8s集成的基础知识。大家在相关部署中... 查看详情

2019工作总结(代码片段)

...ava服务至k8s接入100+个项目的配置至nacos升级60+个mvc项目至springboot框架配合下架40+服务器,k8s侧下架20+台200+服务日志全量接入ELK,并配置报警30+个新项目上线支持学习方面2019年基本上都是在学习k8s、docker、ELKgo开发全链路监控、... 查看详情