当前位置: 首页 > news >正文

关于k8s的pvc存储卷

目录

1.PVC 和 PV 

1.1 PV

1.2 PVC

1.3 StorageClass

1.4 PV和PVC的生命周期

2.实战演练

2.1 创建静态pv

2.2 创建动态pv

3.总结


1.PVC 和 PV 

1.1 PV

PV 全称叫做 Persistent Volume,持久化存储卷。它是用来描述或者说用来定义一个存储卷的,这个通常都是由运维工程师来定义。

1.2 PVC

PVC 的全称是 Persistent Volume Claim,是持久化存储的请求。它是用来描述希望使用什么样的或者说是满足什么条件的 PV 存储。

PVC 的使用逻辑:在 Pod 中定义一个存储卷(该存储卷类型为 PVC),定义的时候直接指定大小,PVC 必须与对应的 PV 建立关系,PVC 会根据配置的定义去 PV 申请,而 PV 是由存储空间创建出来的。PV 和 PVC 是 Kubernetes 抽象出来的一种存储资源。

1.3 StorageClass

上面介绍的PV和PVC模式是需要运维人员先创建好PV,然后开发人员定义好PVC进行一对一的Bond,但是如果PVC请求成千上万,那么就需要创建成千上万的PV,对于运维人员来说维护成本很高,Kubernetes提供一种自动创建PV的机制,叫StorageClass,它的作用就是创建PV的模板。

创建 StorageClass 需要定义 PV 的属性,比如存储类型、大小等;另外创建这种 PV 需要用到的存储插件,比如 Ceph 等。 有了这两部分信息,Kubernetes 就能够根据用户提交的 PVC,找到对应的 StorageClass,然后 Kubernetes 就会调用 StorageClass 声明的存储插件,自动创建需要的 PV 并进行绑定。

PV是集群中的资源。 PVC是对这些资源的请求,也是对资源的索引检查。 

1.4 PV和PVC的生命周期

PV和PVC之间的相互作用遵循这个生命周期:
Provisioning(配置)---> Binding(绑定)---> Using(使用)---> Releasing(释放) ---> Recycling(回收)

●Provisioning,即 PV 的创建,可以直接创建 PV(静态方式),也可以使用 StorageClass 动态创建
●Binding,将 PV 分配给 PVC
●Using,Pod 通过 PVC 使用该 Volume,并可以通过准入控制StorageProtection(1.9及以前版本为PVCProtection) 阻止删除正在使用的 PVC
●Releasing,Pod 释放 Volume 并删除 PVC
●Recycling,回收 PV,可以保留 PV 以便下次使用,也可以直接从云存储中删除

根据这 5 个阶段,PV 的状态有以下 4 种:
●Available(可用):表示可用状态,还未被任何 PVC 绑定
●Bound(已绑定):表示 PV 已经绑定到 PVC
●Released(已释放):表示 PVC 被删掉,但是资源尚未被集群回收
●Failed(失败):表示如果 PV 或 PVC 遇到无法解决的问题,例如配额不足、配置错误或者绑定过程中的异常情况,可能会进入 Failed 状态

一个PV从创建到销毁的具体流程如下:
1、一个PV创建完后状态会变成Available,等待被PVC绑定。
2、一旦被PVC邦定,PV的状态会变成Bound,就可以被定义了相应PVC的Pod使用。
3、Pod使用完后会释放PV,PV的状态变成Released。
4、变成Released的PV会根据定义的回收策略做相应的回收工作。有三种回收策略,Retain、Delete和Recycle。Retain就是保留现场,K8S集群什么也不做,等待用户手动去处理PV里的数据,处理完后,再手动删除PV。Delete策略,K8S会自动删除该PV及里面的数据。Recycle方式,K8S会将PV里的数据删除,然后把PV的状态变成Available,又可以被新的PVC绑定使用。

2.实战演练

2.1 创建静态pv

根据下图创建pv、pvc及配置nfs

配置nfs

192.168.9.116服务器配置nfs,
mkdir -p /data/volumes/v{1..5}
vim /etc/exports
/data/volumes/v1 192.168.9.0/24(rw,sync,no_root_squash)
/data/volumes/v2 192.168.9.0/24(rw,sync,no_root_squash)
/data/volumes/v3 192.168.9.0/24(rw,sync,no_root_squash)
/data/volumes/v4 192.168.9.0/24(rw,sync,no_root_squash)
/data/volumes/v5 192.168.9.0/24(rw,sync,no_root_squash)exportfs -arv



创建pv

vim demo1-pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:      #由于 PV 是集群级别的资源,即 PV 可以跨 namespace 使用,所以 PV 的 metadata 中不用配置 namespacename: pv001
spec:capacity:                               定义存储能力,一般用于设置存储空间storage: 1Gi                          指定大小accessModes:                            定义访问模式- ReadWriteOnce- ReadWriteMany#persistentVolumeReclaimPolicy: Recycle 回收策略#storageClassName: slow                 自定义存储类名称,此配置用于绑定具有相同类别的PVC和PVnfs:                                    定义存储类型path: /data/volumes/v1                定义挂载卷路径server: 192.168.9.116                 定义服务器名称
---
apiVersion: v1
kind: PersistentVolume
metadata:name: pv002
spec:capacity:storage: 2GiaccessModes:- ReadWriteOnce#persistentVolumeReclaimPolicy: Recycle#storageClassName: slownfs:path: /data/volumes/v2server: 192.168.9.116
---
apiVersion: v1
kind: PersistentVolume
metadata:name: pv003
spec:capacity:storage: 2GiaccessModes:- ReadWriteOnce- ReadWriteMany#persistentVolumeReclaimPolicy: Recycle#storageClassName: slownfs:path: /data/volumes/v3server: 192.168.9.116
---
apiVersion: v1
kind: PersistentVolume
metadata:name: pv004
spec:capacity:storage: 4GiaccessModes:- ReadWriteOnce- ReadWriteMany#persistentVolumeReclaimPolicy: Recycle#storageClassName: slownfs:path: /data/volumes/v4server: 192.168.9.116
---
apiVersion: v1
kind: PersistentVolume
metadata:name: pv005
spec:capacity:storage: 5GiaccessModes:- ReadWriteOnce- ReadWriteMany#persistentVolumeReclaimPolicy: Recycle#storageClassName: slownfs:path: /data/volumes/v5server: 192.168.9.116
---kubectl apply -f demo1-pv.yaml

创建pvc

vim demo2-pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: mypvc001
spec:accessModes:- ReadWriteManyresources:requests:storage: 2Gi#storageClassName: slow
kubectl apply -f demo2-pvc.yaml

kubectl apply -f demo2-pvc.yaml   #再以同样的文件创建pvc
kubectl get pv,pvc
#可以发现即使条件再匹配,也不会与原先处于released状态的pv匹配

vim demo1-pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:      #由于 PV 是集群级别的资源,即 PV 可以跨 namespace 使用,所以 PV 的 metadata 中不用配置 namespacename: pv001
spec:capacity:                               定义存储能力,一般用于设置存储空间storage: 1Gi                          指定大小accessModes:                            定义访问模式- ReadWriteOnce- ReadWriteMany#persistentVolumeReclaimPolicy: Recycle 回收策略#storageClassName: slow                 自定义存储类名称,此配置用于绑定具有相同类别的PVC和PVnfs:                                    定义存储类型path: /data/volumes/v1                定义挂载卷路径server: 192.168.9.116                 定义服务器名称
---
apiVersion: v1
kind: PersistentVolume
metadata:name: pv002
spec:capacity:storage: 2GiaccessModes:- ReadWriteOnce#persistentVolumeReclaimPolicy: Recycle#storageClassName: slownfs:path: /data/volumes/v2server: 192.168.9.116
---
apiVersion: v1
kind: PersistentVolume
metadata:name: pv003
spec:capacity:storage: 2GiaccessModes:- ReadWriteOnce- ReadWriteMany persistentVolumeReclaimPolicy: Recycle     #当设置指定访问策略为 Recycle#storageClassName: slownfs:path: /data/volumes/v3server: 192.168.9.116
---
apiVersion: v1
kind: PersistentVolume
metadata:name: pv004
spec:capacity:storage: 4GiaccessModes:- ReadWriteOnce- ReadWriteMany#persistentVolumeReclaimPolicy: Recycle#storageClassName: slownfs:path: /data/volumes/v4server: 192.168.9.116
---
apiVersion: v1
kind: PersistentVolume
metadata:name: pv005
spec:capacity:storage: 5GiaccessModes:- ReadWriteOnce- ReadWriteMany#persistentVolumeReclaimPolicy: Recycle#storageClassName: slownfs:path: /data/volumes/v5server: 192.168.9.116
---kubectl apply -f demo1-pv.yaml
kubectl apply -f demo2-pvc.yaml
kubectl get pv,pvc

结合pod,将pv、pvc一起运行

apiVersion: v1
kind: PersistentVolume
metadata:name: pv001
spec:capacity:storage: 1GiaccessModes:- ReadWriteOnce- ReadWriteMany#persistentVolumeReclaimPolicy: Recycle#storageClassName: slownfs:path: /data/volumes/v1server: 192.168.9.116
---
apiVersion: v1
kind: PersistentVolume
metadata:name: pv002
spec:capacity:storage: 2GiaccessModes:- ReadWriteOnce#persistentVolumeReclaimPolicy: Recycle#storageClassName: slownfs:path: /data/volumes/v2server: 192.168.9.116
---
apiVersion: v1
kind: PersistentVolume
metadata:name: pv003
spec:capacity:storage: 2GiaccessModes:- ReadWriteOnce- ReadWriteManypersistentVolumeReclaimPolicy: Recycle#storageClassName: slownfs:path: /data/volumes/v3server: 192.168.9.116
---
apiVersion: v1
kind: PersistentVolume
metadata:name: pv004
spec:capacity:storage: 4GiaccessModes:- ReadWriteOnce- ReadWriteManypersistentVolumeReclaimPolicy: Recycle#storageClassName: slownfs:path: /data/volumes/v4server: 192.168.9.116
---
apiVersion: v1
kind: PersistentVolume
metadata:name: pv005
spec:capacity:storage: 5GiaccessModes:- ReadWriteOnce- ReadWriteMany#persistentVolumeReclaimPolicy: Recycle#storageClassName: tannfs:path: /data/volumes/v5server: 192.168.9.116
---kubectl apply -f demo1-pv.yamlvim demo2-pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: mypvc001
spec:accessModes:- ReadWriteManyresources:requests:storage: 2Gi#storageClassName: tankubectl apply -f demo2-pvc.yaml

vim demo3-pod.yaml
apiVersion: v1
kind: Pod
metadata:creationTimestamp: nulllabels:run: demo3name: demo3-pod
spec:volumes:                     - name: tan-volpersistentVolumeClaim:claimName: mypvc001         #创建的pvc名称containers:- image: soscscs/myapp:v1name: demoports:- containerPort: 80resources: {}volumeMounts:- name: tan-volmountPath: /mnt/dnsPolicy: ClusterFirstrestartPolicy: Always
status: {}kubectl apply -f demo3-pod.yaml


kubectl delete pod demo3-pod

2.2 创建动态pv

上传nfs-client-provisioner.tar 、nfs-client.zip压缩包到master节点上传nfs-client-provisioner.tar到两个node节点



创建 Service Account,用来管理 NFS Provisioner 在 k8s 集群中运行的权限,设置 nfs-client 对 PV,PVC,StorageClass 等的规则

master节点
kubectl apply -f nfs-client-rbac.yaml
kubectl get serviceaccounts

vim /etc/kubernetes/manifests/kube-apiserver.yaml- --feature-gates=RemoveSelfLink=false       #添加这一行
由于 1.20 版本禁用了 selfLink,所以 k8s 1.20+ 版本通过 nfs provisioner 动态生成 PV 会报错,需要添加
cd /etc/kubernetes/manifests
mv kube-apiserver.yaml /tmp/                #进行重启操作
mv /tmp/kube-apiserver.yaml ./

nfs服务器
vim /etc/exports
/opt/nfs 192.168.9.0/24(rw,sync,no_root_squash)
exportfs -avr
两个node节点检查#创建 NFS Provisionermaster节点
cd /root/day9/pv
vim nfs-client-provisioner.yamlkubectl apply -f nfs-client-provisioner.yaml

创建 StorageClass,负责建立 PVC 并调用 NFS provisioner 进行预定的工作,并让 PV 与 PVC 建立关联

vim nfs-client-storageclass.yaml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:name: nfs-client-storageclass
provisioner: nfs-tan        #要与 nfs-client-provisioner.yaml中设置的一致
parameters:archiveOnDelete: "true"   #做数据备份kubectl apply -f nfs-client-storageclass.yaml

创建 PVC 和 Pod 测试

vim demo2-pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: mypvc003
spec:accessModes:- ReadWriteManyresources:requests:storage: 2GistorageClassName: nfs-client-storageclass



测试不备份:

vim nfs-client-storageclass.yamlkubectl delete -f nfs-client-storageclass.yaml && kubectl apply -f nfs-client-storageclass.yaml
kubectl get pv,pvc

vim pod.yaml
apiVersion: v1
kind: Pod
metadata:labels:run: demo3name: dem3-pod
spec:volumes:- name: scj-volpersistentVolumeClaim:claimName: mypvc003containers:- image: soscscs/myapp:v1name: myappports:- containerPort: 80resources: {}volumeMounts:- name: scj-volmountPath: /mntdnsPolicy: ClusterFirstrestartPolicy: Always
status: {}kubectl apply -f pod.yaml
kubectl exec -it dem3-pod -- sh
cd /mnt
echo '123456' > tan.txt

kubectl delete pod dem3-pod
kubectl delete pvc mypvc003  #删除查看是否备份


3.总结

存储资源有什么?

pv、pvc

创建PV的方式:
静态PV创建:手动根据PV资源对象的配置文件创建PV资源
动态PV创建:根据PVC的配置通过引用StorageClass(简称SC)资源触发存储卷插件动态的创建PV资源

相关文章:

关于k8s的pvc存储卷

目录 1.PVC 和 PV 1.1 PV 1.2 PVC 1.3 StorageClass 1.4 PV和PVC的生命周期 2.实战演练 2.1 创建静态pv 2.2 创建动态pv 3.总结 1.PVC 和 PV 1.1 PV PV 全称叫做 Persistent Volume,持久化存储卷。它是用来描述或者说用来定义一个存储卷的,…...

【物联网设备端开发】ESP开发工具:QEMU的使用方法

概要 本文提供了一些运行QEMU的ESP特定说明。有关QEMU的一般使用问题,请参阅官方文档:https://www.qemu.org/documentation/. 编译 QEMU 准备工作 在此之前,请查看有关构建先决条件的QEMU文档。如果你在Linux主机上构建QEMU,你…...

c++中std::endl 和“\n“ 这两个换行符有什么区别

std::endl 和 "\n" 都用于在C中生成换行符,但它们之间有一些重要的区别 std::endl: 功能:输出一个换行符,并刷新输出流(即缓冲区)。作用:确保所有数据立即输出到目的地,例…...

http中get和post怎么选

5.4.2.怎么选择1.如果你是想从服务器上获取资源,建议使用GET请求,如果你这个请求是为了向服务器提交数据,建议使用POST请求。2.大部分的form表单提交,都是post方式,因为form表单中要填写大量的数据,这些数据…...

数据分析及应用:快手直播间人员在线分析

目录 0 需求描述 1、进入直播间的高峰期为?(以进入用户数衡量) 2、晚上 11 点,哪个直播间的进入人数最多? 3、20:00-23:00,娱乐类、搞笑类,进入人数最多直播间分别是? 4、娱乐类、搞笑类,人均在线时长(退出时间-进入时间)最长的直播间分别是? 5、同时在线人数…...

【Python】nn.nn.CircularPad1、2、3d函数和nn.ConstantPad1、2、3d函数详解和示例

前言 在深度学习中,尤其是在处理图像、音频或其他多维数据时,数据填充(Padding)是一个常见的操作。填充不仅可以保持数据的空间维度,还能在卷积操作中避免信息丢失。PyTorch提供了多种填充方式,其中nn.Cir…...

LearnOpenGL——混合、面剔除

LearnOpenGL——混合、面剔除 混合 Blending一、丢弃片段 Alpha Test二、混合 Alpha Blending渲染顺序 面剔除一、环绕顺序二、面剔除 混合 Blending OpenGL中,混合(Blending)通常是实现物体透明度(Transparency)的一种技术。透明的物体可以是完全透明的&#xff0…...

视频网站为何热衷于SCDN

视频网站为何热衷于SCDN?随着互联网技术的飞速发展,视频网站已成为人们日常生活中不可或缺的一部分。无论是观看高清电影、热门剧集,还是直播体育赛事、游戏竞技,视频网站都以其丰富的内容和便捷的访问方式吸引了无数用户。然而&a…...

Redis与DataBase保持数据一致性

文章目录 1. 读取数据2. 写数据2.1 先操作缓存2.2 先操作数据库 在我们系统中缓存最常用的策略是:服务端需要同时维系DB和Cache,并且是以DB的结果为准, Cache-Aside Pattern(缓存分离模式、旁路缓存)。 1. 读取数据 当…...

解决 MacOS 连接公司 VPN 成功但是不能网络的问题

目录 解决办法2024 Mac mini 爆料 解决办法 操作比较简单,修改配置文件即可(如果没有则需要手动创建)。 sudo vim /etc/ppp/options在此文件下,加入 plugin L2TP.ppp: plugin L2TP.ppp如果文件里有l2tpnoipsec&…...

【Kubernetes】k8s集群之Pod容器资源限制和三种探针

目录 一、Pod容器的资源限制 1.资源限制 2.Pod 和容器的资源请求与限制 3.CPU 资源单位 4.内存资源单位 二、Pod容器的三种探针 1.探针的三种规则 2.Probe支持三种检查方法: 一、Pod容器的资源限制 1.资源限制 当定义 Pod 时可以选择性地为每个容器设定所…...

从古代驿站体系看软件安全管控@安全历史04

在古代,车、马都很慢,信息传递很不顺畅,中央的政令又是如何传达至地方的呢?实际上,很多朝代都有专门的驿站制度,可以保障全国各地的信息传递,对于维护统治和稳定有着关键作用。 若将国家比作一个…...

8.8 哈希表简单 1 Two Sum 141 Linked List Cycle

1 Two Sum class Solution { public:vector<int> twoSum(vector<int>& nums, int target) {//给的target是目标sum 要返回vector<int> res(2,0);是在num中找加数//首先假设每个输入都是由唯一的结果&#xff0c;而且不适用相同的元素两次一共有n*(n-1)种…...

动态规划之——背包DP(完结篇)

文章目录 概要说明分组背包模板例题1思路code模板例题2思路code 有依赖的背包问题模板例题思路code 背包问题求方案数模板例题思路code 背包问题求具体方案模板例题思路code 概要说明 本文讲分组背包、有依赖的背包、 背包问题求方案数以及背包问题求具体方案 入门篇(01背包和…...

Advanced IP Scanner - 网络扫描工具介绍

Advanced IP Scanner 是一款免费、快速且用户友好的网络扫描工具。它能够帮助用户扫描局域网&#xff08;LAN&#xff09;中的所有设备&#xff0c;提供详细的设备信息&#xff0c;包括IP地址、MAC地址、设备名称和厂商信息。该工具对IT管理员和普通用户都非常有用&#xff0c;…...

数据库事务的四大特性ACID

数据库事务的四大特性ACID 数据库事务&#xff08;Transaction&#xff09;是数据库管理系统&#xff08;DBMS&#xff09;执行过程中的一个逻辑单位&#xff0c;由一个或多个SQL语句组成&#xff0c;这些语句作为一个整体一起向系统提交&#xff0c;要么全部执行&#xff0c;…...

ELK架构介绍

一、ELK简介 ELK 是由三个开源软件组成的&#xff0c;分别是&#xff1a;Elasticsearch、Logstash和Kibana&#xff0c;这三个软件各自在日志管理和数据分析领域发挥着重要作用。Elasticsearch提供分布式存储和搜索能力&#xff1b;Logstash负责数据收集和处理&#xff0c;而K…...

Vscode下ESP32工程函数定义无法跳转

1.删除.vscode 2.按下 ctrlshiftp&#xff0c;搜索 ESP-IDF:Add vscode Configuration Folder...

liquibase.exception.LockException: Could not acquire change log lock.

项目场景&#xff1a; 启动应用花了好长时间&#xff0c;最后报出异常. 问题描述 启动应用花了好长时间&#xff0c;最后报出异常. 异常&#xff1a; Caused by: liquibase.exception.LockException: Could not acquire change log lock. Currently locked by LAPTOP-OQ9VB…...

【多线程-从零开始-捌】阻塞队列,消费者生产者模型

什么是阻塞队列 阻塞队里是在普通的队列&#xff08;先进先出队列&#xff09;基础上&#xff0c;做出了扩充 线程安全 标准库中原有的队列 Queue 和其子类&#xff0c;默认都是线程不安全的 具有阻塞特性 如果队列为空&#xff0c;进行出队列操作&#xff0c;此时就会出现阻…...

dedecms 织梦自定义表单留言增加ajax验证码功能

增加ajax功能模块&#xff0c;用户不点击提交按钮&#xff0c;只要输入框失去焦点&#xff0c;就会提前提示验证码是否正确。 一&#xff0c;模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...

Android15默认授权浮窗权限

我们经常有那种需求&#xff0c;客户需要定制的apk集成在ROM中&#xff0c;并且默认授予其【显示在其他应用的上层】权限&#xff0c;也就是我们常说的浮窗权限&#xff0c;那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...

爬虫基础学习day2

# 爬虫设计领域 工商&#xff1a;企查查、天眼查短视频&#xff1a;抖音、快手、西瓜 ---> 飞瓜电商&#xff1a;京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空&#xff1a;抓取所有航空公司价格 ---> 去哪儿自媒体&#xff1a;采集自媒体数据进…...

多模态大语言模型arxiv论文略读(108)

CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题&#xff1a;CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者&#xff1a;Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...

技术栈RabbitMq的介绍和使用

目录 1. 什么是消息队列&#xff1f;2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...

springboot整合VUE之在线教育管理系统简介

可以学习到的技能 学会常用技术栈的使用 独立开发项目 学会前端的开发流程 学会后端的开发流程 学会数据库的设计 学会前后端接口调用方式 学会多模块之间的关联 学会数据的处理 适用人群 在校学生&#xff0c;小白用户&#xff0c;想学习知识的 有点基础&#xff0c;想要通过项…...

Linux 内存管理实战精讲:核心原理与面试常考点全解析

Linux 内存管理实战精讲&#xff1a;核心原理与面试常考点全解析 Linux 内核内存管理是系统设计中最复杂但也最核心的模块之一。它不仅支撑着虚拟内存机制、物理内存分配、进程隔离与资源复用&#xff0c;还直接决定系统运行的性能与稳定性。无论你是嵌入式开发者、内核调试工…...

Go 语言并发编程基础:无缓冲与有缓冲通道

在上一章节中&#xff0c;我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道&#xff0c;它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好&#xff0…...

Redis:现代应用开发的高效内存数据存储利器

一、Redis的起源与发展 Redis最初由意大利程序员Salvatore Sanfilippo在2009年开发&#xff0c;其初衷是为了满足他自己的一个项目需求&#xff0c;即需要一个高性能的键值存储系统来解决传统数据库在高并发场景下的性能瓶颈。随着项目的开源&#xff0c;Redis凭借其简单易用、…...

【网络安全】开源系统getshell漏洞挖掘

审计过程&#xff1a; 在入口文件admin/index.php中&#xff1a; 用户可以通过m,c,a等参数控制加载的文件和方法&#xff0c;在app/system/entrance.php中存在重点代码&#xff1a; 当M_TYPE system并且M_MODULE include时&#xff0c;会设置常量PATH_OWN_FILE为PATH_APP.M_T…...