k8s分布式图床(k8s,metricsapi,vue3+ts)

news/2024/6/17 22:54:33 标签: kubernetes, 分布式, 容器

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

image-manage 图像管理应用

图像管理应用提供了一个方便管理图片的平台,支持单机和Kubernetes集群部署。请确保您至少拥有一个MySQL数据库和一个Redis数据库,以及一个至少为Kubernetes 1.29版本的集群(如果选择集群部署)。

文档及更多信息

注意⚠️

  1. 需要至少一个MySQL数据库
  2. 需要至少一个Redis数据库
  3. 如果采用集群部署,需要一个版本至少为Kubernetes 1.29的集群

单机部署(Docker)

使用Docker拉取并运行image-manage:

docker run -p 8080:8080 \
 -v 你的数据目录:/app\
 -e CONFIG_ISCLUSTERMODEENABLED=false \
 -e SPRING_DATASOURCE_URL=jdbc:mysql://192.168.0.254:3306/image_manage?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai \
 -e SPRING_DATASOURCE_USERNAME=root \
 -e SPRING_DATASOURCE_PASSWORD=123456 \
 -e SPRING_REDIS_HOST=192.168.0.254 \
 -e SPRING_REDIS_PASSWORD=123456 \
 wnzzer/image-manage:latest

仓库地址: https://github.com/wnzzer/image-manage

提示

  • 由于Spring Boot的配置替换策略,可以根据需要替换更多的Spring Boot参数配置。

集群部署部署(k8s)‘

前置要求

  • 安装metrics server,以支持应用监控资源。如果没有该组件,Kubernetes metrics API将无法工作,image-manage也将无法收集Pod资源信息。
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml

部署image-manage

wget  https://github.com/wnzzer/image-manage/releases/latest/download/image-manage-yaml
apiVersion: v1
kind: Namespace
metadata:
  name: image-manage

---
# storeclass 声明,非常关键,用于动态分配卷
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: nfs-store-class
provisioner: image-manage-pv-provisioner  # 替换为实际的卷插件,我这里使用的是nfs的自动供应器,可以采用公用云或者其他pv自动供应器
reclaimPolicy: Delete
parameters:
  volumeSize: "1Gi"  # 应用存储图片的空间
  nfsServer: 192.168.0.254
  nfsPath: /volume1/nfs

---
# configMap k8s权限配置到英雄
apiVersion: v1
kind: ConfigMap
metadata:
  namespace: image-manage
  name: k8s-role-config
data:
  key1: ./admin.config

---

# 应用
apiVersion: apps/v1
kind: StatefulSet
metadata:
  namespace: image-manage
  name: image-manage
spec:
  serviceName: "image-manage-headless-service"
  replicas: 2
  selector:
    matchLabels:
      app: image-manage
  template:
    metadata:
      labels:
        app: image-manage
    spec:
      containers:
      - name: image-manage
        image: wnzzer/image-manage:latest
        ports: 
        - containerPort: 8080
        env:
        - name: SPRING_PROFILES_ACTIVE
          value: "prod"
        - name: CONFIG_ISCLUSTERMODEENABLED
          value: "false"
        - name: SPRING_DATASOURCE_URL
          value: "jdbc:mysql://192.168.0.254:3306/image_manage?userUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai"
        - name: SPRING_DATASOURCE_USERNAME
          value: "root"
        - name: SPRING_DATASOURCE_PASSWORD
          value: "123456"
        - name: SPRING_REDIS_HOST
          value: "192.168.0.254"
        - name: SPRING_REDIS_PASSWORD
          value: "123456"
        volumeMounts:
        - name: local-vol
          mountPath: "/app"
        - name: config-volume  # 挂载ConfigMap作为卷
          mountPath: "/etc/image-manage/config"  # 指定挂载ConfigMap的路径
      volumes:
      - name: config-volume  # 定义卷使用的ConfigMap
        configMap:
          name: k8s-admin-role-config  # 指定ConfigMap的名称
  volumeClaimTemplates:
  - metadata:
      name: local-vol
    spec:
      accessModes: [ "ReadWriteOnce" ]
      storageClassName: "nfs-store-class"
      resources:
        requests:
          storage: 1Gi

---
# 无头服务,用于应用的同步通信
apiVersion: v1
kind: Service
metadata:
  name: image-manage-headless-service
  namespace: image-manage
spec:
  clusterIP: None
  selector:
    app: image-manage
  ports:
    - protocol: TCP
      port: 8080
      targetPort: 8080


---
# cluster service 用于输出api
apiVersion: v1
kind: Service
metadata:
  name: image-manage-cluster-service
  namespace: image-manage
spec:
  type: ClusterIP
  ports:
  - port: 8080
    targetPort: 8080
  selector:
    app: image-manage
kubectl apply -f image-manage.yaml
  1. 这里同样需要把redis,mysql修改成自己的配置
  2. 这里需要有自己的pv供应器,由于是pv动态创建,所以需要搭配自动供应器给statusfulSet创建pv,示例中使用的是nfs
  3. image-manage 需要搭配 k8s 配置进行对k8s api的访问,这里实例使用的是admin.conf,使用configmap挂载到容器里,如果想要更细致的权限划分,请将权限配置至少给予 image-manage级别的权限。
  4. 创建的k8s用户文件请将命名为admin.conf,因为应用里指定了k8s配置文件为admin.conf,其他名称会无法读取。

访问

我们可以直接在k8s中部署nginx,反代 image-manage cluster ip,进行访问,

运行web ui

cd font-userui
npm i
npm run dev

http://www.niftyadmin.cn/n/5402326.html

相关文章

分类问题经典算法 | 二分类问题 | Logistic回归:梯度下降

目录 一. 损失函数1. 交叉熵损失函数2. 梯度下降 一. 损失函数 Logistic回归算法公式推导篇中,我们通过对似然函数求对数,得到 l ( θ ) l(\theta ) l(θ): l ( θ ) l n [ L ( θ ) ] ∑ i 1 M { y ( i ) l n [ h θ ( x ( i ) ) ] ( …

可解释AI是什么?

可解释AI(eXplainable AI,简称XAI)是指一种使AI系统的决策过程更加透明、可理解的技术。它旨在帮助人类用户理解和信任机器学习算法所做出的决策,通过提供关于AI模型、其影响以及潜在偏见的信息,使得AI的决策过程对人类…

chrome选项页面options page配置

options 页面用以定制Chrome浏览器扩展程序的运行参数。 通过Chrome 浏览器的“工具 ->更多工具->扩展程序”,打开chrome://extensions页面,可以看到有的Google Chrome扩展程序有“选项Options”链接,如下图所示。单击“选项Options”…

如何解决幻兽帕鲁/Palworld服务器联机游戏时的丢包问题?

如何解决幻兽帕鲁/Palworld服务器联机游戏时的丢包问题? 等待服务器维护:首先,确保网络连接稳定,然后查看游戏官方或社区论坛,了解是否有服务器维护的消息。这是解决丢包问题的一种直接且有效的方法。 更新显卡驱动&a…

C/C++基础语法

C/C基础语法 文章目录 C/C基础语法头文件经典问题链表链表基础操作 秒数转换闰年斐波那契数列打印n阶菱形曼哈顿距离菱形图案的定义大数计算 输入输出格式化输入输出getline()函数解决cin只读入一个单词的问题fgets读入整行输出字符数组(两种方式puts和printf&#…

数通HCIE和云计算HCIE哪个好一点?

数通是网络的基础知识,也是入门人员必学的方向,相对也会简单些,学习数通,可以很好的学习其他的方向。数通的就业范围也比较广,运营商、企业、政府还是互联网公司,都需要大量的数通工程师来搭建和维护网络&a…

Vue.js大师: 构建动态Web应用的全面指南

VUE ECMAScript介绍什么是ECMAScriptECMAScript 和 JavaScript 的关系ECMAScript 6 简介 ES6新特性let基本使用const不定参数箭头函数对象简写模块化导出导入a.jsb.jsmain.js Vue简介MVVM 模式的实现者——双向数据绑定模式 Vue环境搭建在页面引入vue的js文件即可。创建div元素…

【Go语言】Go语言中的流程控制

Go语言中的流程控制 流程控制主要用于设定计算执行的顺序,简历程序的逻辑结果,Go语言的流程控制语句与其他语言类似,支持如下几种流程控制语句: 条件语句:用于条件判断,对应的关键字有if、else和else if&a…