k8s前后端分离部署实践

前序

目前大多数项目都在以前后端分离方式进行项目的开发、部署。这样方便在更新前端时,不用重启后端,反之亦然,前后端解耦也提高开发的效率。今天咱们讲讲在如何在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资源的编写。因大家的项目情况各不相同,以上只是一个整体的参考。如果有问题,还请各位小伙伴在评论区进行讨论,大家互相学习,共同进步!

相关推荐
向上的车轮1 小时前
云原生的12个要素是什么?
云原生
只因在人海中多看了你一眼6 小时前
B.50.10.10-微服务与电商应用
微服务·云原生·架构
喂完待续8 小时前
【序列晋升】29 Spring Cloud Task 微服务架构下的轻量级任务调度框架
java·spring·spring cloud·云原生·架构·big data·序列晋升
衍余未了8 小时前
centos9 docker启动不起来,docker启动发生堵塞问题!
运维·docker·容器
我真的是大笨蛋9 小时前
K8S-基础架构
笔记·云原生·容器·kubernetes
tianyuanwo10 小时前
Docker Registry 实现原理、适用场景、常用操作及搭建详解
运维·docker·容器·registry
木二_11 小时前
附050.Kubernetes Karmada Helm部署联邦及使用
容器·kubernetes·karmada·kubernetes联邦·集群联邦
wdxylb12 小时前
Kubernetes实战系列(4)
云原生·容器·kubernetes
专注代码七年13 小时前
Docker 本地开发环境搭建(MySQL5.7 + Redis7 + Nginx + 达梦8)- Windows11 版 2.0
nginx·docker·容器
我真的是大笨蛋13 小时前
K8S-Pod(上)
java·云原生·容器·kubernetes