一、简介

在前边文章中可以看到,Kubernetes中依赖后端存储包括:NFS、Ceph、块存储等存储设备实现数据的远程存储以及数据持久化。

使用这些网络存储资源需要工程师对存储有一定的了解,并需要在工作节点上对接这些存储,对于非专业工程师造成了一些困扰。

Kubernetes为了解决这些问题,定义了两个标准的Kubernetes资源即PV和PVC,为了使Kubernetes工程师从后端存储的逻辑中解耦出来。

Kubernetes工程师无需关注后端存储的逻辑,用户只需要声明需求,Kubernete中的pv-controller会检查用户声明的需求和已有特性,找一个最接近需求的PV,和PVC建立绑定关系。至于后端存储的细节无需了解。

PV主要承载存储细节,用户一般通过PVC申请存储资源。

PV是标准的资源类型,除了负责关联至后端存储系统外,它通常还需要定义支持的存储特性

  • Volume Mode:当前PV卷提供的存储空间模型,分为设备和文件系统两种
  • StorageClassName:当前PV隶属的存储类;
  • AccessMode:支持的访问模型,分为单路读写、多路读写和多路只读三种
  • Size:当前PV允许使用的空间上限

二、PV的两种置备方式

静态置备:由管理员通过存储细节对接到远程存储服务的某存储单元进行手动创建,

动态置备:管理员基于SC对接远程存储服务的管理API,根据用户PVC中声明的需求,自动请求存储服务创建适配的存储单元,并自动把该存储单元创建成PV。

三、准备NFS服务器

root@k8s-node03:~# mkdir /data/redis02
root@k8s-node03:~# vi /etc/exports
root@k8s-node03:~# cat /etc/exports /data/redis 192.168.10.0/24(rw,no_root_squash,no_subtree_check)
/data/redis02 192.168.10.0/24(rw,no_root_squash,no_subtree_check) root@k8s-node03:~# exportfs -rav
exporting 192.168.10.0/24:/data/redis02
exporting 192.168.10.0/24:/data/redis

四、创建NFS类型的PV

root@k8s-master01:~/learning-k8s/examples/volumes# cat pv-nfs-demo.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-nfs-demo
spec:
capacity:
storage: 5Gi
volumeMode: Filesystem
accessModes:
- ReadWriteMany
persistentVolumeReclaimPolicy: Retain #回收策略
mountOptions:
- hard
- nfsvers=4.1
nfs:
path: "/data/redis02" #nfs的共享目录
server: 192.168.10.13 #nfs服务端地址
root@k8s-master01:~/learning-k8s/examples/volumes# kubectl apply -f pv-nfs-demo.yaml
persistentvolume/pv-nfs-demo created root@k8s-master01:~/learning-k8s/examples/volumes# kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
pv-nfs-demo 5Gi RWX Retain Available 7s

五、声明PVC绑定PV

root@k8s-master01:~/learning-k8s/examples/volumes# cat pvc-demo.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc-demo
spec:
accessModes: ["ReadWriteMany"]
volumeMode: Filesystem
resources:
requests:
storage: 3Gi
limits:
storage: 10Gi
root@k8s-master01:~/learning-k8s/examples/volumes# kubectl apply -f pvc-demo.yaml
persistentvolumeclaim/pvc-demo created
root@k8s-master01:~/learning-k8s/examples/volumes# kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
pv-nfs-demo 5Gi RWX Retain Bound default/pvc-demo 6m46s
  • 以上看到PV的状态从Available转变成Bound
root@k8s-master01:~/learning-k8s/examples/volumes# kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
pvc-demo Bound pv-nfs-demo 5Gi RWX 2m9s

六、Pod消费PVC

root@k8s-master01:~/learning-k8s/examples/volumes# cat pod-with-pvc-demo.yaml
apiVersion: v1
kind: Pod
metadata:
name: redis-with-pvc
spec:
containers:
- name: redis
image: redis:7-alpine
imagePullPolicy: IfNotPresent
ports:
- containerPort: 6379
name: redisport
volumeMounts:
- mountPath: /data
name: redis-pvc-vol
volumes:
- name: redis-pvc-vol
persistentVolumeClaim: #卷声明请求
claimName: pvc-demo #对应PVC的名称 root@k8s-master01:~/learning-k8s/examples/volumes# kubectl apply -f pod-with-pvc-demo.yaml
pod/redis-with-pvc created
root@k8s-master01:~/learning-k8s/examples/volumes# kubectl get pod
NAME READY STATUS RESTARTS AGE
redis-with-pvc 1/1 Running 0 6s

k8s之持久存储卷PV和PVC的更多相关文章

  1. k8s系列---存储卷pv/pvc。configMap/secert

    因为pod是有生命周期的,pod一重启,里面的数据就没了.所以我们需要数据持久化存储. 在k8s中,存储卷不属于容器,而是属于pod.也就是说同一个pod中的容器可以共享一个存储卷. 存储卷可以是宿主 ...

  2. 持久化存储之 PV、PVC、StorageClass

    PV介绍: PersistentVolume(PV)是群集中由管理员配置的一块存储. 它是集群中的资源,就像节点是集群资源一样. PV是容量插件,如Volumes,但其生命周期独立于使用PV的任何单个 ...

  3. 容器编排系统K8s之PV、PVC、SC资源

    前文我们聊到了k8s中给Pod添加存储卷相关话题,回顾请参考:https://www.cnblogs.com/qiuhom-1874/p/14180752.html:今天我们来聊一下持久存储卷相关话题 ...

  4. k8s的pv和pvc简述

    pvc:资源需要指定:1.accessMode:访问模型:对象列表:    ReadWriteOnce – the volume can be mounted as read-write by a s ...

  5. k8s之PV、PVC

    目录 一.PVC和PV 1.1 PV概念 1.2 PVC概念 1.3 PV与PVC之间的关系 1.4 两种PV的提供方式 二.基于nfs创建静态PV资源和PVC资源 2.1 配置nfs存储(192.1 ...

  6. k8s存储卷概述

    pod本身具有生命周期,故其内部运行的容器及其相关数据自身均无法持久存在.docker支持配置容器使用存储卷将数据持久存储于容器自身文件系统之外的存储空间中,它们可以是节点文件系统或网络文件系统之上的 ...

  7. Kubernetes学习之路(十六)之存储卷

    目录 一.存储卷的概念和类型 二.emptyDir存储卷演示 三.hostPath存储卷演示 四.nfs共享存储卷演示 五.PVC和PV的概念 六.NFS使用PV和PVC 1.配置nfs存储 2.定义 ...

  8. Kubernetes 学习12 kubernetes 存储卷

    一.概述 1.我们此前讲过根据应用本身是否需要持久存储数据以及某一次请求和之前的请求是否有联系,可以分为四类应用 a.有状态,要存储 b.有状态,无持久存储 c.无状态,要存储 d.无状态,无持久存储 ...

  9. kubernets之pv以及pvc

    一 持久卷以及持久卷声明的由来 由于不管是哪种卷,开发者都需要提前预知kubernets集群里面的存储类型,这样就在一定程度上违背了kubernets集群的设计理念,kubernets的设计理念是在由 ...

  10. Kubernetes集群PV和PVC详解

    Kubernetes集群高级存储资源PV及PVC 文章目录 Kubernetes集群高级存储资源PV及PVC 1.高级存储PV和PVC概念部分 2.PV和PVC资源的生命周期 3.PV资源介绍与案例配 ...

随机推荐

  1. Jmeter如何分布式执行脚本?

    Jmeter分布式执行原理: JMeter分布式执行时,选择其中一台作为调度机(master),其他机器作为执行机(slave): master会在本地编辑好jmx压测脚本,执行时,master将jm ...

  2. css 布局整理2022-4

    理解CSS3里的Flex布局用法(转自网上,博客园修改一些方便更易看懂) 简单有法: 几个横排元素在竖直方向上居中 display: flex; flex-direction: row;//横向排列 ...

  3. Scala学习历险记(第一天)

    Scala学习笔记(一) 前言:由于最近要整大数据相关的东西,所以java开发的我很苦逼的来学习Scala了,为接下来的工作做知识储备,今天是2021年8月19号,是我接触scala语言的第一天,因此 ...

  4. Go语言VSCode开发环境配置

    最近学习Golang,先把开发环境配置好. 一.安装Go语言开发包 https://golang.google.cn/dl/ 按步骤安装即可,安装完成后需要设置Windows环境变量 配置好,做个测试 ...

  5. Nfs 共享存储搭建

    Nfs 共享存储搭建 为了实现不同操作系统中的数据共享,我们一般会搭建一些用于文件共享的服务器,nfs服务器就是其中一种,它实现的是linux与linux之间的共享.今天我将把如何在linux系统搭建 ...

  6. getUserMedia 获取 摄像头 拍照 代码 1920-1080 video canvas

    getUserMedia 获取 摄像头 拍照 代码 1920-1080 video canvas 20210422 摄像头代码 是基于 https 协议的,需要开启协议后才能测试 http-serve ...

  7. github git clone下载加速 && npm install 下载加速

    git clone https://pd.zwc365.com/seturl/< https 开头的项目地址> npm install --registry=https://registr ...

  8. 基于ads1299的可穿戴脑电信号采集之性能调试总结

    一 前言 问题背景: 最近做项目,遇到了一个问题,就是采集的信号有噪声,在这里做了很多尝试.   二 测试步骤 A 内部方波信号质量,通过测试发现内部方波信号质量特别好.这个说明了软件和存储这块,没啥 ...

  9. ETL工具-KETTLE教程实例实战3----转换(输入、输出)

    ETL工具-KETTLE教程实例实战3----转换(输入.输出) 欢迎关注笔者的公众号: java大师, 每日推送java.kettle运维等领域干货文章,关注即免费无套路附送 100G 海量学习.面 ...

  10. nginx和tomcat 反向代理 部署实例 直接运行

    1 前言 1.1 目的 为了正确的部署"ngix+memcached"特编写此部署手册,使安装人员可以通过部署手册知道如何部署系统,也为需要安装该系统的安装人员正确.快速的部署本系 ...