当前位置: 代码网 > 服务器>服务器>云计算 > 【云原生】Kubernetes 中的 PV 和 PVC 介绍、原理、用法及实战案例分析

【云原生】Kubernetes 中的 PV 和 PVC 介绍、原理、用法及实战案例分析

2024年08月01日 云计算 我要评论
在 Kubernetes(k8s)中,管理存储资源是确保应用持久性和可靠性的关键部分。PersistentVolume(PV)和PersistentVolumeClaim(PVC)是 Kubernetes 中用于存储资源管理的两个核心概念。它们提供了一种机制,允许 Pod 访问独立于其生命周期的存储资源,从而实现了数据的持久化。

在这里插入图片描述

✨✨ 欢迎大家来到景天科技苑✨✨

🎈🎈 养成好习惯,先赞后看哦~🎈🎈

在这里插入图片描述

kubernetes 中的 pv 和 pvc 介绍、原理、用法及实战案例分析

介绍

在 kubernetes(k8s)中,管理存储资源是确保应用持久性和可靠性的关键部分。persistentvolume(pv)和persistentvolumeclaim(pvc)是 kubernetes 中用于存储资源管理的两个核心概念。它们提供了一种机制,允许 pod 访问独立于其生命周期的存储资源,从而实现了数据的持久化。

pv(persistent volume)

pv 是 kubernetes 集群中的一块网络存储,它独立于 pod 存在,可以作为各种存储系统的抽象,如 nfs、iscsi、云提供商的存储(如 aws ebs、gcp persistent disks、azure disk storage)等。pv 由管理员预先创建并配置,包括容量、访问模式(readwriteonce、readonlymany、readwritemany)和回收策略等。pv 的生命周期包括可用(available)、绑定(bound)、释放(released)和回收(retained)等状态。

pvc(persistent volume claim)

pvc 是用户对 pv 的存储请求,它定义了 pod 对存储资源的需求。用户通过 pvc 声明所需的存储容量和访问模式,而不需要关心具体的 pv 细节。当 pvc 被创建时,kubernetes 会尝试将其与满足其要求的 pv 进行绑定。如果集群中没有可用的 pv,且 pvc 定义了 storageclass,则 kubernetes 可以动态地创建一个新的 pv 来满足 pvc 的需求。

原理

pv 和 pvc 的工作原理主要基于动态匹配和绑定机制。这种机制使得 pod 与存储资源的具体实现解耦,提高了灵活性和可移植性。

  1. 静态供应:管理员手动创建 pv,用户通过 pvc 声明对存储资源的需求。kubernetes 会根据 pvc 的标签选择器和 pv 的标签进行匹配,将满足条件的 pv 绑定到 pvc。

  2. 动态供应:当用户通过 pvc 请求存储资源时,如果集群中没有现成的 pv 可用,且 pvc 定义了 storageclass,kubernetes 会根据 storageclass 的配置动态创建一个新的 pv,并将其绑定到 pvc。

这种机制使得存储资源的管理更加灵活和高效,减少了手动干预的需要。

用法

创建 pv

管理员可以通过 yaml 文件创建 pv。以下是一个简单的 pv 创建示例,它定义了一个 1gb 大小的 nfs 存储卷:

apiversion: v1
kind: persistentvolume
metadata:
  name: example-pv
spec:
  capacity:
    storage: 1gi
  volumemode: filesystem
  accessmodes:
    - readwriteonce
  persistentvolumereclaimpolicy: retain
  nfs:
    path: /path/to/nfs/volume
    server: nfs-server-ip

创建 pvc

用户通过 pvc 声明对存储资源的需求。以下是一个 pvc 创建示例,它请求 1gb 大小的存储资源,并指定了 readwriteonce 访问模式:

apiversion: v1
kind: persistentvolumeclaim
metadata:
  name: example-pvc
spec:
  accessmodes:
    - readwriteonce
  resources:
    requests:
      storage: 1gi

将 pvc 与 pod 关联

在 pod 的定义中,可以将 pvc 与 pod 关联起来,以便 pod 可以访问 pvc 绑定的 pv 提供的存储资源。以下是一个 pod 定义的示例,它将 pvc 挂载到 pod 的 /data 目录:

apiversion: v1
kind: pod
metadata:
  name: example-pod
spec:
  containers:
    - name: example-container
      image: nginx
      volumemounts:
        - name: data
          mountpath: /data
  volumes:
    - name: data
      persistentvolumeclaim:
        claimname: example-pvc

实战案例分析

案例:部署 wordpress 应用程序

假设我们想要在 kubernetes 集群中部署一个 wordpress 应用程序,并希望 wordpress 的数据持久化存储在一个持久卷中。

步骤 1:创建 pv

首先,我们创建一个 pv,用于存储 wordpress 的数据。这里我们使用 hostpath 来定义一个本地存储的 pv:

apiversion: v1
kind: persistentvolume
metadata:
  name: wordpress-pv
spec:
  capacity:
    storage: 5gi
  volumemode: filesystem
  accessmodes:
    - readwriteonce
  hostpath:
    path: /mnt/data
步骤 2:创建 pvc

然后,我们创建一个 pvc,声明对 pv 的需求:

apiversion: v1
kind: persistentvolumeclaim
metadata:
  name: wordpress-pvc
spec:
  accessmodes:
    - readwriteonce
  resources:requests:
      storage: 5gi
步骤 3:部署 wordpress 应用

接下来,我们部署 wordpress 应用,并将其 pvc 挂载到 pod 的适当位置,以便存储数据库和媒体文件。这里我们使用 helm 或者直接编写 deployment 和 service 的 yaml 文件来部署 wordpress 和 mysql。

假设我们使用 helm,则首先需要添加一个 wordpress 的 helm 仓库(如果尚未添加),然后安装 wordpress 图表,并指定 pvc 作为存储选项。

helm repo add bitnami https://charts.bitnami.com/bitnami
helm install my-wordpress bitnami/wordpress \
  --set persistence.enabled=true \
  --set persistence.existingclaim=wordpress-pvc

在这个 helm 命令中,--set persistence.enabled=true 启用了持久化存储,--set persistence.existingclaim=wordpress-pvc 指定了现有的 pvc(即 wordpress-pvc)用于存储 wordpress 的数据。

步骤 4:验证部署

部署完成后,你可以通过 kubernetes dashboard 或者使用 kubectl 命令来检查 pod、service 和 pvc 的状态,确保一切正常运行。

kubectl get pods
kubectl get pvc
kubectl get svc

通过访问 wordpress 服务的外部 ip 地址或域名(如果你配置了 ingress 或 loadbalancer),你应该能够访问到你的 wordpress 网站,并看到它正常运行,同时数据存储在指定的 pv 中。

步骤 5:扩展和维护
扩展存储

随着 wordpress 应用程序的使用和数据量的增长,你可能需要扩展存储容量。对于静态供应的 pv,这通常意味着你需要手动创建一个新的、更大容量的 pv,并将应用程序迁移到新的 pv 上。然而,这通常是一个复杂且易出错的过程。

对于动态供应的 pv,情况要好得多。你可以通过修改 pvc 的请求大小来触发存储的动态扩展(如果底层存储系统支持在线扩展)。不过,需要注意的是,并非所有存储系统都支持在线扩展,而且即使支持,也需要确保 kubernetes 集群和存储系统都正确配置以支持这一功能。

备份和恢复

为了保障数据的安全性,定期备份 wordpress 的数据是非常重要的。你可以使用 kubernetes 的备份工具(如 velero)来定期备份 pvc 关联的数据卷。velero 可以与各种存储系统一起工作,提供灵活的数据备份和恢复选项。

在需要恢复数据时,你可以使用 velero 或其他备份工具将备份的数据恢复到指定的 pvc 中。这通常涉及到创建一个新的 pvc(如果原始 pvc 已删除或损坏),然后将备份数据恢复到该 pvc 关联的数据卷中。

监控和日志

为了保持 wordpress 应用程序的稳定性和性能,监控和日志记录也是必不可少的。你可以使用 kubernetes 的监控工具(如 prometheus 和 grafana)来监控 pod、service 和 pvc 的状态,以及资源使用情况(如 cpu、内存和存储)。

同时,确保 wordpress 应用程序和 mysql 数据库都配置了适当的日志记录级别,以便在出现问题时能够快速定位和解决问题。

步骤 6:更新和升级

随着 wordpress 和其依赖项(如 mysql)的更新和升级,你可能需要定期更新你的应用程序以利用新功能和安全修复。

如果你使用 helm 部署了 wordpress,那么更新和升级通常会比较简单。你可以使用 helm 的 upgrade 命令来更新到新的 helm 图表版本,或者修改现有的 helm 图表配置以应用更改。

然而,在更新和升级之前,请务必备份你的数据和配置,以便在出现问题时能够恢复到更新之前的状态。

总结

通过本实战案例分析,我们不仅展示了如何在 kubernetes 中使用 pv 和 pvc 来部署一个持久化存储的 wordpress 应用程序,还讨论了扩展存储、备份和恢复、监控和日志记录以及更新和升级等关键方面。这些步骤和最佳实践将帮助你更好地管理 kubernetes 中的存储资源,并确保你的应用程序能够稳定运行并满足业务需求。

记住,kubernetes 的强大之处在于其灵活性和可扩展性。通过充分利用 pv 和 pvc 以及其他 kubernetes 功能,你可以构建出高度可靠、可扩展和可维护的应用程序架构。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com