Springboot项目部署到k8s集群

一、Springboot快速入门

简介:Springboot使你可以非常容器的创建一个独立的、生产级的、基于spring的应用。它大量简化了使用spring带来的繁琐的配置,大部分基于SpringBoot的应用只需要一点点的配置

特征:

  • 独立的spring应用(内置tomcat、jetty,无需部署war包)

  • 提供 丰富的"starter"依赖,简化应用构建配置

  • 自动配置spring和第三方依赖库

  • 没有代码生成,没有xml配置

  • 提供准生成功能,如指标,健康检查和外部配置

访问官网:https://start.spring.io/

二、确定整个实现步骤

项目介绍:该项目是使用Springboot框架开发的简单的考勤签到系统,依赖MySql数据库记录数据,能够实现注册、登陆、签到、修改个人信息,查看签到记录等功能

源码地址:考勤签到Springboot项目
Snipaste_2020-07-04_15-06-50.png

三、将服务制作成基础镜像

1、该项目基于Java的Springboot框架开发,所以基础镜像使用 openjdk镜像

docker pull openjdk:8-jre-alpine

2、使用mvn将该项目打包成jar包,需提前在服务器配置好Java和maven的环境

mvn package

Snipaste_2020-07-04_15-12-16.png

target/下会生成hhu-dbexam-0.0.1-SNAPSHOT.jar的文件,可以先在本地测试一下

java -jar hhu-dbexam-0.0.1-SNAPSHOT.jar

在这里插入图片描述

3、使用Dockerfile构建docker,推送到我们的阿里云镜像仓库

$ cat Dockerfile
FROM openjdk:8-jre-alpine
COPY target/hhu-dbexam-0.0.1-SNAPSHOT.jar /hhu-dbexam-0.0.1-SNAPSHOT.jar
ENTRYPOINT ["java","-jar","/hhu-dbexam-0.0.1-SNAPSHOT.jar"]

$ docker build -t springboot-web:v1 .

四、部署依赖服务MySQL

这里也是使用Pod进行部署,但未做数据持久化,下面是mysql-rc.yaml部署文件内容

---
apiVersion: v1
kind: ReplicationController
metadata:
  name: mysql
spec:
  replicas: 1
  selector:
    app: mysql
  template:
    metadata:
      labels:
        app: mysql
    spec:
      containers:
      - name: mysql
        image: hub.c.163.com/library/mysql
        ports:
        - containerPort: 3306
        env:
        - name: MYSQL_ROOT_PASSWORD
          value: "123456"
---
apiVersion: v1
kind: Service
metadata:
  name: msyql-service
  labels:
    app: nginx
spec:
  ports:
  - port: 3306
    targetPort: 3306
  selector:
    app: mysql
  type: NodePort

修改代码中链接信息,使其能够连接数据库,url也要对应进行修改
在这里插入图片描述

创建对应的数据库和表,添加数据库字段

学生信息表的设计如下:

列名数据类型长度主键是否非空
idint10yesyes
stunoint20noyes
namevarchar30noyes
passwordvarchar20noyes
classidvarchar20nono
emailvarchar20nono
phonevarchar30nono

学生信息表的字段格式说明如下:

序号学号姓名密码班级邮箱电话
011706010302测试123556计算机六班12321@qq.com1525252

考勤记录表的设计如下:

列名数据类型长度主键是否为空
idinr10yesyes
stunovarchar20noyes
namevarchar30noyes
puch_intimrdatetimenoyes

考勤记录表的字段格式说明如下:

序号学号姓名签到时间
011706010302测试2020-04-29 09:27:17

下面是数据库导出的hhu_dbexam.sql文件

/*
Navicat MySQL Data Transfer

Source Server         : 10.139.8.42
Source Server Version : 50718
Source Host           : 10.139.8.42:31645
Source Database       : hhu_dbexam

Target Server Type    : MYSQL
Target Server Version : 50718
File Encoding         : 65001

Date: 2020-07-04 15:28:28
*/

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- Table structure for punch_in
-- ----------------------------
DROP TABLE IF EXISTS `punch_in`;
CREATE TABLE `punch_in` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `stuno` varchar(20) NOT NULL,
  `name` varchar(30) NOT NULL,
  `puch_intimr` datetime NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of punch_in
-- ----------------------------

-- ----------------------------
-- Table structure for student
-- ----------------------------
DROP TABLE IF EXISTS `student`;
CREATE TABLE `student` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `stuno` int(20) NOT NULL,
  `name` varchar(30) NOT NULL,
  `password` varchar(20) NOT NULL,
  `classid` varchar(20) DEFAULT NULL,
  `email` varchar(20) DEFAULT NULL,
  `phone` varchar(30) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of student
-- ----------------------------
INSERT INTO `student` VALUES ('2', '1111111', '李四', '123123', '1111', '11111@qq.com', '17688903066');
INSERT INTO `student` VALUES ('3', '123456', '李四', '123', '计算机1班', '888888@qq.com', '15971488899');
INSERT INTO `student` VALUES ('4', '111111', '王五', '123', '计算机2班', '1111@11.com', '18788899999');

五、制作k8s服务并调度

这个项目我们需要使用web界面进行访问,我们使用deploment创建Pod,需要使用NodePort进行暴露或者Ingress域名访问服务

下面是springboot-web.yaml部署文件内容

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: springboot-web
spec:
  selector:
    matchLabels:
      app: springboot-web
  replicas: 1
  template:
    metadata:
      labels:
        app: springboot-web
    spec:
      containers:
      - name: springboot-web
        image: registry.cn-hangzhou.aliyuncs.com/other_ns/springboot-web:v1
        ports:
        - containerPort: 8080
---
#service
apiVersion: v1
kind: Service
metadata:
  name: springboot-web
spec:
  ports:
  - port: 80
    protocol: TCP
    targetPort: 8080
  selector:
    app: springboot-web
  type: NodePort

部署上述文件后查看pod和service是否正常运行

[root@master-dev HHUDBExam]# kubectl get po |grep springboot
springboot-web-67f69d94f5-59wjh               1/1     Running   0          53s
[root@master-dev HHUDBExam]# kubectl get svc | grep springboot-web
springboot-web               NodePort    10.110.69.65     <none>        80:31706/TCP      59s

我们访问 http://ip:31706访问我们的服务

在这里插入图片描述

至此,我们一个Springboot项目就完成在k8s上面的部署,总结一下流程,先找到基础镜像,在搞定运行的文件,然后将文件打包到镜像里面,最后在k8s上确定调度策略,部署服务。

  • 5
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值