K8S部署前后端分离项目并支持Mysql和Redis数据持久化保存

2023-11-16

Springboot+Vue+Mysql+Redis

文章目录

前端

#前端打包上传,必须与文件在同一目录

#创建文件夹
mkdir dist

cd dist

#用来挂载到nginx上
vi default.conf
1.default.conf文件
server {
    listen       80; #端口
    server_name  localhost; #ip

    #charset koi8-r;
    access_log  /var/log/nginx/host.access.log  main;
    error_log  /var/log/nginx/error.log  error;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
    location /prod-api/ {
        proxy_pass http://192.168.184.128:31004/; #指向后端地址
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_http_version 1.1;
        proxy_set_header Connection "";
    }
}
2.创建Dockerfile,生成镜像,依赖nginx挂载配置文件
#Dockerfile文件,生成镜像
vi Dockerfile

#用nginx挂载前端项目
FROM nginx
ADD dist/ /usr/share/nginx/html
ADD default.conf /etc/nginx/conf.d/default.conf
EXPOSE 80
ENTRYPOINT nginx -g "daemon off;"
3.执行完以上步骤后,进行build,tag,push远程仓库
#创建镜像
docker build . -t app:v1.0
#tag,供远程
docker tag app:v1.0 dockerdjyc/app:v1.0
#推送远程仓库,供k8s进行pull部署
docker push dockerdjyc/app:v1.0
4.以下进行k8s部署
#创建deploment.yaml文件,生成pod节点,并创建svc,端口暴露

vim deployment.yaml


apiVersion: apps/v1
kind: Deployment
metadata:
  name: vue #pod节点名称
  namespace: default
  labels:
    app: vue
spec:
  replicas: 1
  selector:
    matchLabels:
      app: vue    # has to match .spec.template.metadata.labels
  template:
    metadata:
      labels:
        app: vue # has to match .spec.selector.matchLabels
    spec:
      imagePullSecrets:
      - name: harbor-secret
      containers:
      - name: vue
        image: dockerdjyc/vue:v1.0 #pull镜像
        imagePullPolicy: Always
        env: 
        - name: TZ
          value: Asia/Shanghai
        ports:
        - containerPort: 80 #项目端口
          name: vue
        resources:
          requests:
            memory: 300Mi
            cpu: 200m
          limits:
            memory: 500Mi
            cpu: 400m

5.service.yaml
apiVersion: v1
kind: Service
metadata:
  name: vue
spec:
  ports:
    - port: 80
      targetPort: 80
      protocol: TCP
      #NOde上的静态端口
      nodePort: 31005
  type: NodePort
  selector:
    app: vue
#k8s进行部署
kubectl apply -f deployment.yaml

#端口暴露,外网访问
kubectl apply -f service.yaml

以上就是前端的部署,访问地址为:ip:暴露端口(31005)

后端

1.后端项目打包为jar上传至服务器,创建一个文件夹,都放在同一级目录下
#创建文件夹
mkdir /home/demo

#编写Dockerfile,供docker进行build
vi Dockerfile
#基于哪个镜像
FROM openjdk:8
VOLUME /tmp
#复制文件到容器
ADD ./jar包 别名.jar
RUN bash -c 'touch /别名.jar'
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/别名.jar"]

2.运行文件,生成镜像
docker build . -t 别名:v1.0
3.可以查看是否Build成功
docker images
4.将此镜像推送到远程仓库,供K8S拉取下来部署,首先需要tag一下
docker tag 镜像名称:版本号(v1.0) 远程仓库地址‘

docker push tag的名称

下一步到K8S中进行配置

部署mysql

1.创建PV
# 新建 PV 配置文件
vi mysql-pv.yaml

# mysql-pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: mysql-pv
  labels:
    pv: mysql-pv
spec:
  capacity:
    storage: 20Gi
  accessModes:
  - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  hostPath:
    path: /root/data

# 创建PV
kubectl create -f mysql-pv.yaml
# 检验
kubectl get pv

2.创建PVC
# 新建 PVC 配置文件
vi mysql-pvc.yaml

# cat mysql-pvc.yaml
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: mysql-pvc
spec:
  storageClassName: ""
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi
  selector:
    matchLabels:
      pv: mysql-pv

# 创建 PVC
kubectl create -f mysql-pvc.yaml
# 校验
kubectl get pvc

3.创建 Deployment
# 新建 Deployment 配置文件
vi mysql-deploy.yaml
# cat mysql-deploy.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: mysql-deploy
spec:
  replicas: 1
  selector:
    matchLabels:
      name: mysql-ops
  template:
    metadata:
      labels:
        name: mysql-ops
    spec:
      containers:
        - name: mysql
          image: mysql #镜像
          imagePullPolicy: IfNotPresent
          env:
          - name: MYSQL_ROOT_PASSWORD
            value: "123456"
          - name: TZ
            value: Asia/Shanghai
          ports:
            - containerPort: 3306
          volumeMounts:
            - name: mysql-persistent-storage
              mountPath: "/var/lib/mysql"
      volumes:
        - name: mysql-persistent-storage
          persistentVolumeClaim:
            claimName: mysql-pvc

# 创建 Deployment
kubectl create -f mysql-deploy.yaml
# 校验
kubectl get deploy

4.创建 Service
# 新建 Service 配置文件
vi mysql-service.yaml
# cat mysql-service.yaml
apiVersion: v1
kind: Service
metadata:
  name: mysql-svc
  labels:
    name: mysql-svc
spec:
  type: NodePort
  ports:
  - port: 3306
    protocol: TCP
    targetPort: 3306
    name: http
    nodePort: 30306
  selector:
    name: mysql-ops

# 创建 Service
kubectl create -f mysql-service.yaml
# 校验
kubectl get svc

5.容器中进入Mysql
kubectl exec -it mysql-deploy-6fd5745c87-ltmwb  -- mysql -u root -p
6.连接 MySQL,等待一段时间后,k8s集群自动分配Node进行部署MySQL,通过命令查看pod对应的node
kubectl get po -o wide
7.如果看到了又mysql字样的,说明部署成功,也可以远程连接,通过以下命令查看
kubectl get svc

效果图

在这里插入图片描述

配置Redis

1.创建redis存储数据目录和配置文件
mkdir -p /data/redis/redis-config/
touch /data/redis/redis-config/redis.conf
cat >> /data/redis/redis-config/redis.conf << EOF
#配置密码
#requirepass 123456
bind 0.0.0.0
save 900 1
save 300 10
save 60 10000
EOF
2.创建depkoyment.yaml文件
apiVersion: apps/v1
kind: Deployment
metadata:
  name: redis
  namespace: default # 默认空间
  labels:
    name: redis
spec:
  replicas: 1
  selector:
    matchLabels:
      name: redis
  template:
    metadata:
      labels:
        name: redis
    spec:
      containers:
      - name: redis
        image: redis
        volumeMounts:
        - name: redis-config
          mountPath: "/usr/local/etc/redis"
        - name: redis-data
          mountPath: "/data"
        command:
          - "redis-server"
        args:
          - "/usr/local/etc/redis/redis.conf"
      volumes:
      - name: redis-config
        hostPath:
          path: /data/redis/redis-config
          type: DirectoryOrCreate
      - name: redis-data
        hostPath:
          path: /data/redis/redis-data
          type: DirectoryOrCreate

3.创建service.yaml文件
apiVersion: v1
kind: Service
metadata:
 # 定义服务名称,其他Pod可以通过服务名称作为域名进行访问
 name: redis-service
 namespace: default # 默认空间
 labels:
   name: redis-service
spec:
 type: NodePort   # 如果需要集群外部访问,这里改为NodePort
 ports:
 - port: 6379
   protocol: TCP
   targetPort: 6379
   name: redis
    # Node上的静态端口
   nodePort: 30379
 # 管理标签app为mysql的Pod
 selector:
   name: redis
4.依次执行以下命令进行构建
#部署redis
kubectl apply -f deployment.yaml

#端口暴露
kubeclt apply -f service.yaml
5.查看是否部署成功
 kubectl get pods --all-namespaces -o wide
6.容器中进入redis
kubectl exec -it redis-6f59d6d4cd-dzlq5 /bin/bash
redis-cli
效果图

在这里插入图片描述

以上步骤已经在K8S环境下部署了mysql和redis,下面进行项目的部署


1.编写deployment.yaml文件
apiVersion: apps/v1
kind: Deployment
metadata:
  name: demo-redis-mysql
  labels:
    app: demo-redis-mysql
spec:
  replicas: 1
  selector:
    matchLabels:
      app: demo-redis-mysql
  template:
    metadata:
      labels:
        app: demo-redis-mysql
    spec:
      containers:
        - name: demo-redis-mysql
          # 指定Docker Hub中的镜像地址
          image: dockerdjyc/demo-redis-mysql:v1.0
          imagePullPolicy: IfNotPresent
          ports:
            - containerPort: 8080
          env:
            # 指定数据库连接地址
            - name: spring.datasource.url
              value: jdbc:mysql://mysql-service:3306/test?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai #mysql-service:是刚才部署的mysql的service.yaml的名
            # 指定数据库连接密码
            - name: spring.datasource.password
              value: "root"
            # 指定redis连接地址
            - name: spring.redis.host
              value: redis-service #刚才部署的redis的service.yaml的名
            # 指定日志文件路径
            - name: logging.path
              value: /var/logs
            - name: TZ
              value: Asia/Shanghai
          volumeMounts:
            - mountPath: /var/logs
              name: log-volume
      volumes:
        - name: log-volume
          hostPath:
            path: /home/docker/mydata/app/mall-tiny-fabric/logs
            type: DirectoryOrCreate

2.编写service.yaml进行项目的端口暴露
apiVersion: v1
kind: Service
metadata:
  name: demo-redis-mysql #暴露名
spec:
  ports:
    - port: 8080 #项目端口
      targetPort: 8080 #pod节点内部服务的端口
      protocol: TCP
      #NOde上的静态端口
      nodePort: 31004
  type: NodePort
  selector:
    app: demo-redis-mysql
    
3.进行命令执行,执行上面两个文件,就可实现部署、端口暴露供外网访问
kubectl apply -f deployment.yaml

kubectl apply -f service.yaml
3.进行命令执行,执行上面两个文件,就可实现部署、端口暴露供外网访问
kubectl apply -f deployment.yaml

kubectl apply -f service.yaml
效果图

在这里插入图片描述

以上就是Docker+K8s前后端分离项目以及数据持久化部署的全部内容

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

K8S部署前后端分离项目并支持Mysql和Redis数据持久化保存 的相关文章

  • 社交应用程序的数据库设计和优化注意事项

    通常的情况 我有一个简单的应用程序 允许人们上传照片并关注其他人 因此 每个用户都会有类似 墙 或 活动源 的东西 他或她可以在其中看到他 她的朋友 他或她关注的人 上传的最新照片 大多数功能都很容易实现 然而 当涉及到这个历史活动源时 由
  • ActiveRecord3死锁重试

    Rails 3 或 ActiveRecord 3 是否有任何插件可以复制旧版本死锁重试 http agilewebdevelopment com plugins deadlock retry插入 或者 该插件仍然适用于 Rails 3 吗
  • 当“修复表”查询在 mysql 中不起作用时该怎么办?

    我收到此错误 表的存储引擎不支持修复 当我尝试使用查询修复表时repair table tbl college master 表是 innodb 类型 但我不知道我收到此错误 See 手册 http dev mysql com doc re
  • MySql 最后插入 ID,连接器 .net

    我正在使用 MySql Connector net 我需要获取最后一个查询生成的插入 id 现在 我假设返回值是MySqlHelper ExecuteNonQuery应该是最后一个插入id 但它只返回1 我正在使用的代码是 int inse
  • 比较表中的行以了解字段之间的差异

    我有一个包含 20 多列的表 客户端 其中大部分是历史数据 就像是 id clientID field1 field2 etc updateDate 如果我的数据如下所示 10 12 A A 2009 03 01 11 12 A B 200
  • Mysql innoDB 不断崩溃[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我的数据库 mysql 服务器不断崩溃 重新启动 我不知道该怎么办 我不断在 dbname org err 文件中收到以下内容 13120
  • PDO SQLSRV 和 PDO MySQL 在获取 int 或 float 时返回字符串

    当您获取时 PDO MS SQL Server 和 PDO MySQL 都会返回一个字符串数组 即使列的 SQL 类型本应是数字类型 例如 int 或 float 我设法解决了这个问题 但我想了解为什么它们一开始就这样设计 是不是因为PDO
  • 使 pdo::query 静态

    当我运行下面的代码时出现此错误 我通常使用 msql 函数 但我尝试使用 PDO 代替 怎么了 致命错误 第 14 行无法静态调用非静态方法 PDO query
  • Kubernetes 滚动更新不停机?

    根据https kubernetes io docs tutorials stateful application basic stateful set scaling a statefulset https kubernetes io d
  • PHP 绑定“bigint”数据类型(MySQLi 准备好的语句)

    studentId 57004542323382 companyOfferId 7 sql INSERT INTO studentPlacement companyOfferId studentId VALUES if stmt db gt
  • Mysql 检索所有有限制的行

    我想检索特定用户的所有行 限制为 0 x 所以我只是想问是否有任何方法可以检索 mysql 中的所有行 而不调用返回 x 的 count id 的方法 而不重载现有函数 该函数在查询中根本没有限制 与我们的 string Relace 功能
  • MySQL PHP邮政编码比较具体距离

    我试图找出比较一个邮政编码 用户提供的 和一大堆其他邮政编码 现在大约有 200 个邮政编码 之间的距离的最有效方法 相对于加载时间 但它会随着时间的推移而增加 我不需要任何精确的东西 只是在球场上 我下载了整个美国的邮政编码 csv 文件
  • 忽略重复条目并在 EF Core 中的 DbContext.SaveChanges() 上提交成功条目

    我有一个 ASP Net Core 2 2 Web API 在我的一个控制器操作中 我向 MySQL 数据库表添加了一堆行 我使用的是 Pomelo 例如 dbContext AddRange entities dbContext Save
  • 将古吉拉特语文本插入 MySQL 表会产生垃圾字符和不可读的文本

    我有三个 MySQL 表 我正在向其中插入古吉拉特语内容 当我插入两个表时 它们插入得很好并且可读 但在一个表中 它显示垃圾字符 不可读的文本 我怎样才能解决这个问题 MySQL 有每个表的字符集设置 http dev mysql com
  • MySQL 查询计算上个月

    我想计算上个月的订单总额 我收到了从当前日期获取当月数据的查询 SELECT SUM goods total AS Total Amount FROM orders WHERE order placed date gt date sub c
  • 在服务器上找不到本地主机或 phpMyAdmin:如何修复?

    我按照安装说明进行操作PHP MySQL and PHPMyAdmin 但是当我尝试访问时http localhost phpmyadmin 我收到此错误 未找到 在此找不到请求的 URL phpmyadmin 服务器 然后我尝试访问loc
  • Bugzilla 中分离客户端的基本权限

    我正在尝试配置一个 Bugzilla 实例 这将允许我的客户登录并为其正在开发 维护的网站提交错误 例如 我创建了 2 个名为 TestProject TestProject2 的产品和一个名为 TestClient 的用户 我想要实现的是
  • 如何在不手动修改文件的情况下编辑部署?

    我已经为我的应用程序定义了一个部署 apiVersion extensions v1beta1 kind Deployment metadata name myapp deployment spec replicas 2 template
  • 如何从shell脚本自动登录MySQL?

    我有一个 MySQL 服务器 其中有一个用户和密码 我想在 shell 脚本中执行一些 SQL 查询而不指定密码 如下所示 config sh MYSQL ROOT root MYSQL PASS password mysql sh sou
  • 如何使用 kubectl cp 通过列表过滤器自动将文件从本地系统复制到 kubernetes Pod

    我的 kubernetes 系统中有许多 pod 随机名称为 wordpress xxx xx 这里列出了pods https i stack imgur com k7Jxw png 我想使用一个命令kubectl cp另一种是将文件从一个

随机推荐

  • Spring(一)之控制反转和依赖注入

    1 sts下载 https spring io tools3 sts all 参考博客 https blog csdn net m0 37920381 article details 79972438 2 简介 spring是一个开源框架
  • JQuery针对select下拉框的各项操作

    JQuery针对select下拉框的各项操作 select id change function code 为Select添加事件 当选择其中一项时触发 var checkText select id find option selecte
  • union(联合)注入和布尔注入

    没有很快乐 也没有不快乐 好像不该这样 但也只能这样 成长也许如此 行于奔溃边缘又慢慢自愈吧 网易云热评 一 union联合注入 1 select 1 2 3会生成一张临时表 表中的字段为查询的字段 内容也是查询的字段 2 select 1
  • 什么是Chat GPT?我们能用它来干啥?

    Chat GPT是一款基于人工智能技术的自然语言处理模型 由OpenAI团队开发 它能够通过机器学习技术从海量文本数据中学习语言知识 实现自然语言生成 对话生成和语言理解等功能 使得机器能够更加智能地理解和使用自然语言 Chat GPT的应
  • C++中的异常处理(一)

    异常就是运行时出现的不正常 例如运行时耗尽了内存或遇到意外的非法输入 异常存在于程序的正常功能之外 并要求程序立即处理 不能不处理异常 异常是足够重要的 使程序不能继续正常执行的事件 如果找不到匹配的catch 程序就调用库函数termin
  • OnGUI一些方法使用

    在OnGUI中有很多基本的UI组件 接下来我来为大家介绍一下这些组件的用法与使用 首先是在OnGUI中的两种布局方法 第一种GUILayout BeginVertical 这个方法就是在编辑菜单打开面板的时候对面板的一个纵向的设置 然而又开
  • 深入探究Qt HTTP的内部构架

    一 前言 当今互联网时代中 B S Browser Server 浏览器 服务器 以及C S Client Server 客户端 服务器 架构已经是绝对的主流软件架构设计方式 除了极少部分的单机软件 它们各有优缺点 这里我们不展开讨论 但是
  • 华为云 DevCloud 部署云服务器

    本文基于已购买的华为云服务于使用华为云IAM子账号编写 一 云服务器 在华为云管理界面点击左上方打开服务列表 点击弹性云服务器ECS 进入云服务器管理列表 注意 如果提示没有权限需使用主账号开发云服务器权限与云硬盘权限 如下图 在服务器管理
  • 如何输入带有空格的string字符串

    利用 getline cin string include
  • C语言程序设计期末大作业(学生信息管理系统)(可自取源码)

    高校学生信息管理系统 一 在高校学生管理系统中包含九个主要操作 退出系统 学生信息的录入 学生信息的打印 学生信息的保存 学生信息的读取 学生人数的统计 学生信息的查找 学生信息的修改 学生信息的删除 二 设计流程 首先确认用switch
  • VR资源浏览网站

    https my matterport com 资源 https my matterport com show m kCeVCzCjQ5s
  • 关于TextView和ImageView的背景及透明设置小结

    关于TextView和ImageView的背景及透明设置小结 关于ImageView的相关设置 设置背景颜色 ImageView setBackgroundColor android graphics Color parseColor f3
  • MySQL中Char和VarChar的区别

    VarChar VARCHAR类型用于存储可变长字符串 是最常见的字符串数据类型 它比定长类型更节省空间 因为它仅使用必要的空间 例如 越短的字符串使用越少的空间 有一种情况例外 如果MySQL表使用ROW FORMAT FIXED创建的话
  • linux开机自动挂载配置文件/etc/fstab

    如果我们想实现开机自动挂载某设备 只要修改 etc fstab文件即可 文件挂载的配置文件 etc fstab 查看此文件可知 每行定义一个要挂载的文件系统 其每行的格式如下 要挂载的设备或伪文件系统 挂载点 文件系统类型 挂载选项 转储频
  • Go []byte to a C *char

    https stackoverflow com questions 35673161 convert go byte to a c char ok b buf Bytes rc C the function unsafe Pointer b
  • c语言的标识符可分为哪3种字符,c语言标识符有哪三类?

    在计算机编程语言中 标识符是用户编程时使用的名字 用于给变量 常量 函数 语句块等命名 以建立起名称与使用之间的关系 标识符通常由字母和数字以及其它字符构成 c语言标识符的分类 C语言中标识符有三类 分别是 关键字 预定义标识符和用户标识符
  • MyBatis中resultMap解决映射关系(多对一、一对多)

    一 多对一映射处理 查询员工信息以及员工所对应的部门信息 public class Emp private Integer eid private String empName private Integer age private Str
  • 神经网络matlab工具箱有关参数设置

    1 常见参数 net trainParam epochs 最大训练次数 net trainParam goal 训练要求精度net trainParam lr 学习速率net trainParam show 显示训练迭代过程net trai
  • 如何使用远程仓库进行团队合作

    前言 如若我们的远程仓库又有了一名新的开发者 这时 新的开发者需要拉取远程仓库与其他开发者合作 文章目录 如何拉取远程仓库到本地仓库 git方法 clone远程分支 获取远程其他分支 Tortoise Git方法 clone远程分支 VS2
  • K8S部署前后端分离项目并支持Mysql和Redis数据持久化保存

    Springboot Vue Mysql Redis 文章目录 前端 1 default conf文件 2 创建Dockerfile 生成镜像 依赖nginx挂载配置文件 3 执行完以上步骤后 进行build tag push远程仓库 4