k8s部署springboot项目
本篇来演示一下 如何使用 k8s 来快速部署一个 springboot项目 ,体验一下 k8s和实际项目的结合
1.环境准备
- 操作系统:Centos7 (CentOS Linux release 7.9.2009)
- Master 主节点: 1台 虚拟机
- Node 计算节点: 2台 虚拟机
- K8s version:v1.23.5 (选的较新的版本)
- Docker version:20.10.14
环境和前面中 kubeadm 搭建 k8s 的一致
2.部署流程 概述
- 创建SpringBoot 项目 开放一个 /k8s/hello 接口 用于测试
- 通过编写 dockerfile 把springboot项目添加进去 构建一个镜像
- 把镜像 push 到对应的 阿里云仓库(或者harbor 等等..)
- 编写 k8s yaml 进行部署2个副本 + ingress 实现基本的负载均衡
- kubectl 进行部署
- 访问请求路径 进行测试
3.创建springboot项目
省略创建项目步骤
提供一个 /k8s/hello 接口 接收一个 name 参数,打印并且返回
4.编写 Dockerfile文件构建镜像
dockerfile文件很简单 就是启动上面的springboot 项目
4.1 Dockerfile 文件
FROM openjdk:8-alpine
COPY ./target/springboot-k8s-0.0.1-SNAPSHOT.jar /app/springboot-k8s-demo.jar
ENTRYPOINT ["java", "-jar" , "/app/springboot-k8s-demo.jar"]
4.2 执行构建命令
docker build -t boot-k8s-demo:v1 #构建镜像
5.把镜像 push 到对应的 阿里云仓库
这里简单使用 阿里云镜像仓库 作为 镜像存储地,可以根据实际情况 比如上传到 Harbor 等等都可以
docker tag boot-k8s-demo:v1 registry.cn-hangzhou.aliyuncs.com/askajohnny/k8s:v1 #打标签 用于上传到 阿里云镜像仓库
docker login --username=176xxxxx741 registry.cn-hangzhou.aliyuncs.com
docker push registry.cn-hangzhou.aliyuncs.com/askajohnny/k8s:v1 #推送镜像到 阿里云仓库
6.编写 k8s yaml 进行部署2个副本 + ingress 实现基本的负载均衡
部署中 简单定义了Deployment 和 一个 Service 最后还定义了一个 Ingress 资源文件,前提是 已经部署了 Ingress-nginx 来解析这个文件(不详 可以看上一篇 关于 如何部署 Ingress-nginx )
apiVersion: apps/v1
kind: Deployment #部署
metadata:
name: springboot-app
spec:
replicas: 2 #2个副本
selector:
matchLabels:
app: springboot-app
template:
metadata:
labels:
app: springboot-app
spec:
containers:
- name: springboot-app
image: registry.cn-hangzhou.aliyuncs.com/askajohnny/k8s:v1 #刚刚push到阿里云上的镜像地址
ports:
- containerPort: 8080 #默认springboot端口
---
apiVersion: v1
kind: Service
metadata:
name: springboot-app
spec:
selector:
app: springboot-app #选中上面的 Deployment
ports:
- port: 7003 #对外7003端口
targetPort: 8080
---
#Ingress
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: myingress
labels:
name: myingress
spec:
IngressClass: nginx
rules:
- host: springboot.demo.com #所有的host这个域名请求 转发到上面的 Service= springboot-app
http:
paths:
- pathType: Prefix
path: "/"
backend:
service:
name: springboot-app # 转发到 这个Service
port:
number: 7003
7. kubectl 部署 deploy-springboot-k8s.yaml
使用 kubectl 进行部署上面的 部署文件
kubect apply -f deploy-springboot-k8s.yaml
kubectl get all #查看 default 下面的所有
可以看到 2个 副本pod 已经Running
8.访问请求路径 进行测试
访问前 需要先把 springboot.demo.com 域名添加到 宿主机的 /etc/hosts中 保证可以正常解析到 ingress-nginx那台机器上的nginx 即可 (不详 可以看上一篇)
请求接口:http://springboot.demo.com/k8...
查看 两个副本的 日志,可以看到 Ingress 的默认轮训负载均衡策略也生效了 ,至此 k8s部署springboot项目已经结束
总结
本篇主要 讲解了 k8s 如何部署springboot项目,过程很简单 ,目前只是半手动部署,后面引入 CICD 实现真正的 自动化部署。
欢迎大家访问个人博客 : https://www.askajohnny.com
欢迎大家访问 个人博客 Johnny小屋
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。