Springboot項目部署到k8s集羣

簡介:該項目是使用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也要對應進行修改
在這裏插入圖片描述

創建對應的數據庫和表,添加數據庫字段

學生信息表的設計如下:

列名 數據類型 長度 主鍵 是否非空
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
email 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上確定調度策略,部署服務。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章