kubernetes利用NFS创建PV PVC的过程(测试通过)

k8s之PV、PVC 关于k8s的存储卷(emptyDir、hostPath、NFS存储卷),pv/pvc 阅读详情

Persistent Volume(持久化卷)简称PV, 是一个K8S资源对象,我们可以单独创建一个PV, 它不和Pod直接发生关系, 而是通过Persistent Volume Claim, 简称PVC来实现动态绑定, 我们会在Pod定义里指定创建好的PVC, 然后PVC会根据Pod的要求去自动绑定合适的PV给Pod使用。

持久化卷下PV和PVC概念:
Persistent Volume(PV)是由管理员设置的存储,它是群集的一部分。就像节点是集群中的资源一样,PV 也是集群中的资源。 PV 是 Volume 之类的卷插件,但具有独立于使用 PV 的 Pod 的生命周期。此 API 对象包含存储实现的细节,即 NFS、iSCSI 或特定于云供应商的存储系统。
PersistentVolumeClaim(PVC)是用户存储的请求。它与 Pod 相似,Pod 消耗节点资源,PVC 消耗 PV 资源。Pod 可以请求特定级别的资源(CPU 和内存)。PVC声明可以请求特定的大小和访问模式(例如,可以以读/写一次或只读多次模式挂载)。有了PersistentVolumeClaim,用户只需要告诉Kubernetes需要什么样的存储资源,而不必关心真正的空间从哪里分配,如何访问等底层细节信息;这些Storage Provider的底层信息交给管理员来处理,只有管理员才应该关心创建PersistentVolume的细节信息

它和普通Volume的区别是什么呢?
普通Volume和使用它的Pod之间是一种静态绑定关系,在定义Pod的文里,同时定义了它使用的Volume。Volume是Pod的附属品,我们无法单独创建一个Volume,因为它不是一个独立的K8S资源对象。

1、 准备一台机器,搭建NFS服务

https://blog.youkuaiyun.com/BigData_Mining/article/details/88638879

2、 在node节点上测试

sudo apt install nfs-kernel-server
showmount -e  192.168.10.100(主节点)

3、 pv模块:创建pv

vim mypv.yaml //内容如下

apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv001
  labels:
    pv: nfs-pv
spec:
  capacity:
    storage: 10Gi #指定pv的容量为10Gi
     #指定访问模式
  accessModes:
    - ReadWriteMany   #pv能以readwriteMany模式mount到单个节点
  #指定pv在nfs服务器上对应的目录
  storageClassName: nfs
  nfs:
    path: /home/work (服务器端的挂在目录)
    server: 192.168.10.100(服务器IP)

固定写法,最下方定义了nfs的server和path,这就需要k8s本机安装nfs-utils,才能识别nfs;其次,还要在nfs服务器上指定path,并确保挂载nfs后,可以正常创建文件,写入内容。这里创建的pv存储总大小为1GB。定义pv的名称为pv001,label为nfs-pv。

细节解析:

PV 的访问模式(accessModes)有三种:

· ReadWriteOnce(RWO):是最基本的方式,可读可写,但只支持被单个 Pod 挂载。
· ReadOnlyMany(ROX):可以以只读的方式被多个 Pod 挂载。
· ReadWriteMany(RWX):这种存储可以以读写的方式被多个 Pod 共享。

不是每一种PV都支持这三种方式,例如ReadWriteMany,目前支持的还比较少。在 PVC 绑定 PV 时通常根据两个条件来绑定,一个是存储的大小,另一个就是访问模式。

PV 的回收策略(persistentVolumeReclaimPolicy,即 PVC 释放卷的时候 PV 该如何操作)也有三种:

Retain,不清理, 保留 Volume(需要手动清理)
Recycle,删除数据,即 rm -rf /thevolume/*(只有 NFS 和 HostPath 支持)
Delete,删除存储资源,比如删除 AWS EBS 卷(只有 AWS EBS, GCE PD, Azure Disk 和 Cinder 支持)

PVC释放卷是指用户删除一个PVC对象时,那么与该PVC对象绑定的PV就会被释放。

kubectl create -f mypv.yaml
kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
pv001 10Gi RWX Retain Available 10m

状态为Available,这是因为它还没有绑定到任何的pvc上面,当定义完pvc后,就可以自动绑定了。

4 、pvc模块:创建pvc

vim mypvc.yaml //内容如下
 
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: myclaim
  labels:
    app: wordpress
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 200Mi
  storageClassName: nfs
  selector:
    matchLabels:
      pv: nfs-pv

首先关注这个配置:storageClassName: nfs(如果不配置的话,可以自动的去匹配)。此配置用于绑定PVC和PV。这表明这个PVC希望使用storageClassName=nfs的PV。返回到上文中PV的定义,我们可以看到PV定义中也包含storageClassName=nfs的配置。
pvc向pv声明使用的存储空间大小为200MB,并且通过selector指定与label名为nfs-pv的pv相匹配(如果不配置的话,可以自动的去匹配),由于之前创建了label名为nfs-pv的pv,所以这里可以匹配成功,即pvc成功的向pv申请了200MB的空间。

kubectl create -f mypvc.yaml
kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
myclaim Bound pv001 10Gi RWX 2m

可以看到,pvc状态为Bound,它绑定了pv001

5 定义pod

vim pvpod.yaml //内容如下
 
apiVersion: v1
kind: Pod
metadata:
  name: httpd-pvpod
spec:
  containers:
  - image: httpd
    name: httpd-withpvc-pod
    imagePullPolicy: Always
    volumeMounts:
    - mountPath: "/usr/local/apache2/htdocs/"   #容器中指定路径(可自己指定),挂载到容器的某个路径下
      name: httpd-volume    #挂载设备的名字,与volumes[*].name 需要对应   
  volumes:
    - name: httpd-volume   #与上面volumeMounts的name对应
      persistentVolumeClaim:
        claimName: myclaim

最主要的,需要挂载pvc,实现持久化存储,并最终将该存储映射到容器内的/usr/local/apache2/htdocs/路径下,实现数据的持久化。

kubectl create -f pvpod.yaml
kubectl describe pod httpd-pvpod //查看Volumes那部分里的ClaimName

6 验证

1)到NFS的共享目录下创建一个文件

cd  /home/work/
echo "Test file" > 1.html

2)进入到httpd-pod里

kubectl exec -it httpd-pvpod bash
cat /usr/local/apache2/htdocs/1.html

3)删除httpd-pvpod

kubectl delete pod httpd-pvpod
cat /data/k8s/1.html

4)重建httpd-pod

kubectl create -f pvpod.yaml

5)curl访问

kubectl get pod httpd-pvpod -o wide //查看其对应的IP
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE
httpd-pod 1/1 Running 0 2m 172.20.3.5 172.7.15.114 <none>

curl 172.20.3.5/1.html

遇到的问题

[root@devhadoop225 k8s]#kubectl get svc
NAME            TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGEdeployment-wp   NodePort   10.68.224.222           80:36661/TCP   5dkubernetes      ClusterIP   10.68.0.1               443/TCP        9dmysql-service   ClusterIP  None                    3306/TCP       16h

查看service也是正常的。但查看pod时,出现了如下错误:

[root@devhadoop225 k8s]# kubectl logs wordpress-mysql-6976864748-m2nph
Error from server: Gethttp://192.168.1.240:10250/containerLogs/default/wordpress-mysql-6976864748-m2nph/mysql:net/http: HTTP/1.x transport connection broken: malformed HTTP response"\x15\x03\x01\x00\x02\x02"
[root@devhadoop225 k8s]# kubectl describepods wordpress-mysql-6976864748-js75f
Warning BackOff                12s (x4over 41s)  kubelet, 192.168.1.229  Back-off restartingfailed container

在k8s node端,查看container的运行日志,也没有任何内容,查不着任何有用的信息,于是就一直卡在这个问题上。但此时,在node上查看磁盘挂载情况,是可以看到的:
在这里插入图片描述
尝试去掉如下部分,再启动k8s mysq了,则一切正常:
在这里插入图片描述
这说明,问题就出现在了这部分上。但就是找不到问题的突破口。按上面的报错信息查找原因,根本找不出来原因。
后来,经过摸索,尝试在kubelet上直接运行docker命令创建mysql,但是volumes需要绑定nfs配置目录到容器的/var/lib/mysql,即执行:

docker run -p 3316:3306 --name mysql -v/data/mysql/conf:/etc/mysql/conf.d -v/var/lib/kubelet/pods/777d6238-d75c-11e8-b75b-ea2abbd44791/volumes/kubernetes.io~nfs/nfs-pv:/var/lib/mysql-e MYSQL_ROOT_PASSWORD=123456 -d 192.168.1.229/project/mysql:5.7.18

同样是创建失败,查看logs发现报错如下:changing ownership of ‘/var/lib/mysql/’: Operation notpermitted正是因为这个错误的暴露,才让我解决了整个k8s+mysql+pv+pvc+nfs的整套问题!!!
提示说确实是与NFS的配置有关,NFS默认是squash_all模式,但是要想使用NFS目录,将目录映射到docker容器中,必须要配置成no_root_squash模式才行,否则root用户无权限使用nfs的volume来映射docker容器中的目录!!!no_root_squash模式:是登入 NFS 主机使用分享目录的使用者,如果是 root 的话,那么对于这个分享的目录来说,他就具有 root 的权限!这个项目『极不安全』,不建议使用! 这正是我遇到的问题,之前一直在排查k8s master节点的问题,查找资料有说是kube-controller-manager的问题,但是排查一圈,没有发现问题。原来是NFS的问题啊,于是果断在NFS配置文件中增加了no_root_squash:

[root@dev252 etc]# more exports
#/home/centos7/ 192.168.1.0/24(insecure,rw,sync,fsid=0)
/home/centos7/nfs192.168.1.0/24(insecure,rw,sync,no_root_squash,fsid=0)

这样,再重启nfs后,再次通过k8s启动mysql service,就一切都正常了,可以正常创建pod,也可在240上正常创建容器了!
在这里插入图片描述

ubuntu kubernetes中使用NFS创建pv_pvc 书接上文jenkins自动化部署go【docker+jenkins+go+gitlab+harbor】1 ,现在我们来看看k8s那边是怎么更新的。关于k8s的安装大家 可以参考Ubuntu 18 Kubernetes集群的安装和部署 以及Helm的安装 和 Centos 使用kubeadm安装Kubernetes 1.15.3关于harbor 程序手动更新到k8s 参考 Windows docker k8s asp.net core ... 阅读详情

相关推荐

K8s网络存储,NFS,PV,PVC,StorageClass等详解

Kubernetes是分布式容器集群,如何在多个Pod之间或多 个Node之间进行数据存储和共享是非常重要的问题。

zhang19903848257的博客 3470

NFS 作为动态存储创建pvc

privisioner以deploy方式部署了1个pod,pod内container指定了nfs的环境信息(包括name/ip/path等),serviceAccountName=上一步创建的serviceAccount名称。privisioner可以理解为底层存储的驱动,由privisioner管理底层存储。note: image版本不同,可能导致创建pvc失败。此处使用namespace:default。

qq_37374514的博客 387

K8s中pv和pvc的使用

在我们的应用中可能经常有文件存储的需求,在docker的部署中,我们是通过将容器中的目录直接挂载到宿主机的目录上来解决这个问题的,那么k8s部署的方式肯定有所不同,k8s因为是多节点的,每个pod挂载的是对应节点的某个目录,这个会导致节点数据的一致性问题;在k8s中主要通过pvc的方式进行文件的挂载管理; 1.PVC PVC 的全称是:PersistentVolumeClaim(...

xiaoguangtouqiang的博客 6007

Kubernetes部署NFS PV数据持久化存储

准备 所有k8s节点需要安装nfs服务 一台nfs服务器提供存储 根据需求创建数据共享目录 image.png 配置对所有k8s节点的 授权 检查是否已经授权 showmount -e 192.168.100.204 image.png 之后不需要挂载,直接开始使用nfs的存储创建PV和PVC。 PersistentVolume(PV)是指由集群管理员配置提供的某存储系统上的段存储空间,它是对底层共享存储的抽象,将共享存储作为种可由用户申请使的资源,实现了“存储消费”机制。

m0_67505608的博客 577

kubernetes存储卷-NFS

nfs 卷能将 NFS (网络文件系统) 挂载到你的 Pod 中。 不像 emptyDir 那样会在删除 Pod 的同时也会被删除,nfs 卷的内容在删除 Pod 时会被保存,卷只是被卸载。 这意味着 nfs 卷可以被预先填充数据,并且这些数据可以在 Pod 之间共享。 在使用 NFS 卷之前,你必须运行自己的 NFS 服务器并将目标 share 导出备用 个人搭建的NFS Linux服务器Exporter配置 /data/nfs/ 10.10.20.0/24(rw,sync,no_subtree_c

rendongxingzhe的博客 2596

k8s存储PV与PVC使用详解

k8s存储PV与PVC使用详解

congge 7324

kubernetes集群配置实现NFS存储

1、K8S高可用集群的搭建方法 如何搭建Kubernetes高可用参见本人的《在ubuntu上通过kubeadm部署K8S(v1.13.4)高可用集群》一文。搭建好的集群类似如下: 2、NFS 服务器的安装配置 NFS是一种网络文件存储系统,该技术在Linux系统下通过配置实现,私有云K8S集群要对容器存储持久化,这是一种相对配置简单的存储技术。NFS服务器的安装配置方法可参考本人的《...

qq_21713697的博客 2454

文华指标源码—区间彩带

这就是当年东方财富软件终端里主打经典的指标、主要揭示主力成本区域。

qq2054129753的博客 884

kubernetes学习之持久化存储StorageClass(4---nfs存储服务)

代码】kubernetes学习之持久化存储StorageClass(4)

zsk_john的技术分享专用博客 3391

InsightFace(RetinaFace + ArcFace)人脸识别实战:从模型部署到Web服务构建

本文详细介绍了如何利用InsightFace框架,结合其集成的RetinaFace人脸检测与ArcFace人脸识别预训练模型,从零开始构建一个高性能的Web人脸识别服务。内容涵盖环境搭建、模型部署、核心代码解析(包括五点仿射对齐关键步骤)、FAISS向量检索集成以及基于FastAPI的Web服务开发,并提供了实战优化与常见问题排查指南,帮助开发者快速实现工业级应用。

weixin_29054245的博客 225

手把手教你安装 Vivado2019.2(附安装包)

Vivado 2019.2 作为 Xilinx 公司发布的一款设计套件版本,具有多个显著的优点,以下是对其优点的详细归纳

dpwkj的博客 1万+

一文读懂K8S的PV和PVC以及实践攻略

❤️ 摘要:作为当今最火的开源云原生系统,Kubernetes 是拥有一系列创新的组件和概念,其中最重要的组件和概念之一是 Kubernetes存储卷。Volume 组件是实现了数据持久性和共享的功能核心。本篇文章将详细介绍 Kubernetes(K8S)中的存储卷(Volume)机制,包括 Persistent Volume (PV)、Persistent Volume Claim (PVC) 和后端存储的使用,为帮助大家更好地理解三者之间的关系。

StevenZeng学堂 6077

.ipynb文件深度解析:从JSON结构到Jupyter Notebook高效使用指南

在Python开发与数据处理领域,交互式编程正成为探索数据与验证思路的高效方式。Jupyter Notebook作为最流行的交互式环境之一,其默认文件格式.ipynb本质是一个基于JSON的文本文件,内部通过单元格组织代码、说明文字与运行结果。理解其JSON结构,不仅有助于掌握Notebook的存储原理,更能为文件损坏修复、版本控制与自动化转换提供基础。依托对单元格类型、魔法命令及输出可视化的熟练运用,数据分析和数据可视化流程可以变得更为流畅。同时,借助VS Code、nbconvert等工具,开发者能将.

weixin_28839629的博客 343

Kubernetes K8S之存储PV-PVC详解

K8S之存储PV-PVC概述与说明,并详解常用PV-PVC示例

踏歌行的专栏 1万+

优化NEXYS A7开发板(Xilinx Artix-7)Microblaze核的FLASH读写性能实战

本文针对NEXYS A7开发板(Xilinx Artix-7)上Microblaze核读写FLASH速度慢的问题,提供了系统性的优化实战指南。通过深入分析SPI控制器配置、Flash指令模式选择、Microblaze核的Cache与硬件加速器优化,以及程序运行位置(BRAM vs DDR)的调整,有效将FLASH读写性能从“龟速”提升至接近理论峰值。文章结合实测数据,为FPGA嵌入式开发者提供了清晰的性能瓶颈分析与解决方案。

carrot的博客 256

ML307R OpenCPU TCP使用

实现现象 平台下发数据,板子在收到数据之后,马上再发送到平台,通过串口助手可以看到已经接收到数据。ML307R TCP 是使用LWIP的标准的socket通信,具体TCP流程可以自行百度。实验目的:实现把接收的数据再发送到服务端。因为是4G,所以必须用外网的。

面朝大海春暖花开 2231

Kubernetes(k8s)PV、PVC

查看pv的定义方式FIELDS:metadata: #由于 PV 是集群级别的资源,即 PV 可以跨 namespace 使用,所以 PV 的 metadata 中不用配置 namespacename:spec查看pv定义的规格spec:nfs:(定义存储类型)path:(定义挂载卷路径)server:(定义服务器名称)accessModes:(定义访问模型,有以下三种访问模型,以列表的方式存在,也就是说可以定义多个访问模式)...

weixin_56270746的博客 6904

Cesium 实战 19 - 使用 gltf-vscode 查看、预览以及编辑 glTF 和 GLB 模型

Cesium 实战 - 使用 gltf-vscode 查看、预览以及编辑 glTF 和 GLB 模型。

非科班Java出身GISer的博客 6433

k8s搭建nfs创建pv、pvc

k8s-创建pv NFS 1、关闭防火墙 systemctl stop firewalld.service systemctl disable firewalld.service 2、安装配置 nfs yum -y install nfs-utils rpcbind 3、共享目录设置权限: chmod 755 /data/k8s/ 4、在默认配置文件 /etc/exports 下,在该文件中添加下面的配置信息: vi /etc/exports /data/k8s *(rw,sync,no_r

zhoujianhui008的博客 4908

汇川AM系列ethercat控制伺服的使用说明(含转矩模式)

本文以一个实际例子,介绍ethercat伺服驱动器的工作原理,以及在汇川AM系列PLC中,如何点动、定位、速度、转矩控制ethercat伺服。

qq_34047402的博客 5110

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

k8s存储之PV、PVC

在k8s集群中,资源存储会散落到各个工作节点上,这样对用资源调用很不方便,那么k8s是如何实现存储资源共享的呢,本文浅尝辄止的探讨一下,k8s是通过pv、pvc实现的。

fengchengwu2012的博客 9218

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

深入理解 K8s 存储:PV、PVC 与 NFS

本文从 K8s 存储核心概念出发,通过 “本地目录 + PV+PVC” 和 “NFS+PV+PVC” 两个实践案例,详细讲解了 K8s 持久化存储的配置流程。重点介绍了 NFS 的跨节点共享优势,以及 StorageClass 动态 PV 的实现思路,帮助您理解 “Pod→PVC→PV→底层存储” 的层级关系。单节点存储需求:使用本地目录或 HostPath(适合测试环境)。多节点共享需求:使用 NFS、GlusterFS 等分布式存储(适合生产环境)。

Moonlight_Dream的博客 2170

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

【K8S】何为PV与PVC,如何创建,PVC如何绑定到特定的PV上?

PV与PVC的简介 k8s提供了emptyDir,hostPath,rbd,cephfs等存储方式供容器使用,(关于常用的emptyDir与hostPath的简介与区别,可以参考这篇文章【K8S】Volume类型-EmptyDir与HostPath的区别)。 不过这些存储方式都有一个缺点:开发人员必须得知指定存储的相关配置信息,才能使用存储。例如要使用cephfs,Pod的配置信息就必须指明c...

阳阳的博客 1万+

Kubernetes——Volume、PV和PVC

Kubernetes中Volume卷的管理(emptyDir、hostPath、NFS)、PV和PVC、NFS使用PV和PVC(静态)、StorageClass+NFS实现PV和PVC的动态创建

一坨小橙子的博客 1726

kubernetes(k8s)存储方案(认识PV/PVC/StorageClass)- NFS

认识PV/PVC/StorageClass kubernetes PV和PVC持久卷

西京刀客 5832

K8S存储实战案例:NFS+StorageClass+PV/PVC+Deployment

本篇文章分享一下在 Kubernetes (K8s) 中搭建 NFS 存储,并实现 PersistentVolume (PV)、PersistentVolumeClaim (PVC)、动态存储卷StorageClass,以及通过 Deployment 使用这些存储卷的完整流程,可以按照以下步骤进行。

qq_24442273的博客 2083
上一篇: Ubuntu18.04LTS搭建NFS及配置详解(修改完善)
下一篇: 1 node(s) had taints that the pod didn't tolerate
那记忆微凉
博客等级 码龄9年 412粉丝 387原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值