K8S使用持久化卷存储到NFS(NAS盘)
参考文章:K8S-v1.20中使用PVC持久卷 - 知乎
目录
1、概念:
1.1 基础概念
1.2 PV的配置
1.2.1 静态PV配置
1.2.2 动态PV配置
1.2.3 PVC与PV的绑定
1.2.4 PVC及PV的使用
2 部署PV及PVC
2.1 所有K8S机器都需要安装NFS程序
2.2 仅针对需要暴露文件服务的机器开启NFS服务
2.2.1 Linux为例开启NFS服务对外暴露服务目录
2.2.2 群晖NAS盘为例开启NFS服务对外暴露共享目录
2.3 在需要挂载NFS服务的机器上执行挂载目录
1.3.4 取消挂载
2.4 执行如下命令,创建PV及PVC
3、在部署时使用PVC
4、
5、PV及PVC更高阶的用法
5.1 什么是StorageClass
5
.2 构建能自动分配PV的storageClass
Persistent Volumes:PV是持久化卷,系统管理员设置的存储,它是群集的一部分,是一种资源,所以它有独立于Pod的生命周期
Persistent Volume Claim:PVC是用户存储的请求。它与Pod相似,Pod消耗节点的CPU和内存资源,PVC则消耗PV资源,可以声明特定的容量大小和访问模式。
部署模式:
NFS(NAS) ==》PV ==》PVC
1、概念:
1.1 基础概念
容器本身是非持久化的,首先当容器崩溃,kubelet将重新启动容器,容器将会以镜像的初始状态重新开始在通过一个Pod中一起运行的容器,此时之前写入容器的文件将会丢失,另外容器之间通常需要共享容文件。Kubernetes通过Volum卷解决上述的两个问题。
Docker中存储卷只是磁盘的或另一个容器中的目录,并没有对其生命周期进行管理。Kubernetes的存储卷有自己的生命周期,它的生命周期与使用的它Pod生命周期一致。相比于在Pod中运行的容器来说,存储卷的存在时间会比的其中的任何容器都长,并且在容器重新启动时会保留数据。当然,当Pod停止存在时,存储卷也将不再存在。
在Pod中通过指定下面的字段来使用存储卷:
spec.volumes:通过此字段提供指定的存储卷
spec.containers.volumeMounts:通过此字段将存储卷挂接到容器中
1.2 PV的配置
1.2.1 静态PV配置
管理员人为的创建静态一些PV。
1.2.2 动态PV配置
系统自动创建的PV。可以通过storageClass来动态的产生PV。当管理员创建的静态 PV 都不匹配用户的 PersistentVolumeClaim 时,集群可能会尝试动态地为 PVC 创建卷。此配置基于 StorageClasses:PVC 必须请求存储类,并且管理员必须创建并配置该类才能进行动态创建。声明该类为 "" 可以有效地禁用其动态配置。要启用基于存储级别的动态存储配置,集群管理员需要启用 API server 上的 DefaultStorageClass 准入控制器。例如,通过确保 DefaultStorageClass 位于 API server 组件的 --admission-control 标志,使用逗号分隔的有序值列表中,可以完成此操作。有关 API server 命令行标志的更多信息,请检查 kube-apiserver 文档。
1.2.3 PVC与PV的绑定
一旦用户创建或已经创建了具有特定存储量的 PersistentVolumeClaim 以及某些访问模式。Kubernetes控制器会监视到新的 PVC,并寻找匹配的 PV,并将它们绑定在一起。 PVC 跟 PV 绑定是一对一的映射。
1.2.4 PVC及PV的使用
Pod 使用PVC作为卷,集群检查PVC以查找绑定的卷并为集群挂载该卷。对于支持多种访问模式的卷,用户指定在使用声明作为容器中的卷时所需的模式(读写、只读)
2 部署PV及PVC
2.1 所有K8S机器都需要安装NFS程序
yum -y install nfs-utils rpcbind
2.2 仅针对需要暴露文件服务的机器开启NFS服务
作为最终保存数据的linux服务器需要开启NSF服务,或者使用NAS盘的开启NSF服务即可。
2.2.1 Linux为例开启NFS服务对外暴露服务目录
# 先创建一个对外共享的目录
mkdir -p /share/
chmod 777 /share/echo "/share 192.168.10.0/24(rw,sync,no_root_squash)" >>/etc/exports# 声明对外暴露
exportfs -rv# 设置开机启动NFS服务并正式启动
systemctl enable rpcbind
systemctl enable nfs
systemctl enable nfs-lock
systemctl enable nfs-idmapsystemctl start rpcbind
systemctl start nfs
systemctl start nfs-lock
systemctl start nfs-idmap
#在需要成为NFS文件服务器上执行如上4行,可以对192.168.10.X网段暴露/share目录的读写
在实际需要暴露NFS的机器上执行如上命令,代表该机器对192.168.10.X网端内的机器对/share目录共享存储。rw支持读写、sync代表同步写入到NFS才算写成功、async代表写入到NFS机器的缓冲区就算成功。no_root_squash登入 NFS 主机使用分享目录的使用者,如果是 root 的话,那么对于这个分享的目录来说,他就具有 root 的权限!这个项目『极不安全』,不建议使用!root_squash:在登入 NFS 主机使用分享之目录的使用者如果是 root 时,那么这个使用者的权限将被压缩成为匿名使用者,通常他的 UID 与 GID 都会变成 nobody 那个系统账号的身份。
2.2.2 群晖NAS盘为例开启NFS服务对外暴露共享目录
1、开启群晖NFS服务
2、创建共享文件、并设置NFS权限。
2.3 在需要挂载NFS服务的机器上执行挂载目录
假定NFS服务启动在192.168.10.31机器上
showmount -e 192.168.10.31 # 执行该命令可以看到该NFS服务器下对外暴露的目录#### 下面是展示结果
Export list for 192.168.10.31:
/volume1/development * # 代表允许所有机器访问
/volume1/test 192.168.10.80 # 代表仅允许80机器访问
将远程NFS服务器的某个目录挂载到本机上,例如把远程development目录挂载到本机的/root/nfs上
showmount -e 192.168.10.31 # 可以先查看下远程NFS服务器有哪些目录暴露出来mkdir /root/nfschmod 777 /root/nfsmount -t nfs 192.168.10.31:/volume1/development /root/nfs# 可以执行如下命令查看挂载的结果
df -h可以看下面的结果
192.168.10.31:/volume1/development nfs 14T 690G 14T 5% /root/nfs
1.3.4 取消挂载
umount /root/nfs
或强制取消挂载
umount -l /root/nfs
2.4 执行如下命令,创建PV及PVC
apiVersion: v1
kind: PersistentVolume
metadata:name: pv-nfsnamespace: zo-devlabels:type: nfs
spec:capacity:storage: 100GiaccessModes:- ReadWriteManypersistentVolumeReclaimPolicy: Retain #Recycle会清除数据,自动回收;Retain需要手动清理回收;Delete:云存储专用的回收空间使用命令storageClassName: nfsnfs:path: "/volume1/development"server: 192.168.10.31 #nfs服务器地址readOnly: false
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: pvc-nfsnamespace: zo-dev
spec:accessModes:- ReadWriteManyresources:requests:storage: 20GistorageClassName: nfs
3、在部署时使用PVC
volumeMounts:- mountPath: /etc/nginx/nginx.confname: nginx-php74subPath: nginx.conf- mountPath: "/var/www/html" ##挂载容器中的目录到pvc nfs中的目录name: storage ##增加storagevolumes:- name: nginx-php74configMap:name: nginx-php-configmapitems:- key: nginx_php_confpath: nginx.conf- name: storage ##与前面对应persistentVolumeClaim: ##pvc声明claimName: pvc-nfs ##创建好的pvc lab name
4、使用NFS的注意事项
一个stateful 与状态的应用部署的时候,挂载了NFS,(哪怕是该应用重新安装)如PVC没有变化,是可以自动挂载到原先的数据的。
5、PV及PVC更高阶的用法
我们可以相信到一个大型的系统中会存在非常的PV及PVC的要求,挂载不同的目录,不同的容量大小,不同的NFS服务器、高速的SSD、低速的。因此如何管理好PV、PVC,最好是能依据PVC的声明要求,能做到自动分配PV岂不是很爽?
5.1 什么是StorageClass
参考这篇文章:k8s-1.22.3版本部署持久化存储之StorageClass+NFS_k8s 部署storageclass_归海听雪的博客-CSDN博客
StatefulSet是为了解决有状态服务的问题(对应Deployments和ReplicaSets是为无状态服务而设计),其应用场景包括:
稳定的持久化存储,即Pod重新调度后还是能访问到相同的持久化数据,基于PVC来实现
稳定的网络标志,即Pod重新调度后其PodName和HostName不变,基于Headless Service(即没有Cluster IP的Service)来实现
有序部署,有序扩展,即Pod是有顺序的,在部署或者扩展的时候要依据定义的顺序依次依次进行(即从0到N-1,在下一个Pod运行之前所有之前的Pod必须都是Running和Ready状态),基于init containers来实现
有序收缩,有序删除(即从N-1到0)
从上面的应用场景可以发现,StatefulSet由以下几个部分组成:
用于定义网络标志(DNS domain)的Headless Service
用于创建PersistentVolumes的volumeClaimTemplates
定义具体应用的StatefulSet
StatefulSet中每个Pod的DNS格式为statefulSetName-{0..N-1}.serviceName.namespace.svc.cluster.local,其中
serviceName为Headless Service的名字
0..N-1为Pod所在的序号,从0开始到N-1
statefulSetName为StatefulSet的名字
namespace为服务所在的namespace,Headless Servic和StatefulSet必须在相同的namespace
.cluster.local为Cluster Domain
在一个大规模的Kubernetes集群里,可能有成千上万个PVC,这就意味着运维人员必须实现创建出这个多个PV,此外,随着项目的需要,会有新的PVC不断被提交,那么运维人员就需要不断的添加新的,满足要求的PV,否则新的Pod就会因为PVC绑定不到PV而导致创建失败.而且通过 PVC 请求到一定的存储空间也很有可能不足以满足应用对于存储设备的各种需求,而且不同的应用程序对于存储性能的要求可能也不尽相同,比如读写速度、并发性能等,为了解决这一问题,Kubernetes 又为我们引入了一个新的资源对象:StorageClass,通过 StorageClass 的定义,管理员可以将存储资源定义为某种类型的资源,比如快速存储、慢速存储等,用户根据 StorageClass 的描述就可以非常直观的知道各种存储资源的具体特性了,这样就可以根据应用的特性去申请合适的存储资源了。
要使用 StorageClass,我们就得安装对应的自动配置程序,比如我们这里存储后端使用的是 nfs,那么我们就需要使用到一个 nfs-client 的自动配置程序,我们也叫它 Provisioner,这个程序使用我们已经配置好的 nfs 服务器,来自动创建持久卷,也就是自动帮我们创建 PV。
搭建StorageClass+NFS,大致有以下几个步骤:
1.创建一个可用的NFS Serve
2.创建Service Account.这是用来管控NFS provisioner在k8s集群中运行的权限
3.创建StorageClass.负责建立PVC并调用NFS provisioner进行预定的工作,并让PV与PVC建立管理
4.创建NFS provisioner.有两个功能,一个是在NFS共享目录下创建挂载点(volume),另一个则是建了PV并将PV与NFS的挂载点建立关联 。
5
.2 构建能自动分配PV的storageClass
执行如下部署后,然后创建PVC执行会自动产生PV卷,相当于按照PVC的声明要求,从storageClass中分配一个存储卷给到PVC。
# 如下创建storageClass,用于自动创建存储卷,原因是大规模集群中,很多的应用在不断的通过PVC申请PV,运维人员需要不断的依据PVC创建PV,另外PVC要求快速存储、慢速存储类型不一致
####################################### nfs-rbac.yaml
apiVersion: v1
kind: ServiceAccount
metadata:name: nfs-client-provisioner# replace with namespace where provisioner is deployednamespace: zo-dev #根据实际环境设定namespace,下面类同
---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:namespace: zo-devname: nfs-client-provisioner-runner
rules:- apiGroups: [""]resources: ["persistentvolumes"]verbs: ["get", "list", "watch", "create", "delete"]- apiGroups: [""]resources: ["persistentvolumeclaims"]verbs: ["get", "list", "watch", "update"]- apiGroups: ["storage.k8s.io"]resources: ["storageclasses"]verbs: ["get", "list", "watch"]- apiGroups: [""]resources: ["events"]verbs: ["create", "update", "patch"]
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:name: run-nfs-client-provisionernamespace: zo-dev
subjects:- kind: ServiceAccountname: nfs-client-provisioner# replace with namespace where provisioner is deployednamespace: zo-dev
roleRef:kind: ClusterRolename: nfs-client-provisioner-runnerapiGroup: rbac.authorization.k8s.io
---
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:name: leader-locking-nfs-client-provisioner# replace with namespace where provisioner is deployednamespace: zo-dev
rules:- apiGroups: [""]resources: ["endpoints"]verbs: ["get", "list", "watch", "create", "update", "patch"]
---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:name: leader-locking-nfs-client-provisionernamespace: zo-dev
subjects:- kind: ServiceAccountname: nfs-client-provisioner# replace with namespace where provisioner is deployednamespace: zo-dev
roleRef:kind: Rolename: leader-locking-nfs-client-provisionerapiGroup: rbac.authorization.k8s.io
---
########################################## nfs-provisioner.yaml
apiVersion: apps/v1
kind: Deployment
metadata:name: nfs-client-provisionerlabels:app: nfs-client-provisioner# replace with namespace where provisioner is deployednamespace: zo-dev #与RBAC文件中的namespace保持一致
spec:replicas: 1selector:matchLabels:app: nfs-client-provisionerstrategy:type: Recreatetemplate:metadata:labels:app: nfs-client-provisionerspec:serviceAccountName: nfs-client-provisionercontainers:- name: nfs-client-provisioner#image: quay.io/external_storage/nfs-client-provisioner:latest#这里特别注意,在k8s-1.20以后版本中使用上面提供的包,并不好用,这里我折腾了好久,才解决,后来在官方的github上,别人提的问题中建议使用下面这个包才解决的,我这里是下载后,传到我自已的仓库里#easzlab/nfs-subdir-external-provisioner:v4.0.1image: easzlab/nfs-subdir-external-provisioner:v4.0.1volumeMounts:- name: nfs-client-rootmountPath: /persistentvolumes # 指定容器内的挂载目录env:- name: PROVISIONER_NAMEvalue: zo-nfs-storage #provisioner名称,请确保该名称与 nfs-StorageClass.yaml文件中的provisioner名称保持一致- name: NFS_SERVERvalue: 192.168.10.31 #NFS Server IP地址- name: NFS_PATHvalue: "/volume1/development/dev" #NFS挂载卷,测试空间的修改为/testvolumes:- name: nfs-client-rootnfs:server: 192.168.10.31 #NFS Server IP地址path: "/volume1/development/dev" #NFS 挂载卷
---
###################################### nfs-storageClass.yaml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:name: dev-nfs-storage #无须指定namespace,所有空间都能使用,这里的名字是给POD挂载的volume.beta.kubernetes.io/storage-class名字
provisioner: zo-nfs-storage #这里的名称要和nfs-provisioner.yaml配置文件中的环境变量ENV中的PROVISIONER_NAME保持一致
parameters:# archiveOnDelete: "false"archiveOnDelete: "true"
reclaimPolicy: Retain ## 需要手动删除
然后加入创建一个PVC的时候,此时会自动产生一个PV,例如
kind: PersistentVolumeClaim
apiVersion: v1
metadata:name: test-claimnamespace: zo-devannotations:#与nfs-storageClass.yaml metadata.name保持一致volume.beta.kubernetes.io/storage-class: "managed-nfs-storage"
spec:storageClassName: "managed-nfs-storage"accessModes:- ReadWriteMany#- ReadWriteOnceresources:requests:storage: 10Gi
此时PVC test-claim被自动创建,同时PV也会自动创建并被绑定。
相关文章:

K8S使用持久化卷存储到NFS(NAS盘)
参考文章:K8S-v1.20中使用PVC持久卷 - 知乎 目录 1、概念: 1.1 基础概念 1.2 PV的配置 1.2.1 静态PV配置 1.2.2 动态PV配置 1.2.3 PVC与PV的绑定 1.2.4 PVC及PV的使用 2 部署PV及PVC 2.1 所有K8S机器都需要安装NFS程序 2.2 仅针对需要暴露文件…...

一图看懂 multidict 模块:类似于字典的键值对集合,键可以多次出现,资料整理+笔记(大全)
本文由 大侠(AhcaoZhu)原创,转载请声明。 链接: https://blog.csdn.net/Ahcao2008 一图看懂 multidict 模块:类似于字典的键值对集合,键可以多次出现,资料整理笔记(大全) 🧊摘要🧊模…...

django CBV 与 DRF APIView源码分析
django CBV源码分析 在django框架中,视图层中的逻辑即可以使用函数处理也可以使用类进行处理,如果在视图层中使用函数处理请求,就是FBV(function base views),如果在视图层中使用类处理请求,就是CBV(class base views…...

沃尔玛入驻教程:中国卖家如何免费、快速入驻沃尔玛walmart.com?
作为一家全球知名的零售巨头,沃尔玛(Walmart)的在线商城walmart.com拥有庞大的消费者基础和巨大的商机。对于中国的卖家来说,入驻沃尔玛的平台是一个很好的机会,但是有没有什么方法可以免费、快速入驻呢?有…...

《花雕学AI》Poe 上的四种 AI 机器人,你该怎么选?ChatGPT、Sage、Claude 和 Dragonfly对比
虽然 ChatGPT 是一项革命性的技术,但它作为一个消费产品却有点失败。你可能会花很长时间等待 OpenAI 的聊天机器人加载,或者根本无法使用它,因为它太大了。就算你能用上它,它也很缓慢,而且它的界面也很丑陋。它甚至没有…...

localStorage
目录 localStorage与sessionStorage localStorage的Set与Get localStorage传递参数 localStorage与sessionStorage 现代浏览器提供了一种被称为"Web Storage APIs"(Web 存储接口)的机制,允许在同一浏览器的不同标签页之间共享数…...

二十五、SQL 数据分析实战(9个中等难度的SQL题目)
文章目录 题目1: App 使用频率分析题目2: App 下载情况统计题目3: 寻找活跃学习者题目4: 商品分类整理题目5: 商品销售分析题目6: 网约车司机收益统计题目7: 网站登录时间间隔统计题目8: 不同区域商品收入统计题目9: 信贷逾期情况统计 题目1: App 使用频率分析 现有一张用户使…...

JavaSE_02基本语法-编程单词词汇
boolean [bʊlɪən] 变量的基本数据类型之一:布尔型const [kɒnst] n. 常量,常数constant [kɒnst(ə)nt] n. [数] 常数;恒量continue [kən’tɪnjuː] vi. 继续,连续;default [dɪ’fɔːlt; diːfɔːlt] 默认的,缺…...

区间预测 | MATLAB实现QRDNN深度神经网络分位数回归时间序列区间预测
区间预测 | MATLAB实现QRDNN深度神经网络分位数回归时间序列区间预测 目录 区间预测 | MATLAB实现QRDNN深度神经网络分位数回归时间序列区间预测效果一览基本介绍模型描述程序设计参考资料 效果一览 基本介绍 MATLAB实现QRDNN深度神经网络分位数回归时间序列区间预测。QRDNN模型…...

如何使用aframe.js构建一个简单的VR播放器
在当今这个信息化的时代,虚拟现实(VR)已经开始逐渐成为一种新的生活方式。作为一名前端开发工程师,在学习和探索VR技术方面,aframe.js是一个非常有趣和有用的工具。在本文中,我将介绍如何使用aframe.js构建…...

Fiddler抓包工具常见功能介绍,还不会的进来看
目录 Fiddler的功能面板 一、Statistics数据统计面板,性能分析 二、Inspectors查看请求与响应 三、Filters过滤器 1、User Filters启用 2、Action 3、过滤器实际应用 四、AutoResponder请求重定向 1、什么是请求重定向? 2、为什么要用这个功能&…...

基于海鸥算法优化的核极限学习机(KELM)分类算法-附代码
基于海鸥算法优化的核极限学习机(KELM)分类算法 文章目录 基于海鸥算法优化的核极限学习机(KELM)分类算法1.KELM理论基础2.分类问题3.基于海鸥算法优化的KELM4.测试结果5.Matlab代码 摘要:本文利用海鸥算法对核极限学习机(KELM)进行优化,并用于分类 1.KE…...

JAVA代码规范审查
JAVA代码规范审查 1. 添加必要的注释 所有的类都必须添加创建者和创建日期,以及简单的注释描述 方法内部的复杂业务逻辑或者算法,需要添加清楚的注释 一般情况下,注释描述类、方法、变量的作用 任何需要提醒的警告或TODO,也要注…...

Centos8安装redis7
1.下载: 官网下载:Download | Redis 把安装包上传至服务器: 2.安装: 解压redis: [rootnode202 ~]# cd /usr/local/soft/ [rootnode202 soft]# tar -zxvf redis-7.0.11.tar.gz 安装: 进入redis-7.0.1…...

RabbitMQ详解(一):Linux安装
消息队列概念 消息队列是在消息的传输过程中保存消息的容器。队列的主要目的是提供路由并保证消息的传递;如果发送消息时接收者不可用,消息队列会保留消息,直到可以成功地传递它。 常见的消息队列 RabbitMQ 基于AMQP(高级消息队列协议)基础上…...

Mojo:比 Python 快 35000 倍的 AI 编程语言
Mojo:比 Python 快 35000 倍的 AI 编程语言 Mojo是一门刚刚发布的面向 AI 开发人员的编程语言。 Mojo 被设计为 Python 的超集,所以如果你已经掌握了 Python,学习 Mojo 会很容易。关键是 Mojo 将 Python 的易用性与 C 语言的性能相结合&am…...

1703_LibreOffice常用功能使用体验
全部学习汇总: GreyZhang/windows_skills: some skills when using windows system. (github.com) 首先需要说明的是我不是一个重度Office用户,甚至算不上一个重度的Office用户。我使用的Office软件最多的功能就是文档编辑,绝大多数时候还是文…...

Postgres:Win/Linux环境安装及一键部署脚本
1.Win安装Postgres (1)下载安装包 (2)开始安装 修改安装目录 选择要安装的组件 data也就是库表及数据的.dba文件存放目录 密码设置 端口设置 next next 开始安装 安装完成,Stack Builder 根据需要选择是否安装。仅仅是…...

每日一题144——数组大小减半
给你一个整数数组 arr。你可以从中选出一个整数集合,并删除这些整数在数组中的每次出现。 返回 至少 能删除数组中的一半整数的整数集合的最小大小。 示例 1: 输入:arr [3,3,3,3,5,5,5,2,2,7] 输出:2 解释:选择 {3,…...

运维必懂的13条高效工作秘诀
正确做事,更要做正确的事 “正确地做事”强调的是效率,重视做一件工作的最好方法;“做正确的事”强调的是效能,重视时间的最佳利用——这包括是做或者不做某项工作。 实际上,第一重要的却是效能而非效率,…...

【牛客刷题专栏】0x26:JZ25 合并两个排序的链表(C语言编程题)
前言 个人推荐在牛客网刷题(点击可以跳转),它登陆后会保存刷题记录进度,重新登录时写过的题目代码不会丢失。个人刷题练习系列专栏:个人CSDN牛客刷题专栏。 题目来自:牛客/题库 / 在线编程 / 剑指offer: 目录 前言问…...

5/5~5/7总结
把socket通信改成了分成短连接和长连接,登录前的所有操作都是短连接,每次都关闭连接,如果登录成功了就保持该socket连接,登录成功之后的所有操作,修改资料,发信息等都用该socket, 服务端和客户…...

重要通知|Sui测试网将于5月11日重置
致Sui社区成员们: 正如之前公告所述,部分社区成员发现测试网可能会定期清除数据并重新启动。鉴于此,我们宣布计划将于2023年5月11日进行首次测试网清除。 对于想要继续读取和访问当前测试网络的社区成员,请使用由Mysten Labs在…...

教你快速把heic格式转化jpg,4种方法操作简单
教你快速把heic格式转化jpg的方法,因为HEIC格式图片通常出现在苹果公司的iOS 11操作系统及之后的版本中,这是因为苹果公司在这些版本中采用了HEIF(高效图像格式)作为默认的照片格式来替代JPEG格式。同时,需要注意的是&…...

交互式数据分析和处理新方法:pandas-ai =Pandas + ChatGPT
Python Pandas是一个为Python编程提供数据操作和分析功能的开源工具包。这个库已经成为数据科学家和分析师的必备工具。它提供了一种有效的方法来管理结构化数据(Series和DataFrame)。 在人工智能领域,Pandas经常用于机器学习和深度学习过程的预处理步骤。Pandas通…...

FIR滤波
参考来源: https://www.zhihu.com/question/323353814 本节主要围绕以下几个问题进行描述: 什么是FIR滤波器时域的卷积频域的相乘 关于FIR FIR滤波就是在时域上卷积的过程。将含噪声信号与低通滤波器的傅里叶逆变换值进行卷积,这个过程就是…...

Python小姿势 - Python中的类型检查
Python中的类型检查 在Python中,类型检查是通过内置函数isinstance()来实现的。 isinstance() 函数用于判断一个对象是否是一个已知的类型,类似 type()。 isinstance() 与 type() 区别: type() 不会认为子类是一种父类类型。 isinstance() 会…...

人工智能前景
人工智能AI的未来非常广阔和光明。随着科技的不断发展和普及,人工智能已经开始逐渐融入我们生活的方方面面,比如智能家居、智能医疗、无人驾驶等等。未来,随着更多的应用场景被开拓和挖掘,人工智能的应用范围将会越来越广泛&#…...

python并发编程学习笔记--生产者消费者模型 day02
目录 1. 什么是生产者消费者模型 2. 为什么引入生产者消费者模型 3. 如何实现 4. 示例 1. 什么是生产者消费者模型 生产者 : 程序中负责产生数据的一方消费者 : 程序中负责处理数据的一方 2. 为什么引入生产者消费者模型 在并发编程中, 生产者消费者模式通过一个容器来解…...

彩蛋丨利用R语言脚本实现批量合并Excel表格,再也不用手动点来点去了!
利用R语言脚本实现批量合并Excel表格 在整理数据的时候遇到一个问题:假如有很多个excel表,分别存放了一部分数据,现在想要快速把这些表格的数据汇总到一起,如何用R语言快速完成呢?本文分享一个脚本,能够自动…...