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资源的编写。因大家的项目情况各不相同,以上只是一个整体的参考。如果有问题,还请各位小伙伴在评论区进行讨论,大家互相学习,共同进步!

相关推荐
勇哥的编程江湖4 小时前
starrocks官网docker部署mysql无法连接
运维·docker·容器
zoulingzhi_yjs6 小时前
haproxy配置详解
linux·云原生
qq_529835356 小时前
Zookeeper的简单了解
分布式·zookeeper·云原生
程序员小羊!10 小时前
Zookeeper 3.6.3【详细技术讲解】整
分布式·zookeeper·云原生
终端行者12 小时前
k8s之Ingress服务接入控制器
云原生·容器·kubernetes
不会敲代码的XW14 小时前
高可用集群KEEPALIVED的详细部署
运维·云原生
小裕哥略帅14 小时前
架构师--基于常见组件的微服务场景实战
微服务·云原生·架构
longxibo15 小时前
飞牛系统安装DataEase自定义Docker包
运维·docker·容器
Reggie_L16 小时前
Eureka-服务注册,服务发现
云原生·eureka·服务发现
学Linux的语莫17 小时前
k8s的nodeport和ingress
网络·rpc·kubernetes