iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >kubernetes数据持久化PV和PVC怎么配置
  • 121
分享到

kubernetes数据持久化PV和PVC怎么配置

2023-07-04 15:07:46 121人浏览 独家记忆
摘要

这篇“kubernetes数据持久化PV和PVC怎么配置”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“kubernetes数

这篇“kubernetes数据持久化PV和PVC怎么配置”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“kubernetes数据持久化PV和PVC怎么配置”文章吧。

1. 什么是PV,PVC?

1.1 什么是PV

PresistentVolume(PV)是指集群管理员配置提供的某存储系统上的一段存储空间,它是对底层共享存储的抽象,将共享存储作为一种可由用户申请使用的资源,实现"存储消费"机制,通过存储插件,PV支持使用多种网络存储等多种后端存储系统,例如,NFS、CephFS、RBD。PV是集群级别的资源,不属于任何名称空间,用户对PV资源的使用需要通过PersistentVolumeClaim(PVC)提供的使用申请来完成绑定,PVC是PV资源的消费者,它向PV申请特定大小的空间及访问模式(rw或ro)从而创建出PVC存储卷。然后再由Pod资源通过PersistentVolumeClaim存储卷关联使用。

1.2 什么是PVC?

PersistentVolumeClaim,PVC是存储卷类型的资源,它通过申请占用某个PersistentVolume而创建,它与PV是一对一的关系,用户无须关心其底层实现细节,申请时,用户只需要指定目标空间的大小,访问模式,PV标签选择器和StorageClass等相关信息即可。

2. PV资源实践

2.1 PV配置字段详解

PresistentVolume Spec支持如下几个通用字段,用于定义PV的容量,访问模式和回收策。

Capacity: PV的容量

volumeMode: 卷类型,用于指定此卷可被用作文件系统还是裸格式的块设备,默认为Filesystem。

acceSSMode: PV的访问模式参考官方

  • ReadWriteOnce: 仅可被单个节点读写挂载;命令行中简写RWO。

  • ReadOnlyMany: 仅可被多个节点同时只读挂在;命令行简写ROX。

  • ReadyWriteMany: 可被多个节点同时读写挂载;命令行中简写RWX。

persistentVolumeReclaimPolicy: PV空间的处理机制,可用类型为Retain(默认)、Recycle或Delete。

  • Retain: 保持不动,由管理员手动回收。

  • Recycle: 空间回收,即删除存储卷下的所有文件(包括子目录和隐藏文件rm -rf /thevolume/*),目前仅NFS和hostpath支持此功能。

  • Delete: 删除存储卷,诸如 AWS EBS、GCE PD、Azure Disk 或 OpenStack Cinder 卷这类关联存储资产也被删除。

storageClassName: 当前PV所属的StorageClass的名称,默认为空,即不属于任何StorageClass。

mountOptions: 挂载选项组成的列表,如ro,soft和hard等。

2.2 HostPath PV示例

[root@kn-server-master01-13 pv]# cat hostpath-pv.yaml apiVersion: v1kind: PersistentVolumemetadata:  name: pv-volume-001    spec:   storageClassName: "host-storage"   资源类型的标识  persistentVolumeReclaimPolicy: "Retain"  回收策略默认为Retain  capacity:    定义空间    storage: 1Gi  定义空间大小  accessModes:    访问模式    - ReadWriteOnce  访问模式为仅被单个节点读写挂载,单路读写  hostPath:     临时存储在哪个地方    path: "/mnt/data"[root@kn-server-master01-13 pv]# kubectl get pvNAME            CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM   STORAGECLASS   REASON   AGEpv-volume-001   1Gi        RWO            Retain           Available           host-storage            4m36s

2.3 NFS PV示例

[root@kn-server-master01-13 pv]# cat nfs-pv.yaml apiVersion: v1kind: PersistentVolumemetadata:  name: nfs-pv  labels:     标签    release: nfs-redisspec:  storageClassName: "nfs-storage"  资源类型表示  persistentVolumeReclaimPolicy: "Recycle"  回收策略为Recycle相当rm -rf /  capacity:     storage: 0.5Gi  accessModes:  - ReadWriteMany  nfs:     server: 10.0.0.15    path: /data/Redis[root@kn-server-master01-13 pv]# kubectl get pvNAME            CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM             STORAGECLASS   REASON   AGEnfs-pv          512Mi      RWX            Recycle          Available                     nfs-storage             62mpv-volume-001   1Gi        RWO            Retain           Bound       default/001-pvc   host-storage            160m

3. PVC资源实践

3.1 PVC配置清单详解

PersistentVolumeClaim,PVC是存储卷类型的资源,它通过申请占用某个PersistentVolume而创建,它与PV是一对一的关系,用户无须关心其底层实现细节, 申请时,用户只需要指定目标空间的大小,访问模式,PV标签选择器和StorageClass等相关信息即可。

PVC的Spec字段可嵌套字段如下,

  • accessMode: 当前PVC的访问模式,其可用模式与PV相同。

  • resource当前PVC存储卷需要占用的资源的最大和最小值。

  • selector绑定时对PV应用的标签选择器,matchlabels或者匹配表达式matchEx-pressions用于挑选要绑定的PV,如果同时指定来两种挑选机制,则必须同时满足两种选择机制的PV才能被选出。

  • storageClassName: 所依赖的存储卷的名称。

  • volumeName: 用于直接制定要绑定的PV的卷名。

3.2 hostPath-PVC示例

[root@kn-server-master01-13 pv]# cat hostpath-pvc.yaml apiVersion: v1kind: PersistentVolumeClaimmetadata:  name: 001-pvcspec:  storageClassName: "host-storage"  和PV的storageclassname须一致,否则无法识别。  accessModes:    - ReadWriteOnce  resources:     pvc的资源限定仅指其空间大小。    requests:      storage: 0.9Gi  大小为0.9Gi;[root@kn-server-master01-13 pv]#  kubectl apply -f hostpath-pvc.yaml Available: 可用状态的自由资源,尚未被绑定PVC。Bound: 已经绑定至某个PVC。Released: 绑定的PVC已经被删除,但资源尚被集群回收。Failed: 因自动回收资源失败而处于的故障状态。[root@kn-server-master01-13 pv]# kubectl get pv pv-volume-001NAME            CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM             STORAGECLASS   REASON   AGEpv-volume-001   1Gi        RWO            Retain           Bound    default/001-pvc   host-storage            33m[root@kn-server-master01-13 pv]# kubectl describe pv pv-volume-001Name:            pv-volume-001Labels:          <none>Annotations:     pv.kubernetes.io/bound-by-controller: yesFinalizers:      [kubernetes.io/pv-protection]StorageClass:    host-storageStatus:          BoundClaim:           default/001-pvcReclaim Policy:  RetainAccess Modes:    RWOVolumeMode:      FilesystemCapacity:        1Ginode Affinity:   <none>Message:         Source:    Type:          HostPath (bare host directory volume)    Path:          /mnt/data    HostPathType:  Events:            <none>[root@kn-server-master01-13 pv]# kubectl describe pvc 001-pvc Name:          001-pvcNamespace:     defaultStorageClass:  host-storageStatus:        Bound   已绑定Volume:        pv-volume-001Labels:        <none>Annotations:   pv.kubernetes.io/bind-completed: yes               pv.kubernetes.io/bound-by-controller: yesFinalizers:    [kubernetes.io/pvc-protection]Capacity:      1GiAccess Modes:  RWOVolumeMode:    FilesystemUsed By:       <none>Events:        <none>

3.3 NFS-PV-PVC实践之准备NFS共享存储

NFS即是网络文件系统,它是一种分布式文件系统协议,kubernetes中的NFS存储卷用于将某些事先存在的NFS服务器导出(export)的存储空间挂载到Pod中以供容器使用,与临时存储不同的是,NFS存储卷在Pod对象终止后仅仅是被卸载而非删除,NFS是文件系统级共享服务,它支持同时存在多路挂载,定义NFS存储卷时,常用如下字段。

server nfs服务器的地址或者主机名,必须字段。

pathnfs服务器导出(共享)的文件系统路径,必须字段。

readOnly是否以只读方式挂载,默认为false。

生产环境建议使用Ceph、azureDisk等公有云存储。

[root@kn-server-node02-15 ~]# yum install nfs-utils -y [root@kn-server-node02-15 ~]# cat /etc/exports/nfs/data5/ 10.0.0.0/24(rw,no_root_squash)/data/redis 10.0.0.0/2410.0.0.0/24  pod访问nfs服务会将源IP修改为节点IP,允许所有节点访问NFS服务(ro,no_root_squash)访问NFS-SERVER共享目录的用户如果是root,它对共享目录有root权限准备数据共享目录[root@kn-server-node02-15 ~]# mkdir /data/redis -p [root@kn-server-node02-15 ~]# systemctl enable nfs-serverCreated symlink from /etc/systemd/system/multi-user.target.wants/nfs-server.service to /usr/lib/systemd/system/nfs-server.service.服务端配置各个工作节点安装nfs-utilsubuntu安装: sudo apt-get install nfs-common 。Centos安装nfs-utils[root@kn-server-master01-13 pv]# showmount -e 10.0.0.15Export list for 10.0.0.15:/data/redis 10.0.0.0/24master节点和node节点都需要安装[root@kn-server-node01-14 ~]# showmount -e 10.0.0.15Export list for 10.0.0.15:/data/redis 10.0.0.0/24

3.4 准备NFS-PVC

[root@kn-server-master01-13 pv]# cat nfs-pvc.yaml apiVersion: v1kind: PersistentVolumeClaimmetadata:  name: nfs-pvc  labels:    首先标签须匹配,不然无法匹配,也可以称为强行绑定。    release: nfs-redisspec:  storageClassName: "nfs-storage"  须同属一个  accessModes:   - ReadWriteMany  resources:    requests:      storage: 0.5Gi  指定大小。[root@kn-server-master01-13 pv]# kubectl apply -f nfs-pvc.yaml persistentvolumeclaim/nfs-pvc created显示已为绑定状态。[root@kn-server-master01-13 pv]# kubectl get pv,pvc NAME                             CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM             STORAGECLASS   REASON   AGEpersistentvolume/nfs-pv          512Mi      RWX            Recycle          Bound    default/nfs-pvc   nfs-storage             78mpersistentvolume/pv-volume-001   1Gi        RWO            Retain           Bound    default/001-pvc   host-storage            175mNAME                            STATUS   VOLUME          CAPACITY   ACCESS MODES   STORAGECLASS   AGEpersistentvolumeclaim/001-pvc   Bound    pv-volume-001   1Gi        RWO            host-storage   143mpersistentvolumeclaim/nfs-pvc   Bound    nfs-pv          512Mi      RWX            nfs-storage    6s通过describe来查看[root@kn-server-master01-13 pv]# kubectl describe pv nfs-pvName:            nfs-pvLabels:          release=nfs-redis   所属标签Annotations:     pv.kubernetes.io/bound-by-controller: yesFinalizers:      [kubernetes.io/pv-protection]StorageClass:    nfs-storage    storageclass名称Status:          Bound   绑定状态Claim:           default/nfs-pvc   名称空间Reclaim Policy:  Recycle  回收策略Access Modes:    RWX    访问模式VolumeMode:      FilesystemCapacity:        512Mi  大小Node Affinity:   <none>Message:         Source:    Type:      NFS (an NFS mount that lasts the lifetime of a pod)    Server:    10.0.0.15  来自那个nfs服务器    Path:      /data/redis   共享的数据目录    ReadOnly:  falseEvents:        <none>
3.4.1准备Pod并使用PVC
[root@kn-server-master01-13 pv]# cat pod-redis.yaml apiVersion: v1kind: Podmetadata:  name: redisspec:   containers:  - name: redis    image: redis    volumeMounts:    - name: redis-data      mountPath: /data  volumes:  - name: redis-data    persistentVolumeClaim:      claimName: nfs-pvc [root@kn-server-master01-13 pv]# kubectl describe pods redisContainers:  redis:    Container ID:   Docker://d82061a1a86f56432e9956fc46bc810e577a0d89b91894e266e883bef68f5d9d    Image:          redis    Image ID:       docker-pullable://redis@sha256:db485f2e245b5b3329fdc7eff4eb00f913e09d8feb9ca720788059fdc2ed8339    Port:           &lt;none&gt;    Host Port:      &lt;none&gt;    State:          Running      Started:      Sun, 27 Nov 2022 21:57:34 +0800    Ready:          True    Restart Count:  0    Environment:    &lt;none&gt;    Mounts:      /data from redis-data (rw)   已经挂载[root@kn-server-master01-13 pv]# kubectl describe pvc nfs-pvcName:          nfs-pvcNamespace:     defaultStorageClass:  nfs-storageStatus:        BoundVolume:        nfs-pvLabels:        release=nfs-redisAnnotations:   pv.kubernetes.io/bind-completed: yes               pv.kubernetes.io/bound-by-controller: yesFinalizers:    [kubernetes.io/pvc-protection]Capacity:      512MiAccess Modes:  RWXVolumeMode:    FilesystemUsed By:       redis  这里可以看到是redis这个Pod正在使用这个PVCEvents:        &lt;none&gt;
3.4.2 测试数据持久性
[root@kn-server-master01-13 pv]# redis-cli -h 192.168.1.86192.168.1.86:6379> set key haitang OK192.168.1.86:6379> get key"haitang"192.168.1.86:6379> bgsaveBackground saving started192.168.1.86:6379> exit可以看到数据是写到nfs-server了[root@kn-server-node02-15 redis]# ll总用量 4-rw-r--r-- 1 polkitd input 110 11月 27 22:14 dump.rdb删除Pod后,数据是不会丢失的。[root@kn-server-master01-13 pv]# kubectl delete pods redispod "redis" deleted数据是还在的。[root@kn-server-node02-15 redis]# ll总用量 4-rw-r--r-- 1 polkitd input 110 11月 27 22:20 dump.rdb

以上就是关于“kubernetes数据持久化PV和PVC怎么配置”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注编程网精选频道。

--结束END--

本文标题: kubernetes数据持久化PV和PVC怎么配置

本文链接: https://www.lsjlt.com/news/346443.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • kubernetes数据持久化PV和PVC怎么配置
    这篇“kubernetes数据持久化PV和PVC怎么配置”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“kubernetes数...
    99+
    2023-07-04
  • Kubernetes中怎么配置持久化存储
    在Kubernetes中配置持久化存储通常涉及使用持久卷(Persistent Volume)和持久卷声明(Persistent V...
    99+
    2024-04-09
    Kubernetes
  • Couchbase中怎么配置数据持久化
    在Couchbase中,可以通过配置持久化设置来保证数据在节点重启时不丢失。以下是在Couchbase中配置数据持久化的步骤: ...
    99+
    2024-04-09
    Couchbase
  • rabbitmq数据持久化怎么设置
    在RabbitMQ中,可以通过以下两种方式来设置数据持久化:1. 持久化队列:在声明队列时,设置`durable`参数为`true`...
    99+
    2023-10-27
    rabbitmq
  • kubernetes数据持久化StorageClass动态供给怎么实现
    这篇文章主要讲解了“kubernetes数据持久化StorageClass动态供给怎么实现”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“kubernetes数据持久化StorageClass...
    99+
    2023-07-04
  • Java持久化XML文件怎么配置
    今天小编给大家分享一下Java持久化XML文件怎么配置的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。选择一个格式编写配置文件...
    99+
    2023-06-29
  • Kubernetes使用PVC后数据丢失怎么解决
    今天小编给大家分享一下Kubernetes使用PVC后数据丢失怎么解决的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。问题现象...
    99+
    2023-07-05
  • Redis中的配置文件,数据持久化,事务
    目录一、配置文件1、Redis 的网络相关配置2、Redis的常规配置3、Redis的安全配置二、数据持久化1、RDB2、AOF三、事务1、multi2、exec3、discard4...
    99+
    2022-12-22
    Redis配置文件 Redis数据持久化 Redis事务
  • Kubernetes存储系统数据持久化管理方法是什么
    本篇内容主要讲解“Kubernetes存储系统数据持久化管理方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Kubernetes存储系统数据持久化管理方法是什么”吧!引言Kubernet...
    99+
    2023-07-04
  • Vuex数据持久化怎么实现
    小编给大家分享一下Vuex数据持久化怎么实现,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!什么是vuexvuex :是一个专为vue.js开发的状态管理器,采用集...
    99+
    2023-06-15
  • mongodb数据持久化怎么实现
    在MongoDB中,数据持久化是通过将数据写入硬盘来实现的。MongoDB会在后台自动将数据写入到磁盘中,以确保数据的持久性。 Mo...
    99+
    2023-10-21
    mongodb
  • 怎么将redis中数据持久化
    Redis支持多种数据持久化方式,可以将数据持久化到磁盘以确保数据的安全性。以下是两种常用的持久化方式:1. RDB持久化(Redi...
    99+
    2023-08-30
    redis
  • mysql怎么实现数据持久化
    MySQL可以通过以下几种方式来实现数据持久化: 使用磁盘存储:MySQL将数据存储在硬盘上,包括数据文件、日志文件等。这样即使...
    99+
    2023-10-21
    mysql
  • Redis怎么实现数据持久化
    Redis 有两种数据持久化的方式:RDB持久化和AOF持久化。 RDB持久化: RDB持久化是通过定期将内存中的数据快照写入磁...
    99+
    2024-05-07
    Redis
  • android数据持久化怎么实现
    在Android中,有多种方式可以实现数据持久化,下面列举了几种常见的方法:1. Shared Preferences(共享首选项)...
    99+
    2023-10-21
    android
  • Spark中怎么实现数据缓存和持久化
    在Spark中,可以通过使用RDD的persist()方法来实现数据缓存。persist()方法有多种级别,包括MEMORY_ONL...
    99+
    2024-03-14
    Spark
  • mysql表数据持久化怎么实现
    在MySQL中,数据持久化是通过将数据存储在磁盘上的表中来实现的。以下是一些实现数据持久化的方法: 创建表:首先需要创建一个表来...
    99+
    2023-10-26
    mysql
  • Couchbase中怎么实现数据持久化
    在Couchbase中,数据持久化可以通过以下几种方式实现: 使用持久化存储引擎:Couchbase支持使用不同的持久化存储引擎...
    99+
    2024-03-08
    Couchbase
  • redis数据持久化丢失怎么办
    redis数据持久化丢失后,可以利用redis提供的工具重新加载持久化的文件恢复数据,redis开启持久化的方法:RDB的持久化:# 时间策略save 900 1save 300 10save 60 10000# 文件名称dbfilenam...
    99+
    2024-04-02
  • Couchbase怎么处理数据的持久化
    Couchbase是一个NoSQL数据库管理系统,它通过将数据存储在内存中来实现快速读写操作,但也提供了数据持久化的机制来保证数据的...
    99+
    2024-04-09
    Couchbase
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作