Kubernetes 持久卷(PV) 是一个允许 pod 访问存储设备上的持久存储的对象,通过 Kubernetes StorageClass 进行定义。与本质上是瞬态的常规卷不同,PV 是持久的,支持有状态的应用程序用例。PV 是 Kubernetes 集群中的一个资源对象,即使在使用它的 pod 被销毁后,它仍然存在。
PV 必须通过持久卷声明(PVC)请求,这些是存储请求。PVC 本质上是在 pod 上挂载满足某些要求的 PV 的请求。PVC 不指定特定的 PV,而是指定 pod 所需的 StorageClass。管理员可以定义 StorageClasses 来指示存储设备的属性,例如性能、服务级别和后端策略。
Kubernetes 中 PVC 模式的一个主要优势是,它允许开发人员动态请求存储资源,而无需知道底层存储设备的实现。
相关内容:阅读我们的 Kubernetes StorageClass 指南
在本文中:
要将 pod 绑定到 PV,pod 必须包含卷挂载和 PVC。这些声明允许用户在不知道底层存储设备详细信息的情况下将 PV 挂载在 pod 中。
将 PV 安装到 Pod 有两种选择:
相关内容:阅读我们的 Kubernetes 共享存储指南
本教程演示了 PV 和 PVC 的工作原理。它是 Kubernetes 文档中提供的完整教程 的摘要。
1.设置节点
使用单个节点设置 Kubernetes 集群,并确保 kubectl 命令行与控制平面有连接。在节点上创建一个目录,如下所示:
sudo mkdir /mnt/data
在目录中创建 index.html 文件。
2.创建持久卷
创建如下所示的 YAML 文件以定义 PV。
运行此命令以在您的节点上创建 PV:
kubectl apply -f https://k8s.io/examples/pods/storage/pv-volume.yaml
3.创建永久卷声明并将其绑定到永久卷
创建需要 PV 的 PVC,但要符合以下条件以匹配您之前创建的 PV:
运行以下命令以应用 PVC:
kubectl apply -f https://k8s.io/examples/pods/storage/pv-claim.yaml
当您创建持久卷声明时,Kubernetes 控制平面会找到正确的 PV。如果找到,它会将 PVC 绑定到 PV。
通过运行以下命令检查先前创建的 PV 的状态:
kubectl get pv task-pv-volume
如果绑定成功,输出应如下所示:
4.创建一个 pod 并挂载持久卷声明
最后,创建一个使用 PVC 的 pod。使用 NGINX 映像运行 pod,在 pod 规范的相关部分中指定您事先创建的 PVC:
使用 bash 命令在您的 pod 中安装 curl,然后运行此命令:
curl http://localhost/
输出应显示第 1 步中创建的 index.html 文件的内容。它应显示新 pod 可以通过 PVC 访问 PV 中的数据。
Kubernetes PVC 使用起来可能很复杂,导致可能难以诊断和解决的错误。PVC 错误通常与三大类相关 - PV 的创建问题、PV 的配置问题以及 PV 或 PVC 规格的变化。
与 PVC 相关的最常见错误是 FailedAttachVolume、FailedMount 和 CrashLoopBackOff。
这两个错误表示 Pod 无法挂载 PV。不同之处在于,当卷无法从上一个节点分离时会发生 FailedAttachVolume,当卷无法在所需路径上挂载时会发生 FailedMount。
导致这两个错误的可能原因很多,包括新节点故障、连接到新节点的磁盘太多、网络分区错误以及前一个节点上的存储设备故障。
诊断问题
要诊断 FailedAttachVolume 和 FailedMount 等问题的原因,请运行命令 describe pod 并搜索 Events 部分以查找指示错误的消息。消息还应提供有关原因的信息。
解决问题
Kubernetes 无法自动解决 FailedAttachVolume 和 FailedMount 错误,因此需要手动处理问题:
CrashLoopBackOff 表示 pod 崩溃、重新启动并重复崩溃。在某些情况下,此错误是由损坏的 PersistentVolumeClaims 导致的。
诊断问题
要确定 CrashLoopBackOff 错误是否由 PVC 引起,请检查上一个装载 PV 的容器实例的日志,检查部署日志,并在必要时在容器上运行 shell 以确定其崩溃原因。
解决问题
如果 CrashLoopBackOff 是 PVC 问题的结果,请尝试以下步骤:
kubectl get deployment -o jsonpath="{.spec.template.spec.volumes[*].persistentVolumeClaim.claimName}" failed-deployment
exec -it volume-debugger sh
NetApp Cloud Volumes ONTAP,领先的企业级存储管理解决方案,在 AWS、Azure 和 Google Cloud 上提供安全、经过验证的存储管理服务。Cloud Volumes ONTAP 容量可以扩展到数 PB,它支持各种用例,如文件服务、数据库、DevOps 或任何其他企业工作负载,具有强大的功能,包括高可用性、数据保护、存储效率、Kubernetes 集成等。
特别是,Cloud Volumes ONTAP 支持Kubernetes 持久卷配置和管理 容器化工作负载的要求。
详细了解 Cloud Volumes ONTAP 如何帮助解决这些 Kubernetes 工作负载与 Cloud Volumes ONTAP 案例研究中容器化应用程序的挑战。