k8s 中存储之 PV 持久卷 与 PVC 持久卷申请

news2024/10/9 22:24:51

目录

1 PV 与 PVC 介绍

1.1 PersistentVolume(持久卷,简称PV)

1.2 PersistentVolumeClaim(持久卷声明,简称PVC)

1.3 使用了PV和PVC之后,工作可以得到进一步的细分:

2 持久卷实验配置介绍

2.1 PV 的配置介绍

2.2 PVC 的配置介绍

3 持久卷实验

3.1 创建 PV

3.2 查看 PV 资源是否被创建成功

3.3 创建 PVC 与 PV 进行绑定

3.4 创建一个pod进行测试

3.5 接下来的 pv2 与 pv3 也是相同的操作

3.6 PV 2 

3.7 PV 3


1 PV 与 PVC 介绍

前面已经学习了使用NFS提供存储,此时就要求用户会搭建NFS系统,并且会在yaml配置nfs。由于kubernetes支持的存储系统有很多,要求客户全都掌握,显然不现实。为了能够屏蔽底层存储实现的细节,方便用户使用, kubernetes引入PV和PVC两种资源对象。

PV(Persistent Volume)是持久化卷的意思,是对底层的共享存储的一种抽象。一般情况下PV由kubernetes管理员进行创建和配置,它与底层具体的共享存储技术有关,并通过插件完成与共享存储的对接。

PVC(Persistent Volume Claim)是持久卷声明的意思,是用户对于存储需求的一种声明。换句话说,PVC其实就是用户向kubernetes系统发出的一种资源需求申请。

1.1 PersistentVolume(持久卷,简称PV)

  • pv是集群内由管理员提供的网络存储的一部分。

  • PV也是集群中的一种资源。是一种volume插件,

  • 但是它的生命周期却是和使用它的Pod相互独立的。

  • PV这个API对象,捕获了诸如NFS、ISCSI、或其他云存储系统的实现细节

  • pv有两种提供方式:静态和动态

    • 静态PV:集群管理员创建多个PV,它们携带着真实存储的详细信息,它们存在于Kubernetes API中,并可用于存储使用

    • 动态PV:当管理员创建的静态PV都不匹配用户的PVC时,集群可能会尝试专门地供给volume给PVC。这种供给基于StorageClass

1.2 PersistentVolumeClaim(持久卷声明,简称PVC)

  • 是用户的一种存储请求

  • 它和Pod类似,Pod消耗Node资源,而PVC消耗PV资源

  • Pod能够请求特定的资源(如CPU和内存)。PVC能够请求指定的大小和访问的模式持久卷配置

  • PVC与PV的绑定是一对一的映射。没找到匹配的PV,那么PVC会无限期得处于unbound未绑定状态

1.3 使用了PV和PVC之后,工作可以得到进一步的细分:

  • 存储:存储工程师维护

  • PV: kubernetes管理员维护

  • PVC:kubernetes用户维护

2 持久卷实验配置介绍

2.1 PV 的配置介绍

PV是存储资源的抽象,下面是资源清单文件的解释:

apiVersion: v1  
kind: PersistentVolume
metadata:
  name: pv2
spec:
  nfs: # 存储类型,与底层真正存储对应
  capacity:  # 存储能力,目前只支持存储空间的设置
    storage: 2Gi
  accessModes:  # 访问模式
  storageClassName: # 存储类别
  persistentVolumeReclaimPolicy: # 回收策略

PV 的关键配置参数说明:

  • 存储类型

    底层实际存储的类型,kubernetes支持多种存储类型,每种存储类型的配置都有所差异

  • 存储能力(capacity)

目前只支持存储空间的设置( storage=1Gi ),不过未来可能会加入IOPS、吞吐量等指标的配置

  • 访问模式(accessModes)

    用于描述用户应用对存储资源的访问权限,访问权限包括下面几种方式:

    • ReadWriteOnce(RWO):读写权限,但是只能被单个节点挂载

    • ReadOnlyMany(ROX): 只读权限,可以被多个节点挂载

    • ReadWriteMany(RWX):读写权限,可以被多个节点挂载

    需要注意的是,底层不同的存储类型可能支持的访问模式不同

  • 回收策略(persistentVolumeReclaimPolicy)

    当PV不再被使用了之后,对其的处理方式。目前支持三种策略:

    • Retain (保留) 保留数据,需要管理员手工清理数据,当一个PV不再被任何PVC使用时(即PVC被删除或被绑定到其他PV),PV本身仍然存在,并且其上的数据不会被自动清除。管理员需要手动处理这些PV,可以重新绑定给新的PVC,或者手动删除PV。

    • Recycle(回收) 清除 PV 中的数据,效果相当于执行 rm -rf /thevolume/*

    • Delete (删除) 与 PV 相连的后端存储完成 volume 的删除操作,当然这常见于云服务商的存储服务。当一个PV不再被任何PVC使用时,PV会被自动删除,并且其上的数据也会被清除。PV一旦不再使用,就会被自动清理,减少了管理员的工作量。

    需要注意的是,底层不同的存储类型可能支持的回收策略不同

只有 NFS 和 HostPath 支持回收利用

AWS EBS,GCE PD,Azure Disk,or OpenStack Cinder卷支持删除操作。

  • 存储类别

    PV可以通过storageClassName参数指定一个存储类别

    • 具有特定类别的PV只能与请求了该类别的PVC进行绑定

    • 未设定类别的PV则只能与不请求任何类别的PVC进行绑定

  • 状态(status)

    一个 PV 的生命周期中,可能会处于4中不同的阶段:

    • Available(可用): 表示可用状态,还未被任何 PVC 绑定

    • Bound(已绑定): 表示 PV 已经被 PVC 绑定

    • Released(已释放): 表示 PVC 被删除,但是资源还未被集群重新声明

    • Failed(失败): 表示该 PV 的自动回收失败

2.2 PVC 的配置介绍

PVC是资源的申请,用来声明对存储空间、访问模式、存储类别需求信息。下面是资源清单文件:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pvc
  namespace: dev
spec:
  accessModes: # 访问模式
  selector: # 采用标签对PV选择
  storageClassName: # 存储类别
  resources: # 请求空间
    requests:
      storage: 5Gi

PVC 的关键配置参数说明:

  • 访问模式(accessModes)

用于描述用户应用对存储资源的访问权限

  • 选择条件(selector)

    通过Label Selector的设置,可使PVC对于系统中己存在的PV进行筛选

  • 存储类别(storageClassName)

    PVC在定义时可以设定需要的后端存储的类别,只有设置了该class的pv才能被系统选出

  • 资源请求(Resources )

    描述对存储资源的请求

3 持久卷实验

3.1 创建 PV

PV 资源用于在集群中管理持久性存储。PV 资源配置如下:

其实PV 主要的作用无非就是选择哪种类型的网络文件系统,如这次使用的就是NFS的文件系统。

或者说选择 回收的策略、访问的模式等等

[root@k8s-master volumes]# vim pv1-nfs.yml

apiVersion: v1 
kind: PersistentVolume  # 定义资源类型为PersistentVolume
metadata:  
  name: pv1  
spec:  
  storageClassName: my-nfs  # 指定存储类名称
  capacity:  # PV的容量
    storage: 5Gi  # PV的大小为5GiB
  volumeMode: Filesystem  # 指定卷的模式为文件系统
  accessModes:  # PV的访问模式
  - ReadWriteMany  # 支持多个节点同时读写
  # 设置PV的回收策略为Retain(保留),这意味着当PV不再被任何PVC使用时,
  # PV仍然存在,并且其上的数据不会被自动清除
  persistentVolumeReclaimPolicy: Retain  
  # 使用NFS类型的卷
  nfs:  # 使用NFS类型的卷
    server: 192.168.239.50  # NFS服务器的IP地址
    path: /nfsdata/pv1  # 在NFS服务器上的路径


[root@k8s-master volumes]# kubectl apply -f pv1-nfs.yml 

3.2 查看 PV 资源是否被创建成功

可以发现,虽然创建成功了,但他还处于 Available 的状态 ,这是未绑定的的状态但他是可用的,我们需要将 PV 与 PVC 进行绑定,最终实现的状态为 Bound

[root@k8s-master volumes]# kubectl get persistentvolume
NAME   CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM   STORAGECLASS   VOLUMEATTRIBUTESCLASS   REASON   AGE
pv1    5Gi        RWX            Retain           Available           my-nfs         <unset>                          13s

3.3 创建 PVC 与 PV 进行绑定

[root@k8s-master volumes]# vim pv1-nfs.yml 

apiVersion: v1
kind: PersistentVolume  # 定义PersistentVolume资源
metadata:
  name: pv1  # PV的名称
spec:
  storageClassName: my-nfs  # 指定存储类名称,与PVC要对应
  capacity:
    storage: 5Gi  # PV的容量大小
  volumeMode: Filesystem  # 卷的模式为文件系统
  accessModes:  # PV的访问模式
  - ReadWriteMany  # 支持多个节点同时读写
  persistentVolumeReclaimPolicy: Retain  # 设置PV的回收策略为Retain(保留)
  nfs:  # 使用NFS类型的卷
    server: 192.168.239.50  # NFS服务器的IP地址
    path: /nfsdata/pv1  # 在NFS服务器上的路径
# 在pv的 基础上增加以下 pvc 内容
---
apiVersion: v1
kind: PersistentVolumeClaim  # 定义PersistentVolumeClaim资源
metadata:
  name: pvc1  # PVC的名称  , 注意记住这个名字 ,在后面建立pod 的时候得引用PVC的名字
spec:
  storageClassName: my-nfs  # 指定存储类名称,与PV中的storageClassName要对应
  accessModes:  # PVC请求的访问模式
  - ReadWriteMany  # 支持多个节点同时读写
  resources:  # PVC请求的资源
    requests:
      storage: 1Gi  # 请求的存储容量大小 ,注意这个值不能超过PV的实际值


# 声明 pvc
[root@k8s-master volumes]# kubectl apply -f pv1-nfs.yml 

# 查看pv 与pvc的状态是否变为Bound    
[root@k8s-master volumes]# kubectl get pv
NAME   CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM          STORAGECLASS   VOLUMEATTRIBUTESCLASS   REASON   AGE
pv1    5Gi        RWX            Retain           Bound    default/pvc1   my-nfs         <unset>                          164m

[root@k8s-master volumes]# kubectl get pvc
NAME   STATUS   VOLUME   CAPACITY   ACCESS MODES   STORAGECLASS   VOLUMEATTRIBUTESCLASS   AGE
pvc1   Bound    pv1      5Gi        RWX            my-nfs         <unset>                 45s

3.4 创建一个pod进行测试

# 创建清单文件
[root@k8s-master volumes]# vim pvc1-nginx.yml 

apiVersion: v1
kind: Pod
metadata:
  name: pvc-nginx
spec:
  volumes:  # Pod中使用的卷列表
  - name: vol1  # 卷的名称
    persistentVolumeClaim:  # 使用PersistentVolumeClaim类型的卷
      claimName: pvc1  # 指定要使用的PVC的名称

  containers:
  - image: nginx
    name: nginx
    volumeMounts:    # 容器内卷的挂载点 , 即将vol1卷挂载到以下此目录下
    - mountPath: /usr/share/nginx/html
      name: vol1

# 声明清单文件
[root@k8s-master volumes]# kubectl apply -f pvc-nginx.yml 

# 查看pod是否创建成功
[root@k8s-master volumes]# kubectl get pods -o wide 
NAME                       READY   STATUS      RESTARTS   AGE     IP            NODE        NOMINATED NODE   READINESS GATES
nginx-v1-dbd4bc45b-49hhw   1/1     Running     0          4d      10.244.2.54   k8s-node2   <none>           <none>
nginx-v2-bd85b8bc4-nqpv2   1/1     Running     0          4d      10.244.1.35   k8s-node1   <none>           <none>
pvc-nginx                  1/1     Running     0          15s     10.244.2.64   k8s-node2   <none>           <none>
testpod                    0/1     Completed   0          3d12h   10.244.2.58   k8s-node2   <none>           <none>

# 尝试以下去访问,发现访问不成功,这是因为这是一个新的卷里面并没有东西
[root@k8s-master volumes]# curl 10.244.2.64
<html>
<head><title>403 Forbidden</title></head>
<body>
<center><h1>403 Forbidden</h1></center>
<hr><center>nginx/1.27.1</center>
</body>
</html>

# NFS 服务器上在指定PV中添加数据内容
[root@harbor nfsdata]# echo this is pv1 nginx > /nfsdata/pv1/index.html
[root@harbor nfsdata]# ls pv1/
index.html


# 由于并没内使用 ingress 也没有使用 NodePode 来暴露 所以仅在集群内访问
[root@k8s-master volumes]# kubectl get pod pvc-nginx -o wide
NAME        READY   STATUS    RESTARTS   AGE    IP            NODE        NOMINATED NODE   READINESS GATES
pvc-nginx   1/1     Running   0          153m   10.244.2.64   k8s-node2   <none>           <none>

[root@k8s-master volumes]# curl 10.244.2.64
this is pv1 nginx

3.5 接下来的 pv2 与 pv3 也是相同的操作

步骤:

创建 PV --> 声明 PV --> 查看是否正确创建 --> 创建 PVC 与 PV 进行绑定(PVC 与 PV 的类名要相同storageClassName) --> 声明PVC --> 创建一个 pod 指定PVC名称 验证是否可用

3.6 PV 2 

# 创建资源清单文件
[root@k8s-master volumes]# vim pv2-nfs.yml 
apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv2
spec:
  storageClassName: my-nfs-pv2 # 与PVC 要对应
  capacity:
    storage: 5Gi
  volumeMode: Filesystem
  accessModes:
  - ReadOnlyMany
  persistentVolumeReclaimPolicy: Retain
  nfs:
    server: 192.168.239.50
    path: /nfsdata/pv2
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pvc2
spec:
  storageClassName: my-nfs-pv2 # 与PV 中的 storageClassName 要对应
  accessModes:
  - ReadOnlyMany
  resources:
    requests:
      storage: 1Gi

# 声明 PV PVC 
[root@k8s-master volumes]# kubectl apply -f pv2-nfs.yml 
persistentvolume/pv2 created
persistentvolumeclaim/pvc2 created

[root@k8s-master volumes]# kubectl get pv
NAME   CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM          STORAGECLASS   VOLUMEATTRIBUTESCLASS   REASON   AGE
pv1    5Gi        RWX            Retain           Bound    default/pvc1   my-nfs         <unset>                          179m
pv2    5Gi        ROX            Retain           Bound    default/pvc2   my-nfs-pv2     <unset>                          2m52s

[root@k8s-master volumes]# kubectl get pvc
NAME   STATUS   VOLUME   CAPACITY   ACCESS MODES   STORAGECLASS   VOLUMEATTRIBUTESCLASS   AGE
pvc1   Bound    pv1      5Gi        RWX            my-nfs         <unset>                 169m
pvc2   Bound    pv2      5Gi        ROX            my-nfs-pv2     <unset>                 2m59s


[root@k8s-master volumes]# vim pvc2-nginx.yml 
apiVersion: v1
kind: Pod
metadata:
  name: pvc2-nginx
spec:
  containers:
  - image: nginx
    name: nginx-pvc2
    volumeMounts:
    - mountPath: /usr/share/nginx/html
      name: vol2
  volumes:
  - name: vol2
    persistentVolumeClaim:
      claimName: pvc2


[root@k8s-master volumes]# kubectl apply -f pvc2-nginx.yml 
pod/pvc2-nginx created

[root@k8s-master volumes]# kubectl get pod pvc2-nginx -o wide
NAME         READY   STATUS    RESTARTS   AGE    IP            NODE        NOMINATED NODE   READINESS GATES
pvc2-nginx   1/1     Running   0          2m4s   10.244.1.37   k8s-node1   <none>           <none>

# NFS服务器添加数据文件
[root@harbor nfsdata]# ls 
pv1  pv2  pv3
[root@harbor nfsdata]# echo this is pv2 nginx > /nfsdata/pv2/index.html

# 测试访问
[root@k8s-master volumes]# curl 10.244.1.37 
this is pv2 nginx

3.7 PV 3

[root@k8s-master volumes]# vim pv3-nfs.yml 
apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv3
spec:
  storageClassName: my-nfs-pv3 # 与PVC 要对应
  capacity:
    storage: 5Gi
  volumeMode: Filesystem
  accessModes:
    - ReadOnlyMany
  persistentVolumeReclaimPolicy: Retain
  nfs:
    server: 192.168.239.50
    path: /nfsdata/pv3
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pvc3 # 名称必须与pod中引用的一致
spec:
  storageClassName: my-nfs-pv3 # 与PV 中的 storageClassName 要对应
  accessModes:
    - ReadOnlyMany
  resources:
    requests:
      storage: 1Gi

[root@k8s-master volumes]# kubectl apply -f pv3-nfs.yml 

[root@k8s-master volumes]# kubectl get pv,pvc
NAME                   CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM          STORAGECLASS   VOLUMEATTRIBUTESCLASS   REASON   AGE
persistentvolume/pv1   5Gi        RWX            Retain           Bound    default/pvc1   my-nfs         <unset>                          3h31m
persistentvolume/pv2   5Gi        ROX            Retain           Bound    default/pvc2   my-nfs-pv2     <unset>                          8m21s
persistentvolume/pv3   5Gi        ROX            Retain           Bound    default/pvc3   my-nfs-pv3     <unset>                          10s

NAME                         STATUS   VOLUME   CAPACITY   ACCESS MODES   STORAGECLASS   VOLUMEATTRIBUTESCLASS   AGE
persistentvolumeclaim/pvc1   Bound    pv1      5Gi        RWX            my-nfs         <unset>                 3h20m
persistentvolumeclaim/pvc2   Bound    pv2      5Gi        ROX            my-nfs-pv2     <unset>                 8m21s
persistentvolumeclaim/pvc3   Bound    pv3      5Gi        ROX            my-nfs-pv3     <unset>                 10s
[root@k8s-master volumes]# vim pvc3-nginx.yml 
[root@k8s-master volumes]# kubectl apply -f pvc3-nginx.yml 


[root@k8s-master volumes]# vim pvc3-nginx.yml 
apiVersion: v1
kind: Pod
metadata:
  name: pvc3-nginx
spec:
  containers:
  - image: nginx
    name: nginx-pvc3
    volumeMounts:
    - mountPath: /usr/share/nginx/html
      name: vol3
  volumes:
  - name: vol3
    persistentVolumeClaim:
      claimName: pvc3


[root@k8s-master volumes]# kubectl apply -f pvc3-nginx.yml 

[root@k8s-master volumes]# kubectl get pods pvc3-nginx -o wide
NAME         READY   STATUS    RESTARTS   AGE     IP            NODE        NOMINATED NODE   READINESS GATES
pvc3-nginx   1/1     Running   0          2m51s   10.244.2.65   k8s-node2   <none>           <none>

# NFS 增加数据文件
[root@harbor nfsdata]# echo this is pv3 nginx > /nfsdata/pv3/index.html

# 访问测试
[root@k8s-master volumes]# curl 10.244.2.65
this is pv3 nginx

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2195695.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

什么是安全运营中心 SOC?

SOC 代表安全运营中心&#xff0c;它是任何企业中负责组织安全、保护企业免受网络风险的单一、集中的团队或职能。 安全运营中心将管理和控制业务运营的所有安全要素&#xff0c;从监控资产到雇用合适的人员和流程&#xff0c;再到检测和应对威胁。 在本文中&#xff0c;我们…

sqli-labs less-14post报错注入updatexml

post提交报错注入 闭合方式及注入点 利用hackbar进行注入&#xff0c;构造post语句 unameaaa"passwdbbb&SubmitSubmit 页面报错&#xff0c;根据分析&#xff0c;闭合方式". 确定列数 构造 unameaaa" or 11 # &passwdbbb&SubmitSubmit 确定存在注…

【Blender Python】7.一些运算、三角函数以及随机

概述 要用Blender进行程序生成&#xff0c;数学计算是少不了的&#xff0c;Python支持一些常规的表达式计算&#xff0c;而另外一些相关的数学函数则在math模块中。 一些基础的运算 取余、除法、整除 >>> 21 % 4 1>>> 21 / 4 5.25>>> 21 // 4 5…

视频画面提取保存为图片:简易方法与实用工具

如果需要在视频里随机截取某一帧作为照片来保存或分享&#xff0c;如何快速剪辑多个视频&#xff1f;幸运的是&#xff0c;如今有多种简易的方法和实用的工具可以帮助我们轻松实现这一目标。 1打开“媒体梦工厂”用到“视频封面”功能&#xff0c; 2在此功能里切换到“抽帧/提取…

通过实时可视性转变云安全

Upwind首席执行官 Amiram Shachar 讨论了混合和多云环境中云安全的复杂性。 他概述了深入了解配置和实时洞察的必要性&#xff0c;以实现敏捷性和安全性之间的平衡。 还分享了解决错误配置和确保合规性的策略&#xff0c;建议在云部署中采取主动的风险管理方法。 随着混合云…

毕设 大数据电影数据分析与可视化系统(源码+论文)

文章目录 0 前言1 项目运行效果2 设计概要3 最后 0 前言 &#x1f525;这两年开始毕业设计和毕业答辩的要求和难度不断提升&#xff0c;传统的毕设题目缺少创新和亮点&#xff0c;往往达不到毕业答辩的要求&#xff0c;这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师…

Bluetooth Channel Sounding中关于CS Event Subevent的详细介绍

BLE CS Event & Subevent定义&#xff1a; BLE CS Event事件定义为&#xff1a;CS 事件被定义为从同一个 LE piconet 物理通道连接事件锚点具有相同偏移Offset的所有 CS Subevent子事件组&#xff0c;如图 1所示&#xff0c;具体参考Vol 1, Part A 3.3.2.5.2 Characteristi…

自动驾驶系统研发系列—如何选择适合自动驾驶的激光雷达?从基础到高端全解读

&#x1f31f;&#x1f31f; 欢迎来到我的技术小筑&#xff0c;一个专为技术探索者打造的交流空间。在这里&#xff0c;我们不仅分享代码的智慧&#xff0c;还探讨技术的深度与广度。无论您是资深开发者还是技术新手&#xff0c;这里都有一片属于您的天空。让我们在知识的海洋中…

CSS圆角

在制作网页的过程中&#xff0c;有时我们可能需要实现圆角的效果&#xff0c;以前的做法是通过切图&#xff08;将设计稿切成便于制作成页面的图片&#xff09;&#xff0c;使用多个背景图像来实现圆角。在 CSS3 出现之后就不需要这么麻烦了&#xff0c;CSS3 中提供了一系列属性…

阿里云APP创建

首先进入阿里云生活物联网平台 阿里云生活物联网平台 创建新项目 然后创建新产品 完成后进入功能定义区 已经定义号插座电源开关&#xff0c;直接下一步 注意保留三元组信息 进入设备调试 没有模组&#xff0c;直接下一步 人机交互界面 最后测试 激活码&…

十大时间序列预测模型

目录 1. 自回归模型 原理 核心公式 推导过程: 完整案例 2. 移动平均模型 原理 核心公式 推导过程: 完整案例 3. 自回归移动平均模型 原理 核心公式 推导过程: 完整案例 4. 自回归积分移动平均模型 原理 核心公式 推导过程 完整案例 5. 季节性自回归积分…

Axios 快速入门

什么是Ajax Ajax 是一种通过 JavaScript 发送异步请求的技术&#xff0c;它的核心是使用 XMLHttpRequest 对象来与服务器交换数据。这种方式较为繁琐&#xff0c;因为需要手动处理请求状态和响应&#xff0c;并且编写的代码往往比较冗长。 相较之下&#xff0c;Axios 是一个基于…

其他:Python语言绘图合集

文章目录 介绍注意导入数据函数模块画图 介绍 python语言的科研绘图合集 注意 This dataset includes the following (All files are preceded by "Marle_et_al_Nature_AirborneFraction_"):- "Datasheet.xlsx": Excel dataset containing all annual a…

感知机学习算法

感知机 一、感知机简介二、感知机模型2.1 感知机的基本组成2.2 求和函数2.2.1 时间总合2.2.2 空间总合 2.3 激活函数2.4 学习算法2.4.1 赫布学习规则2.4.2 Delta学习规则 三、 结论参考文献 一、感知机简介 M-P神经元模型因其对生物神经元激发过程的极大简化而成为神经网络研究…

qt_c++_xml简单示范demo

迅雷链接 链接&#xff1a;https://pan.xunlei.com/s/VO8bJODxPfPHE0x3nfUa2KZ1A1?pwdtuxq# 复制这段内容后打开手机迅雷App&#xff0c;查看更方便 #ifndef MAINWINDOW_H #define MAINWINDOW_H#include <QMainWindow> #include <QTextCodec>#include <QFile&g…

PGMP-01概述2

目录 1.what is program management? 项目集管理 2.relationships among portfolio,program,and project management and roles in OPM 4.relationships among portfolio,program,and project management 5.组织战略、项目集管理和运营管理之间的关系 6.business vlaue…

sqli-labs靶场less-9和less-10

sqli-labs靶场less-9 本文只展示如何利用dnslog注入通过本关&#xff0c;注入原理可以参考我另外一篇文章 DSNlog注入原理 1、确定闭合方式 http://192.168.140.130/sq/Less-9/?id1 发现id的值不论为任何值&#xff0c;页面回显都是一致的You are in… 判断不存在布尔注入…

初谈构造函数和析构函数

加油学习的一天~~>_<~~ 文章目录 目录 文章目录 前言 一、什么是构造函数&#xff1f; 二、析构函数 &#xff08;1&#xff09;概念&#xff1a; 总结 前言 构造函数是特殊的成员函数&#xff0c;需要注意的是&#xff0c;构造函数虽然名称叫构造&#xff0c;但是构造…

【Flutter】- 核心语法

文章目录 知识回顾前言源码分析1. 有状态组件2. 无状态组件3. 组件生命周期4. 常用组件Container组件Text组件Image组件布局组件row colum stack expandedElevntButton按钮拓展知识总结知识回顾 【Flutter】- 基础语法 前言 Flutter是以组件化的思想构建客户端页面的,类似于…

Linux中的网络指令:ping、netstat、watch、pidof、xargs

目录 Ping指令 netstat指令 watch指令 pidof指令 xargs指令 Ping指令 功能&#xff1a;检测两台主机间的网络连通性 语法&#xff1a;ping [选项] 目标主机的IP地址 &#xff08;192.168.1.1&#xff09;或域名&#xff08;google.com&#xff09; 常见选项&#xff1a…