第9章 K8s进阶篇-持久化存储入门
9.1 k8s存储Volumes介绍
Container(容器)中的磁盘文件是短暂的,当容器崩溃时,kubelet会重新启动容器,但最初的文件将丢失,Container会以最干净的状态启动。另外,当一个Pod运行多个Container时,各个容器可能需要共享一些文件。Kubernetes Volume可以解决这两个问题。eg:如一个pod里,容器A和容器B需要共享数据;不同pod间共享数据;
一些需要持久化数据的程序才会用到Volumes,或者一些需要共享数据的容器需要volumes。
不同pod间共享数据也可以通过volumes解决,比如我们nfs,jfs,ceph,公有云的nas等;
日志收集的需求:需要在应用程序的容器里面加一个sidecar,这个容器是一个收集日志的容器,比如filebeat,它通过volumes共享应用程序的日志文件目录。就是同一个pod下不同容器共享数据;
Volumes:官方文档https://kubernetes.io/docs/concepts/storage/volumes/
9.2 Volumes EmptyDir实现数据共享
emptyDir是一个空目录,不需要提前创建相关目录,他的声明周期和Pod是完全一致的,Pod被删除时,emptyDir也会被删除。emptyDir主要是用于同一个Pod内不同的容器之间共享工作过程中产生的文件。
比较常用的volumes的使用emptydir,hostpath,NFS(configmap和secret 之前讲过)等
emptydir主要是用用作pod下不同容器间共享数据,不是持久化存储,重启后数据丢失。
和上述volume不同的是,如果删除Pod,emptyDir卷中的数据也将被删除,一般emptyDir卷用于Pod中的不同Container共享数据。它可以被挂载到相同或不同的路径上。
默认情况下,emptyDir卷支持节点上的任何介质,可能是SSD、磁盘或网络存储,具体取决于自身的环境。可以将emptyDir.medium字段设置为Memory,让Kubernetes使用tmpfs(内存支持的文件系统),虽然tmpfs非常快,但是tmpfs在节点重启时,数据同样会被清除,并且设置的大小会被计入到Container的内存限制当中。
[root@k8s-master01 ~]# vim nginx-deploy_1205_emptydir.yaml
# cat nginx-deploy.yaml
apiVersion: apps/v1
kind: Deployment
metadata:labels:app: nginxname: nginx
spec:replicas: 2 #副本数selector:matchLabels:app: nginxstrategy:rollingUpdate:maxSurge: 25%maxUnavailable: 25%type: RollingUpdatetemplate:metadata:creationTimestamp: nulllabels:app: nginxspec:containers:- image: registry.cn-beijing.aliyuncs.com/dotbalo/nginx:1.15.12imagePullPolicy: IfNotPresentname: nginxresources: {}terminationMessagePath: /dev/termination-logterminationMessagePolicy: File# ports:# - containerPort: 8080# name: nginx-port# protocol: TCPvolumeMounts:- mountPath: /optname: share-volume- image: registry.cn-beijing.aliyuncs.com/dotbalo/nginx:1.15.12imagePullPolicy: IfNotPresentname: nginx2command:- sh- -c- sleep 3600resources: {}terminationMessagePath: /dev/termination-logterminationMessagePolicy: File# ports:# - containerPort: 8090# name: nginx2-port# protocol: TCPvolumeMounts:- mountPath: /mntname: share-volumednsPolicy: ClusterFirstrestartPolicy: AlwaysschedulerName: default-schedulersecurityContext: {}terminationGracePeriodSeconds: 30volumes: - name: share-volumeemptyDir: {}#medium: Memory
[root@k8s-master01 ~]# kubectl create -f nginx-deploy_1205_emptydir.yaml
deployment.apps/nginx created
副本数是2,所以创建2个pod,每个pod包含2个容器nginx、nginx2
验证1:
pod nginx-6c5778576c-4hxkj nginx
[root@k8s-master01 ~]# kubectl exec -it nginx-6c5778576c-4hxkj -c nginx -- bash
root@nginx-6c5778576c-4hxkj:/# df -h
Filesystem Size Used Avail Use% Mounted on
overlay 26G 8.2G 18G 32% /
tmpfs 64M 0 64M 0% /dev
tmpfs 1.5G 0 1.5G 0% /sys/fs/cgroup
/dev/sda3 26G 8.2G 18G 32% /opt
shm 64M 0 64M 0% /dev/shm
tmpfs 2.9G 12K 2.9G 1% /run/secrets/kubernetes.io/serviceaccount
tmpfs 1.5G 0 1.5G 0% /proc/acpi
tmpfs 1.5G 0 1.5G 0% /proc/scsi
tmpfs 1.5G 0 1.5G 0% /sys/firmware
root@nginx-6c5778576c-4hxkj:/# cd /opt
root@nginx-6c5778576c-4hxkj:/opt# ls
root@nginx-6c5778576c-4hxkj:/opt# touch test.txt
root@nginx-6c5778576c-4hxkj:/opt# echo aaaaaaaaaaaaa > test.txt
pod nginx-6c5778576c-4hxkj nginx2
[root@k8s-master01 ~]# kubectl exec -it nginx-6c5778576c-4hxkj -c nginx2 -- bash
root@nginx-6c5778576c-4hxkj:/#
root@nginx-6c5778576c-4hxkj:/# df -h
Filesystem Size Used Avail Use% Mounted on
overlay 26G 8.2G 18G 32% /
tmpfs 64M 0 64M 0% /dev
tmpfs 1.5G 0 1.5G 0% /sys/fs/cgroup
/dev/sda3 26G 8.2G 18G 32% /mnt
shm 64M 0 64M 0% /dev/shm
tmpfs 2.9G 12K 2.9G 1% /run/secrets/kubernetes.io/serviceaccount
tmpfs 1.5G 0 1.5G 0% /proc/acpi
tmpfs 1.5G 0 1.5G 0% /proc/scsi
tmpfs 1.5G 0 1.5G 0% /sys/firmware
root@nginx-6c5778576c-4hxkj:/# cd /mnt
root@nginx-6c5778576c-4hxkj:/mnt# ls
test.txt
root@nginx-6c5778576c-4hxkj:/mnt# cat test.txt
aaaaaaaaaaaaa
在容器nginx的/opt目录中写入文件test.txt
在容器nginx2的/mnt目录中看到写入的test.txt文件
验证2:
容器nginx2追加内容
root@nginx-6c5778576c-4hxkj:/mnt# echo "bbbbbbbbbbbbbbbbbbbbbbbb" >>test.txt
容器nginx查看内容
root@nginx-6c5778576c-4hxkj:/opt# cat test.txt
aaaaaaaaaaaaa
bbbbbbbbbbbbbbbbbbbbbbbb
9.3 Volumes HostPath挂载宿主机路径
Kubernetes是一种用于管理容器化应用程序的开源平台。在Kubernetes中,Pod是最小的可部署单元,可以包含一个或多个容器。每个Pod都有自己的IP地址,可以使用它来与其他Pod进行通信。Pod可以挂载一个或多个卷来存储应用程序数据。其中一个卷类型是HostPath,它允许Pod将宿主机上的文件或目录挂载到其容器中。
HostPath卷类型对于需要直接访问宿主机上的文件或目录的应用程序非常有用。例如,如果需要访问宿主机上的日志文件或配置文件,可以使用HostPath挂载这些文件。但是,使用HostPath也存在一些安全风险,因为它允许Pod访问宿主机上的文件系统。
警告:HostPath 卷存在许多安全风险,最佳做法是尽可能避免使用 HostPath。 当必须使用 HostPath 卷时,它的范围应仅限于所需的文件或目录,并以只读方式挂载。如果通过 AdmissionPolicy 限制 HostPath 对特定目录的访问,则必须要求 volumeMounts 使用 readOnly 挂载以使策略生效。
一般不推荐使用。
vim nginx-deploy_1205_emptydir.yaml
apiVersion: apps/v1
kind: Deployment
metadata:labels:app: nginxname: nginx
spec:replicas: 2 #副本数selector:matchLabels:app: nginxstrategy:rollingUpdate:maxSurge: 25%maxUnavailable: 25%type: RollingUpdatetemplate:metadata:creationTimestamp: nulllabels:app: nginxspec:containers:- image: registry.cn-beijing.aliyuncs.com/dotbalo/nginx:1.15.12imagePullPolicy: IfNotPresentname: nginxresources: {}terminationMessagePath: /dev/termination-logterminationMessagePolicy: File# ports:# - containerPort: 8080# name: nginx-port# protocol: TCPvolumeMounts:- mountPath: /optname: share-volume- mountPath: /etc/timezonename: timezone - mountPath: /tmp/name: tmp- image: registry.cn-beijing.aliyuncs.com/dotbalo/nginx:1.15.12imagePullPolicy: IfNotPresentname: nginx2command:- sh- -c- sleep 1200resources: {}terminationMessagePath: /dev/termination-logterminationMessagePolicy: File# ports:# - containerPort: 8090# name: nginx2-port# protocol: TCPvolumeMounts:- mountPath: /mntname: share-volume- mountPath: /etc/timezonename: timezone dnsPolicy: ClusterFirstrestartPolicy: AlwaysschedulerName: default-schedulersecurityContext: {}terminationGracePeriodSeconds: 30volumes: - name: share-volumeemptyDir: {}#medium: Memory- name: timezonehostPath:path: /etc/timezonetype: File- name: tmphostPath:path: /tmptype: Directory
增加如下部分配置:挂载文件、挂载目录
验证:
kubectl replace -f nginx-deploy_1205_emptydir.yaml
[root@k8s-master01 ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
busybox 0/1 Unknown 0 105d
nginx-5b95587595-m2fl9 2/2 Running 0 12s
nginx-5b95587595-x4zhm 2/2 Running 0 14s
nginx-6c5778576c-4hxkj 2/2 Terminating 1 (30m ago) 90m
nginx-6c5778576c-b64sf 2/2 Terminating 1 (30m ago) 90m
nginx-deployment-7f65cbfc84-2npk5 1/1 Running 1 (35d ago) 93d
nginx-deployment-7f65cbfc84-4hlpt 1/1 Running 1 (35d ago) 93d
nginx-deployment-7f65cbfc84-dmgfx 1/1 Running 1 (35d ago) 93d
nginx-deployment-7f65cbfc84-p2dfr 1/1 Running 1 (35d ago) 93d
nginx-deployment-7f65cbfc84-zkld4 1/1 Running 1 (35d ago) 93d[root@k8s-master01 ~]# kubectl exec -it nginx-5b95587595-m2fl9 -c nginx -- bashroot@nginx-5b95587595-m2fl9:/# df -h
Filesystem Size Used Avail Use% Mounted on
overlay 26G 10G 17G 39% /
tmpfs 64M 0 64M 0% /dev
tmpfs 1.5G 0 1.5G 0% /sys/fs/cgroup
/dev/sda3 26G 10G 17G 39% /opt
shm 64M 0 64M 0% /dev/shm
tmpfs 2.9G 12K 2.9G 1% /run/secrets/kubernetes.io/serviceaccount
tmpfs 1.5G 0 1.5G 0% /proc/acpi
tmpfs 1.5G 0 1.5G 0% /proc/scsi
tmpfs 1.5G 0 1.5G 0% /sys/firmwareroot@nginx-5b95587595-m2fl9:/# cd tmp
root@nginx-5b95587595-m2fl9:/tmp# ls
sys.log
#宿主机增加sys2.log文件
root@nginx-5b95587595-m2fl9:/tmp# ls
runc-process2653599717 sys.log sys2.log
#查看/etc/timezone文件
root@nginx-5b95587595-m2fl9:/tmp# cat /etc/timezone
Asia/Shanghai
9.4 挂载NFS至容器
master01 安装nfs软件
yum -y install nfs-utils rpcbind
宿主机node01(ip:192.168.42.244)安装nfs服务器
yum -y install nfs-utils rpcbindsystemctl restart nfs-server[root@k8s-node01 ~]# vim /etc/exports/mnt/ 192.168.0.0/16(rw,sync,no_subtree_check,no_root_squash)
/opt/ 192.168.0.0/16(rw,sync,no_subtree_check,no_root_squash)#重新加载配置文件
[root@k8s-node01 ~]# exportfs -rv
exporting 192.168.0.0/16:/opt
exporting 192.168.0.0/16:/mnt[root@k8s-node01 ~]# systemctl reload nfs-server#查看共享目录
[root@k8s-node01 ~]# showmount -e localhost
Export list for localhost:
/opt 192.168.0.0/16
/mnt 192.168.0.0/16
master01验证node01 nfs server是否正常
[root@k8s-master01 mnt]# mkdir data
[root@k8s-master01 mnt]# mount -t nfs 192.168.42.244:/mnt /mnt/data/
[root@k8s-master01 mnt]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 1.5G 0 1.5G 0% /dev
tmpfs 1.5G 0 1.5G 0% /dev/shm
tmpfs 1.5G 153M 1.4G 11% /run
tmpfs 1.5G 0 1.5G 0% /sys/fs/cgroup
/dev/sda3 26G 10G 17G 39% /
/dev/sda1 1014M 171M 844M 17% /boot
。。。
192.168.42.244:/mnt 26G 7.8G 19G 30% /mnt/data
[root@k8s-master01 mnt]# ls /mnt/data/
node01.txt
[root@k8s-master01 mnt]# umount data
[root@k8s-master01 mnt]#
开始测试:
在yaml文件增加如下2部分
vim nginx-deploy_1205_emptydir.yaml
apiVersion: apps/v1
kind: Deployment
metadata:labels:app: nginxname: nginx
spec:replicas: 2 #副本数selector:matchLabels:app: nginxstrategy:rollingUpdate:maxSurge: 25%maxUnavailable: 25%type: RollingUpdatetemplate:metadata:creationTimestamp: nulllabels:app: nginxspec:containers:- image: registry.cn-beijing.aliyuncs.com/dotbalo/nginx:1.15.12imagePullPolicy: IfNotPresentname: nginxresources: {}terminationMessagePath: /dev/termination-logterminationMessagePolicy: File# ports:# - containerPort: 8080# name: nginx-port# protocol: TCPvolumeMounts:- mountPath: /optname: share-volume- mountPath: /etc/timezonename: timezone - mountPath: /tmp/name: tmp- image: registry.cn-beijing.aliyuncs.com/dotbalo/nginx:1.15.12imagePullPolicy: IfNotPresentname: nginx2command:- sh- -c- sleep 1200resources: {}terminationMessagePath: /dev/termination-logterminationMessagePolicy: File# ports:# - containerPort: 8090# name: nginx2-port# protocol: TCPvolumeMounts:- mountPath: /mntname: share-volume- mountPath: /etc/timezonename: timezone - mountPath: /tmpname: nfsdnsPolicy: ClusterFirstrestartPolicy: AlwaysschedulerName: default-schedulersecurityContext: {}terminationGracePeriodSeconds: 30volumes: - name: share-volumeemptyDir: {}#medium: Memory- name: timezonehostPath:path: /etc/timezonetype: File- name: tmphostPath:path: /tmptype: Directory- name: nfsnfs: server: 192.168.42.244path: /mnt
[root@k8s-master01 ~]# kubectl replace -f nginx-deploy_1205_emptydir.yaml
deployment.apps/nginx replaced[root@k8s-master01 ~]# kubectl exec -it nginx-679784694b-g45v7 -c nginx2 -- bash
root@nginx-679784694b-g45v7:/# df -h
Filesystem Size Used Avail Use% Mounted on
overlay 26G 7.8G 19G 30% /
tmpfs 64M 0 64M 0% /dev
tmpfs 1.5G 0 1.5G 0% /sys/fs/cgroup
/dev/sda3 26G 7.8G 19G 30% /mnt
192.168.42.244:/mnt 26G 7.8G 19G 30% /tmp
shm 64M 0 64M 0% /dev/shm
tmpfs 2.9G 12K 2.9G 1% /run/secrets/kubernetes.io/serviceaccount
tmpfs 1.5G 0 1.5G 0% /proc/acpi
tmpfs 1.5G 0 1.5G 0% /proc/scsi
tmpfs 1.5G 0 1.5G 0% /sys/firmware
相关文章:

第9章 K8s进阶篇-持久化存储入门
9.1 k8s存储Volumes介绍 Container(容器)中的磁盘文件是短暂的,当容器崩溃时,kubelet会重新启动容器,但最初的文件将丢失,Container会以最干净的状态启动。另外,当一个Pod运行多个Container时&…...

MathType2024最新word公式编辑器
使用word进行论文编写时,常需要使用公式编辑器,但有些word中并没有公式编辑器,这时应该怎么办呢?本文将围绕word里没有公式编辑器怎么办,word中的公式编辑器怎么用的内容进行介绍。 一、word里没有公式编辑器怎么办 …...

英语语法 - 主语从句
[ 主语从句 ] 没有时态要求 | 三单 1. 从属连词 that 引导的主语从句 | 不做句子成分 | 没有意义 That a monster attacked a ship last week shocked the world. That I bought a house in Beijing shocks many people. That Oscar is rich makes us upset. That he didnt wa…...

千梦网创:实现自动化“挂机躺盈”的三种方法
在互联网众多行业中,有很多人一直在寻找所谓的“挂机躺盈”的项目,在理财领域这种收入被称为“被动收入”。 天上不会掉馅饼这是一句讲烂掉的话了,躺在家里吃白食等着钱进账是一件不可能的事情。 然而如果你看到身边有“被动收入”的例子&a…...

微信小程序页面传递参数方法
说明 页面跳转方法有很多中,但经常会通过一个页面传递参数给另一个页面,非常的常见。但数据量大的时候,通常用字符串传递,但会显得过于臃肿,下面介绍页面传递参数的各种方式。 一、页面跳转链接携带参数 例如…...

出行类app如何提升广告变现收益?
出行类APP已经成为越来越多人们出行的首选,出行类app在变现方式上存在以下痛点:APP功能单一、使用场景单一;用户使用时间集中,粘性低...这些痛点使得开发者获取收益的提升面临极大的挑战。 https://www.shenshiads.com 如何让出…...

万能在线答题考试小程序源码系统 既能刷题 又能考试 带完整的搭建教程
现如今,线上学习和考试已经成为一种趋势。近年来,移动端的普及以及微信小程序的兴起,使得在线答题考试系统变得更加便捷和高效。今天罗峰就来给大家介绍一款万能在线答题考试小程序源码系统,既能刷题,又能考试…...

《Linux从练气到飞升》No.30 深入理解 POSIX 信号量与生产消费模型
🕺作者: 主页 我的专栏C语言从0到1探秘C数据结构从0到1探秘Linux菜鸟刷题集 😘欢迎关注:👍点赞🙌收藏✍️留言 🏇码字不易,你的👍点赞🙌收藏❤️关注对我真的…...

高防IP可以抵御哪些恶意攻击
高防IP协议可以隐藏用户的站点,使得攻击者无法发现恶意攻击的目标网络资源,从而提高了源站的安全性。能够有效抵御常见的恶意攻击类型ICMPFlood、UDPFlood、 TCPFlood、SYNFlood、ACKFlood等,帮助游戏、金 融、电子商务、互联网、政企等行业抵…...

vivado产生报告阅读分析6-时序报告2
1、复查时序路径详情 单击“ OK ”运行报告命令后 , 将打开一个新窗口。这样您即可复查其中内容。在其中可查看执行选定的每种类型 (min/max/min_max ) 的分析之后所报告的 N 条最差路径。 下图显示的“Report Timing ” ( 时序报告 ) 窗口…...

电脑怎么备份文件?简单几步,轻松备份!
电脑中存储着大量的个人和工作文件,包括照片、文档、音乐和视频等。但突发状况,如硬件故障、病毒感染或误删文件,可能会导致数据丢失。因此,备份文件至关重要。在本文中,我们将介绍三种电脑怎么备份文件的方法…...

获得不同干扰程度的模糊图像
同时对一共父级文件夹遍历。获得对应不同干扰程度的模糊图像 # This isimport cv2 import numpy as npdef reduce_resolution(image, factor):height, width, _ image.shape # 获取原始图像的宽度和高度new_width int(width / factor) # 计算新的宽度和高度new_height i…...

spring为什么要使用三级缓存来解决循环依赖
出现循环依赖的原因 AService依赖BService Service("aService") public class AService {AutowiredBService bService; } BService依赖AService Service("bService") public class BService {AutowiredAService aService; } 此时就出现了循环依赖 想…...

【自留地】前端 - uniapp - Vue - React - Flutter
uniapp uniapp自用速查表 - 我的常用组件 uniapp自用速查表 - 我的常用组件_uniapp static/customicons.css-CSDN博客文章浏览阅读1.8k次。uniapp项目登录退出、全局变量与状态、本地存储、Tabbar标签栏、顶部导航栏、下拉刷新、触底刷新、Ajax交互、内置组件样式修改、自定义…...

深度学习损失函数
Loss 是深度学习算法中重要的一部分,它的主要功能是评价网络预测的准确性和指导权重更新。合适 Loss 可以让网络收敛更快,预测更准。这个项目介绍了损失函数的基本概念以及7种常用损失函数的形式,性质,参数,使用场景及…...

百度智能云正式上线Python SDK版本并全面开源
文章目录 前言一、SDK的优势二、千帆SDK:快速落地LLM应用三、如何快速上手千帆SDK3.1、SDK快速启动3.2. SDK进阶指引 3.3. 通过Langchain接入千帆SDK4、开源社区 前言 百度智能云千帆大模型平台再次升级!在原有API基础上,百度智能云正式上线…...

Elasticsearch的配置学习笔记
文/朱季谦 Elasticsearch是一个基于Lucene的搜索服务器。它提供一个分布式多用户能力的全文搜索引擎,基于RESTful web接口,Elasticsearch是用Java语言开发的。 关于Elasticsearch系列笔记,主要从Elasticsearch的配置、核心组件、架构设计、使…...

LeetCode(25)验证回文串【双指针】【简单】
目录 1.题目2.答案3.提交结果截图 链接: 验证回文串 1.题目 如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后,短语正着读和反着读都一样。则可以认为该短语是一个 回文串 。 字母和数字都属于字母数字字符。 给你一个字符串 s&…...

Android设计模式--工厂模式
一,定义 工厂模式与Android 设计模式--单例模式-CSDN博客,Android设计模式--Builder建造者模式-CSDN博客,Android设计模式--原型模式-CSDN博客 一样,都是创建型设计模式。 工厂模式就是定义一个用于创建对象的接口,让…...

EasyExcel入门使用教程
文章目录 简介一、工程创建🎑二、读操作🎊二、写操作🎄总结 简介 数据导入导出意义 后台管理系统是管理、处理企业业务数据的重要工具,在这样的系统中,数据的导入和导出功能是非常重要的,其主要意义包括以下…...

Golang实现一个一维结构体,根据某个字段排序
package mainimport ("fmt""sort" )type Person struct {Name stringAge int }func main() {// 创建一个一维结构体切片people : []Person{{"Alice", 25},{"Bob", 30},{"Charlie", 20},{"David", 35},{"Eve…...

python语言实现背包问题动态规划
背包问题是一个经典的动态规划问题,实现方式如下: 假设有一个背包,容量为 W,有 n 个物品,每个物品有两个属性:体积 v 和价值 w。要求在不超过背包容量的情况下,选取一些物品放入背包࿰…...

将Python程序(.py)转换为Windows可执行文件(.exe)
python开发者向普通windows用户分享程序,要给程序加图形化的界面(传送门:这可能是最好玩的python GUI入门实例! http://www.jianshu.com/p/8abcf73adba3),并要将软件打包为可执行文件(.exe结尾),那如何将.py转为.exe ? 将.py转为.exe 第一步:安装pyinstaller(临时调用了国内豆…...

Oracle 查找非系统用户结合了10,11,12,19
oracle 12开始有了INHERITEDYES;字段来区分系统用户 select username from dba_users where INHERITEDYES; 对于12以下的版本,按created日期字段筛选会发现创建时间间隔比较大,好区分。 本人当前有个需求需要找出所有数据库的非系统用户,来…...

c++虚函数纯虚函数详解加代码解释
c虚函数纯虚函数详解加代码解释 一.概念:二.虚函数示例及解析:三.纯虚函数示例及解析:四.验证和实际使用及解析:1.子类没有对父类的函数重载,mian()函数调用,是直接返回父类的值2.子类对父类的函数重载&…...

kotlin retrofit
参考博客 【Android】【Kotlin】使用【Retrofit】基本使用 如何在kotlin中正确使用retrofit 将kotlin协程用于网络请求—完整实例,看这一篇就够了 Kotlin协程Retorfit网络请求框架封装...

Web 开发中 route 和 router 有什么区别?
什么是路由? 在 Web 开发中,会经常和路由打交道,可能有的同学并没有仔细思考过到底什么是路由。路由是根据用户请求的 URL 来确定返回给用户的内容或页面的技术,即将 HTTP 请求映射到相应的处理代码,使得用户能够通过…...

VBA技术资料MF83:将Word文档批量另存为PDF文件
我给VBA的定义:VBA是个人小型自动化处理的有效工具。利用好了,可以大大提高自己的工作效率,而且可以提高数据的准确度。我的教程一共九套,分为初级、中级、高级三大部分。是对VBA的系统讲解,从简单的入门,到…...

通信原理板块——脉冲编码调制(PCM)
微信公众号上线,搜索公众号小灰灰的FPGA,关注可获取相关源码,定期更新有关FPGA的项目以及开源项目源码,包括但不限于各类检测芯片驱动、低速接口驱动、高速接口驱动、数据信号处理、图像处理以及AXI总线等 1、脉冲编码调制PCM原理 将模拟信号…...

绕过类安全问题分析方法
什么是绕过 逻辑漏洞是指程序设计中逻辑不严密,使攻击者能篡改、绕过或中断程序,令其偏离开发人员预期的执行。 常见表现形式 1、接口(功能类)绕过:即接口或功能中通过某参数,绕过程序校验 2、流程类绕…...