详解k8spv

一、k8spv介绍

k8spv全称为Kubernetes Persistent Volume,是Kubernetes(下文简称K8s)中用于访问持久化存储的一种API。在K8s中,容器的存储是临时性的,当容器退出时,所属的存储也会消失。针对于这种“一次性”的存储,K8s提供了Persistent Volume的机制,可以将数据从容器中分离出来,并将其持久化到其他的存储设备中。

Persistent Volume 可以看做是抽象出来的存储插槽,它代表了一段实际物理存储资源(比如磁盘卷或其他云存储),它提供了一种独立的、统一的方式来管理多个k8s pod中使用到的数据卷,从而使得存储管理变得更加的方便和高效。

二、k8spv的类型

在K8s中定义了多种不同类型的Persistent Volume,每种类型都有其特别的用途和实现方式。

1. HostPath类型

HostPath类型的Persistent Volume 直接使用节点上的文件系统来存储数据。这种存储方式适用于测试或独立的应用程序,但不建议在生产环境中使用。

apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv-hostpath
spec:
  capacity:
    storage: 5Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: /usr/share/elasticsearch/data

2. GCEPersistentDisk类型

GCEPersistentDisk类型表示通过Google Compute Engine(GCE)提供的持久化磁盘,它可以用来存储K8s的数据卷,但只能适用于部署在GCE上的应用程序。

apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv-gcepersistentdisk
spec:
  capacity:
    storage: 5Gi
  accessModes:
    - ReadWriteOnce
  gcePersistentDisk:
    pdName: my-data-disk
    fsType: ext4

3. NFS类型

NFS类型的Persistent Volume使用NFS协议实现共享存储,它可以让多个Pod之间共享同一组数据。NFS类型的Persistent Volume的PD需要先被正确指定。

apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv-nfs
spec:
  capacity:
    storage: 5Gi
  accessModes:
    - ReadWriteMany
  nfs:
    path: /var/nfs/data
    server: nfs.example.com

4. GlusterFS类型

GlusterFS类型的Persistent Volume使用GlusterFS作为卷的存储后端,这是一个开源的网络文件共享系统,它可以在多个节点之间共享数据。

apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv-glusterfs
spec:
  capacity:
    storage: 5Gi
  accessModes:
    - ReadWriteMany
  glusterfs:
    endpoints: glusterfs-cluster
    path: myvolume
    readOnly: false

5. iSCSI类型

iSCSI类型的 Persistent Volume可以连接到iSCSI Target,它是一种用TCP/IP协议传输SCSI指令的网络存储标准。

apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv-iscsi
spec:
  capacity:
    storage: 5Gi
  accessModes:
    - ReadWriteOnce
  iscsi:
    targetPortal: 10.0.0.10:3260
    iqn: iqn.2001-04.com.example:storage.k8s.io
    lun: 0
    fsType: ext4

三、k8spv的使用

k8spv的使用分为三个步骤:

1. 创建 Persistent Volume

Persistent Volume 可以通过yaml文件的方式创建,如下所示:

apiVersion: v1
kind: PersistentVolume
metadata:
  name: my-pv
spec: 
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  nfs:
    path: /mnt/nfs
    server: 192.168.0.1

2. 创建 Persistent Volume Claim

根据应用的需求,可以定义一个 Persistent Volume Claim (PVC) 来请求一个匹配的 PV。PVC可以通过yaml文件的方式定义,如下所示:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: my-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 5Gi

3. 在Pod中使用 Persistent Volume

在Pod的定义文件中,需要使用Volume和VolumeMount两个参数来使用 Persistent Volume,其中Volume参数定义了存储卷的名称和类型,VolumeMount参数定义了容器访问该存储卷的路径。

apiVersion: v1
kind: Pod
metadata:
  name: my-pod
spec:
  containers:
  - name: mycontainer
    image: nginx
    volumeMounts:
    - mountPath: /data
      name: my-pv-storage
  volumes:
  - name: my-pv-storage
    persistentVolumeClaim:
      claimName: my-pvc

四、k8spv的扩展

k8spv并不仅仅是上述这些已经被定义好的类型,通过扩展 k8spv,我们可以更好地满足我们的业务需求。

1. 自定义 Volume Plugin

如果你希望自己的存储后端被 K8s 支持,则需要自定义一个 Volume Plugin。通过Volume Plugin,可以使K8s支持新的存储卷类型。

2. StorageClass

StorageClass通过定义存储类型的参数,提供一个标准化的方式来管理PV。一个 StorageClass定义了一组参数,这些参数主要包括存储的类型、存储的大小等。通过 StorageClass,可以根据具体需求动态的使用 PV,从而更加灵活的管理数据。

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: my-storage-class
provisioner: my-provisioner.com
parameters:
  type: ssd

3. Volume Snapshot

Volume Snapshot 可以帮助用户创建存储卷的快照,用户可以基于此进行数据保护和恢复。通过Volume Snapshot,可以快速创建一个新的Persistent Volume,从而节省了很多比较耗时的工作。

apiVersion: snapshot.storage.k8s.io/v1alpha1
kind: VolumeSnapshot
metadata:
  name: my-snapshot
spec:
  snapshotClassName: my-snapshot-class
  source:
    kind: PersistentVolumeClaim
    name: my-pvc

五、总结

K8spv为我们提供了很好的数据存储管理方式,通过它我们可以更好地管理应用程序的状态数据,并保证数据不丢失。此外,由于K8s PV和PVC的使用非常简单,因此它也非常适合用于各种类型的企业级应用程序。

原创文章,作者:FNBVH,如若转载,请注明出处:https://www.506064.com/n/331567.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
FNBVH的头像FNBVH
上一篇 2025-01-20 14:10
下一篇 2025-01-20 14:10

相关推荐

  • Linux sync详解

    一、sync概述 sync是Linux中一个非常重要的命令,它可以将文件系统缓存中的内容,强制写入磁盘中。在执行sync之前,所有的文件系统更新将不会立即写入磁盘,而是先缓存在内存…

    编程 2025-04-25
  • 神经网络代码详解

    神经网络作为一种人工智能技术,被广泛应用于语音识别、图像识别、自然语言处理等领域。而神经网络的模型编写,离不开代码。本文将从多个方面详细阐述神经网络模型编写的代码技术。 一、神经网…

    编程 2025-04-25
  • Linux修改文件名命令详解

    在Linux系统中,修改文件名是一个很常见的操作。Linux提供了多种方式来修改文件名,这篇文章将介绍Linux修改文件名的详细操作。 一、mv命令 mv命令是Linux下的常用命…

    编程 2025-04-25
  • Python输入输出详解

    一、文件读写 Python中文件的读写操作是必不可少的基本技能之一。读写文件分别使用open()函数中的’r’和’w’参数,读取文件…

    编程 2025-04-25
  • nginx与apache应用开发详解

    一、概述 nginx和apache都是常见的web服务器。nginx是一个高性能的反向代理web服务器,将负载均衡和缓存集成在了一起,可以动静分离。apache是一个可扩展的web…

    编程 2025-04-25
  • MPU6050工作原理详解

    一、什么是MPU6050 MPU6050是一种六轴惯性传感器,能够同时测量加速度和角速度。它由三个传感器组成:一个三轴加速度计和一个三轴陀螺仪。这个组合提供了非常精细的姿态解算,其…

    编程 2025-04-25
  • 详解eclipse设置

    一、安装与基础设置 1、下载eclipse并进行安装。 2、打开eclipse,选择对应的工作空间路径。 File -> Switch Workspace -> [选择…

    编程 2025-04-25
  • C语言贪吃蛇详解

    一、数据结构和算法 C语言贪吃蛇主要运用了以下数据结构和算法: 1. 链表 typedef struct body { int x; int y; struct body *nex…

    编程 2025-04-25
  • Python安装OS库详解

    一、OS简介 OS库是Python标准库的一部分,它提供了跨平台的操作系统功能,使得Python可以进行文件操作、进程管理、环境变量读取等系统级操作。 OS库中包含了大量的文件和目…

    编程 2025-04-25
  • Java BigDecimal 精度详解

    一、基础概念 Java BigDecimal 是一个用于高精度计算的类。普通的 double 或 float 类型只能精确表示有限的数字,而对于需要高精度计算的场景,BigDeci…

    编程 2025-04-25

发表回复

登录后才能评论