前序
目前大多数项目都在以前后端分离方式进行项目的开发、部署。这样方便在更新前端时,不用重启后端,反之亦然,前后端解耦也提高开发的效率。今天咱们讲讲在如何在k8s集群中进行前后端分离部署。
镜像制作
后端
dockerfile编写
bash
复制代码
#基于openjdk镜像
FROM adoptopenjdk:8u222-b10-jdk-hotspot-bionic
#指定app目录为当前运行目录
WORKDIR /server
#安装字体及相关环境变量
RUN apt-get update && apt-get -y install fontconfig && apt-get install -y locales && rm -rf /var/lib/apt/lists/* \ && localedef -i zh_CN -c -f UTF-8 -A /usr/share/locale/locale.alias zh_CN.UTF-8
ENV LANG zh_CN.utf8
COPY ./server /server/
#端口映射
EXPOSE 8080
#执行命令,给sh脚本赋予执行权限
RUN chmod a+x start.sh
#指定启动后需要执行的脚本
ENTRYPOINT ["./start.sh"]
构建镜像
将dockerfile文件放在后端工程server同一层级下执行
vbscript
复制代码
docker build -f dockerfile -t server:0.0.1 .
记得以上命令中最后的.不能删掉
前端
dockerfile
前端镜像打算以nginx镜像作为基镜像,把前端项目文件构建结果拷贝进去,如下:
bash
复制代码
#基于openjdk镜像
FROM nginx
COPY nginx.conf /etc/nginx/
COPY web /opt/front/
nginx.conf为自己写的nginx配置文件,拷贝进去后覆盖nginx镜像中的配置文件内容。 /opt/front路径是nginx默认找静态资源的路径
构建镜像
将dockerfile文件放在web目录同级
erlang
复制代码
docker build -f dockerfile -t web:0.0.1 .
编写k8s资源yaml
后端
deploy以及service资源yaml
yaml
复制代码
apiVersion: apps/v1
kind: Deployment
metadata:
name: backend-v2
spec:
selector:
matchLabels:
app: server-v1
replicas: 1
template:
metadata:
labels:
app: server-v1
spec:
containers:
- name: server-v1
image: xxxxxx:8082/repository/mydocker/server:0.0.1 #替换为自己的docker镜像仓库地址
ports:
- containerPort: 8080
# nodeName: node1
---
apiVersion: v1
kind: Service
metadata:
name: backend-v1
spec:
selector:
app: server-v1
ports:
- protocol: TCP
port: 8080
targetPort: 8080
前端
deploy以及service资源yaml
yaml
复制代码
apiVersion: apps/v1
kind: Deployment
metadata:
name: front-v2
spec:
selector:
matchLabels:
app: web-v1
replicas: 1
template:
metadata:
labels:
app: web-v1
spec:
# nodeName: node1
containers:
- name: web-v1
image: xxxxxxxxxxxx:8082/repository/mydocker/web:0.0.1 #替换为自己的docker镜像仓库地址
ports:
- containerPort: 80
# nodeName: node1
---
apiVersion: v1
kind: Service
metadata:
name: front-v1
spec:
selector:
app: web-v1
ports:
- protocol: TCP
port: 80
targetPort: 80
外部访问ingress-nginx资源yaml编写
yaml
复制代码
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: test-demo
annotations:
kubernetes.io/ingress.class: nginx
spec:
rules:
- http:
paths:
- path: /
pathType: ImplementationSpecific
backend:
service:
name: front-v1
port:
number: 80
- path: /api
pathType: Prefix
backend:
service:
name: backend-v1
port:
number: 8080
- path: /login-in
pathType: Prefix
backend:
service:
name: backend-v1
port:
number: 8080
- path: /logout
pathType: Prefix
backend:
service:
name: backend-v1
port:
number: 8080
结语
以上内容涵盖前后端镜像dokcerfile编写到镜像制作,以及部署至k8s集群所需的deployment、service的yaml资源的编写,和ingress的yaml资源的编写。因大家的项目情况各不相同,以上只是一个整体的参考。如果有问题,还请各位小伙伴在评论区进行讨论,大家互相学习,共同进步!
作者:IAlegend