簡介:該項目是使用Springboot框架開發的簡單的考勤簽到系統,依賴MySql數據庫記錄數據,能夠實現註冊、登陸、簽到、修改個人信息,查看簽到記錄等功能
源碼地址:考勤簽到Springboot項目
確定整個實現步驟
一、將服務製作成基礎鏡像
1、該項目基於Java的Springboot框架開發,所以基礎鏡像使用 openjdk鏡像
docker pull openjdk:8-jre-alpine
2、使用mvn將該項目打包成jar包,需提前在服務器配置好Java和maven的環境
mvn package
在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也要對應進行修改
創建對應的數據庫和表,添加數據庫字段
學生信息表的設計如下:
列名 | 數據類型 | 長度 | 主鍵 | 是否非空 |
---|---|---|---|---|
id | int | 10 | yes | yes |
stuno | int | 20 | no | yes |
name | varchar | 30 | no | yes |
password | varchar | 20 | no | yes |
classid | varchar | 20 | no | no |
varchar | 20 | no | no | |
phone | varchar | 30 | no | no |
學生信息表的字段格式說明如下:
序號 | 學號 | 姓名 | 密碼 | 班級 | 郵箱 | 電話 |
---|---|---|---|---|---|---|
01 | 1706010302 | 測試 | 123556 | 計算機六班 | [email protected] | 1525252 |
考勤記錄表的設計如下:
列名 | 數據類型 | 長度 | 主鍵 | 是否爲空 |
---|---|---|---|---|
id | inr | 10 | yes | yes |
stuno | varchar | 20 | no | yes |
name | varchar | 30 | no | yes |
puch_intimr | datetime | no | yes |
考勤記錄表的字段格式說明如下:
序號 | 學號 | 姓名 | 簽到時間 |
---|---|---|---|
01 | 1706010302 | 測試 | 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 ('1', '176815', '張三', '123', '計算機1班', '[email protected]', '17688903055');
INSERT INTO `student` VALUES ('2', '1111111', '李四', '123123', '1111', '[email protected]', '17688903066');
INSERT INTO `student` VALUES ('3', '123456', '李四', '123', '計算機1班', '[email protected]', '15971488899');
INSERT INTO `student` VALUES ('4', '111111', '王五', '123', '計算機2班', '[email protected]', '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@vmlabmaster-dev HHUDBExam]# kubectl get po |grep springboot
springboot-web-67f69d94f5-59wjh 1/1 Running 0 53s
[root@vmlabmaster-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上確定調度策略,部署服務。