项目介绍
该项目为自己在学习k8s的过程中,做的一个小的部署项目,完全在k8s中部署mayday项目。
mayday项目是一个开源的项目,前后端不分离,打包即可部署,项目地址:https://gitee.com/song_haozhi/mayday,我这里已经将其打包为jar包,只需要JDK环境才能进行运行,JDK采用1.8版本,数据库采用MYSQL5.7.41数据库。
一、Mayday项目部署
由于此次需要在k8s集群中部署项目,因此将jar包和数据库都打包为docker镜像并上传到Harbor中,使用k8s集群从Harbor中拉取镜像进行部署。
1、生成MYSQL镜像
编辑Dockerfile文件
注意这里需要使用到mayday的初始化数据库文件,在gitee上面可以获取.sql文件
[root@localhost mysql]# cat Dockerfile
FROM mysql:5.7.41
ENV TZ=Asia/Shanghai
ENV LANG=en_US.UTF-8
ENV LANGUAGE=en_US:en
ENV LC_ALL=en_US.UTF-8
ENV MYSQL_ROOT_PASSWORD=123456
ENV MYSQL_DATABASE=mayday
COPY ./mayday.sql /docker-entrypoint-initdb.d/mayday.sql # 使用mysql的初始化文件
EXPOSE 3306
CMD ["mysqld"]
mysql初始化文件与Dockerfile在同一文件夹内:
生成镜像
[root@localhost mysql]# docker build -t mysql .
推送镜像到Harbor
镜像所在地址与Harbor在同一台服务器,使用本机IP即可。另外需要事先在Harbor中创建对应的项目
[root@localhost mysql]# docker tag mysql:latest 127.0.0.1/mysql/mysql:v1
[root@localhost mysql]# docker push 127.0.0.1/mysql/mysql:v1
2、生成jar镜像
mayday是开源项目,项目中的数据库地址、用户名、密码为默认密码,需要更改为实际的数据库名、用户和密码。
更改jar包的数据库连接信息
使用vim编辑器编辑jar包,搜索application.yaml文件,更改对应信息即可,或者在打包之前更改applicaiton.yml文件
注意:mysql的端口使用的为非默认端口,因为后续需要以NodePort形式部署Mysql,更改为k8s的Mysql服务对应的IP和端口
编辑jar包对应的Dockerfile文件
[root@localhost mayday]# cat Dockerfile
FROM centos:7
MAINTAINER "xxx" <xxx>
ENV TZ=Asia/Liaoning
ENV LANG=en_US.UTF-8
ENV LANGUAGE=en_US:en
ENV LC_ALL=en.US.UTF-8
ADD jdk-8u211-linux-x64.tar.gz /usr/local/
RUN mv /usr/local/jdk1.8.0_211 /usr/local/java
ENV JAVA_HOME /usr/local/java/
ENV PATH $PATH:$JAVA_HOME/bin
COPY mayday.jar /usr/local
EXPOSE 8091
CMD java -jar /usr/local/mayday.jar
jar包运行使用centos7的基础镜像,在镜像内安装jdk1.8即可满足运行环境。
生成镜像
[root@localhost myday]# docker build -t mayday .
推送镜像到Harbor
镜像所在地址与Harbor在同一台服务器,使用本机IP即可。另外需要事先在Harbor中创建对应的项目
[root@localhost mysql]# docker tag mayday:latest 127.0.0.1/mayday/mysql:v1
[root@localhost mysql]# docker push 127.0.0.1/mayday/mayday:v1
3、部署
从Harbor拉取项目镜像和数据库镜像,并创建对应的工作负载和服务。
创建mayday部署文件
mayday提供的对外访问的端口为30051,mysql为30050,由于为测试环境,并没有使用statefulset部署mysql。
[root@master mayday]# cat mayday.yaml
apiVersion: v1
kind: Namespace
metadata:
name: mayday
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: mysql
namespace: mayday
labels:
app: mysql
spec:
replicas: 1
selector:
matchLabels:
app: mysql
template:
metadata:
labels:
app: mysql
spec:
containers:
- name: mysql
image: 192.168.253.25/mysql/mysql:v1
env:
- name: MYSQL_ROOT_PASSWORD
value: "123456"
- name: MYSQL_DATABASE
value: "mayday"
ports:
- containerPort: 3306
---
apiVersion: v1
kind: Service
metadata:
namespace: mayday
name: mysql
spec:
selector:
app: mysql
type: NodePort
ports:
- port: 3306
targetPort: 3306
nodePort: 30050
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: mayday
namespace: mayday
labels:
app: mayday
spec:
replicas: 1
selector:
matchLabels:
app: mayday
template:
metadata:
labels:
app: mayday
spec:
containers:
- name: mayday
image: 192.168.253.25/mayday/mayday:v1
imagePullPolicy: Always
ports:
- containerPort: 8091
---
apiVersion: v1
kind: Service
metadata:
name: mayday
namespace: mayday
spec:
selector:
app: mayday
type: NodePort
ports:
- port: 8091
targetPort: 8091
nodePort: 30051
应用yaml文件
[root@master mayday]# kubectl apply -f mayday.yaml
namespace/mayday created
deployment.apps/mysql created
service/mysql created
deployment.apps/mayday created
service/mayday created
查看对应的pod信息
所有的资源对应和工作负载都是在mayday的命名空间下,因此需要指定命名空间查看
[root@master mayday]# kubectl get pods -n mayday
NAME READY STATUS RESTARTS AGE
mayday-5f4cdf4c5b-qrlnl 1/1 Running 0 14s
mysql-fb8fbfc5b-xq498 1/1 Running 0 14s
访问测试
使用宿主机访问mayday服务的IP和端口,直接访问k8s集群中任意一个ip+30051端口,即可访问