菜单

此页面上的内容由机器翻译完成。某些内容的质量可能并不完美。

分享反馈

Kubernetes 持久卷声明说明

目录

分享该页面

Yifat Perry
Yifat Perry

什么是 Kubernetes 持久卷和持久卷声明?

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 有两种选择:

  • 静态配置涉及管理员手动创建 PV 并定义与这些 PV 条件匹配的 StorageClass。当 Pod 使用指定 StorageClass 的 PVC 时,它可以访问这些静态 PV 之一。
  • 动态配置发生在没有与 PVC 匹配的静态 PV 时。在这种情况下,Kubernetes 集群根据 StorageClass 定义提供新的 PV。

相关内容:阅读我们的 Kubernetes 共享存储指南

创建 Persistent Volume Claim 并绑定到 Persistent Volume

本教程演示了 PV 和 PVC 的工作原理。它是 Kubernetes 文档中提供的完整教程 的摘要。

1.设置节点
使用单个节点设置 Kubernetes 集群,并确保 kubectl 命令行与控制平面有连接。在节点上创建一个目录,如下所示:

sudo mkdir /mnt/data

在目录中创建 index.html 文件。

2.创建持久卷
创建如下所示的 YAML 文件以定义 PV。

k8s pvc 1

运行此命令以在您的节点上创建 PV:

kubectl apply -f https://k8s.io/examples/pods/storage/pv-volume.yaml

3.创建永久卷声明并将其绑定到永久卷
创建需要 PV 的 PVC,但要符合以下条件以匹配您之前创建的 PV:

  • 3 GB 或以上的存储容量
  • 启用读/写访问
k8s pvc 2

运行以下命令以应用 PVC:

kubectl apply -f https://k8s.io/examples/pods/storage/pv-claim.yaml

当您创建持久卷声明时,Kubernetes 控制平面会找到正确的 PV。如果找到,它会将 PVC 绑定到 PV。

通过运行以下命令检查先前创建的 PV 的状态:

kubectl get pv task-pv-volume

如果绑定成功,输出应如下所示:

k8s pvc 3

4.创建一个 pod 并挂载持久卷声明
最后,创建一个使用 PVC 的 pod。使用 NGINX 映像运行 pod,在 pod 规范的相关部分中指定您事先创建的 PVC:

k8s pvc 4

使用 bash 命令在您的 pod 中安装 curl,然后运行此命令:

curl http://localhost/

输出应显示第 1 步中创建的 index.html 文件的内容。它应显示新 pod 可以通过 PVC 访问 PV 中的数据。

Kubernetes PVC 错误:常见原因和解决方案 [C]

Kubernetes PVC 使用起来可能很复杂,导致可能难以诊断和解决的错误。PVC 错误通常与三大类相关 - PV 的创建问题、PV 的配置问题以及 PV 或 PVC 规格的变化。

与 PVC 相关的最常见错误是 FailedAttachVolume、FailedMount 和 CrashLoopBackOff。

FailedAttachVolume 和 FailedMount 错误

这两个错误表示 Pod 无法挂载 PV。不同之处在于,当卷无法从上一个节点分离时会发生 FailedAttachVolume,当卷无法在所需路径上挂载时会发生 FailedMount。

导致这两个错误的可能原因很多,包括新节点故障、连接到新节点的磁盘太多、网络分区错误以及前一个节点上的存储设备故障。

诊断问题

要诊断 FailedAttachVolume 和 FailedMount 等问题的原因,请运行命令 describe pod 并搜索 Events 部分以查找指示错误的消息。消息还应提供有关原因的信息。

解决问题

Kubernetes 无法自动解决 FailedAttachVolume 和 FailedMount 错误,因此需要手动处理问题:

  • 如果错误的原因是 Failure to Detach- 使用存储设备的接口手动分离卷。
  • 如果错误为"无法连接或挂载"请检查是否存在网络分区问题或网络路径不正确。如果不是这样,请尝试让 Kubernetes 在另一个节点上调度 pod,或在新节点上调查并解决问题。

CrashLoopBackOff 错误由于 PersistentVolumeClaim 引起

CrashLoopBackOff 表示 pod 崩溃、重新启动并重复崩溃。在某些情况下,此错误是由损坏的 PersistentVolumeClaims 导致的。

诊断问题

要确定 CrashLoopBackOff 错误是否由 PVC 引起,请检查上一个装载 PV 的容器实例的日志,检查部署日志,并在必要时在容器上运行 shell 以确定其崩溃原因。

解决问题

如果 CrashLoopBackOff 是 PVC 问题的结果,请尝试以下步骤:

  1. 将部署扩展到 0 个实例以启用调试。
  2. 使用此查询获取失败 PVC 的标识符:
    kubectl get deployment -o jsonpath="{.spec.template.spec.volumes[*].persistentVolumeClaim.claimName}" failed-deployment 
    
  3. 创建用于调试的新 pod 并使用此命令运行 shell:
    exec -it volume-debugger sh
    
  4. 确定当前装载在 /datadirectory 中的卷,并修复导致 pod 崩溃的问题。
  5. 退出 shell,删除调试 pod,并将部署缩放回所需的副本数量。

使用 Cloud Volumes ONTAP 优化 Kubernetes 存储

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 案例研究中容器化应用程序的挑战。

Drift chat loading