前序
目前大多数项目都在以前后端分离方式进行项目的开发、部署。这样方便在更新前端时,不用重启后端,反之亦然,前后端解耦也提高开发的效率。今天咱们讲讲在如何在k8s集群中进行前后端分离部署。
给大家分析个:
小镜智能AI ChatGPT镜像站:https://xj.xiaozhi01.com/42091
镜像制作
后端
dockerfile编写
#基于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-8ENV LANG zh_CN.utf8COPY ./server /server/#端口映射EXPOSE 8080#执行命令,给sh脚本赋予执行权限RUN chmod a+x start.sh#指定启动后需要执行的脚本ENTRYPOINT ["./start.sh"]
构建镜像
docker build -f dockerfile -t server:0.0.1 .
前端
dockerfile
前端镜像打算以nginx镜像作为基镜像,把前端项目文件构建结果拷贝进去,如下:
#基于openjdk镜像FROM nginxCOPY nginx.conf /etc/nginx/COPY web /opt/front/
nginx.conf为自己写的nginx配置文件,拷贝进去后覆盖nginx镜像中的配置文件内容。 /opt/front路径是nginx默认找静态资源的路径
构建镜像
将dockerfile文件放在web目录同级
docker build -f dockerfile -t web:0.0.1 .
编写k8s资源yaml
后端
deploy以及service资源yaml
apiVersion: apps/v1kind: Deploymentmetadata: name: backend-v2spec: 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: v1kind: Servicemetadata: name: backend-v1spec: selector: app: server-v1 ports: - protocol: TCP port: 8080 targetPort: 8080
前端
deploy以及service资源yaml
apiVersion: apps/v1kind: Deploymentmetadata: name: front-v2spec: 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: v1kind: Servicemetadata: name: front-v1spec: selector: app: web-v1 ports: - protocol: TCP port: 80 targetPort: 80
外部访问ingress-nginx资源yaml编写
apiVersion: networking.k8s.io/v1kind: Ingressmetadata: name: test-demo annotations: kubernetes.io/ingress.class: nginxspec: 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
结语
最后给大家分享个
小镜智能AI ChatGPT镜像站:https://xj.xiaozhi01.com/42091
以上内容涵盖前后端镜像dokcerfile编写到镜像制作,以及部署至k8s集群所需的deployment、service的yaml资源的编写,和ingress的yaml资源的编写。因大家的项目情况各不相同,以上只是一个整体的参考。如果有问题,还请各位小伙伴在评论区进行讨论,大家互相学习,共同进步!