如何在 Kubernetes 中管理持久卷回收策略

KubernetesKubernetesBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

Kubernetes 持久卷(PV)是在 Kubernetes 集群中管理有状态应用程序的关键组件。本教程将指导你了解持久卷,管理其回收策略,并探索 Kubernetes 中的持久卷生命周期管理。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL kubernetes(("Kubernetes")) -.-> kubernetes/TroubleshootingandDebuggingCommandsGroup(["Troubleshooting and Debugging Commands"]) kubernetes(("Kubernetes")) -.-> kubernetes/BasicCommandsGroup(["Basic Commands"]) kubernetes(("Kubernetes")) -.-> kubernetes/AdvancedCommandsGroup(["Advanced Commands"]) kubernetes/BasicCommandsGroup -.-> kubernetes/get("Get") kubernetes/BasicCommandsGroup -.-> kubernetes/create("Create") kubernetes/BasicCommandsGroup -.-> kubernetes/edit("Edit") kubernetes/AdvancedCommandsGroup -.-> kubernetes/apply("Apply") kubernetes/TroubleshootingandDebuggingCommandsGroup -.-> kubernetes/describe("Describe") subgraph Lab Skills kubernetes/get -.-> lab-417511{{"如何在 Kubernetes 中管理持久卷回收策略"}} kubernetes/create -.-> lab-417511{{"如何在 Kubernetes 中管理持久卷回收策略"}} kubernetes/edit -.-> lab-417511{{"如何在 Kubernetes 中管理持久卷回收策略"}} kubernetes/apply -.-> lab-417511{{"如何在 Kubernetes 中管理持久卷回收策略"}} kubernetes/describe -.-> lab-417511{{"如何在 Kubernetes 中管理持久卷回收策略"}} end

理解 Kubernetes 持久卷

Kubernetes 持久卷(PV)是 Kubernetes 生态系统中的一个关键组件,它提供了一种从底层基础设施抽象存储并使其可供 Pod 使用的方式。持久卷是一种集群级资源,独立于使用它们的 Pod,可以通过多种方式进行供应,例如通过云提供商、网络存储系统或本地磁盘。

持久卷的基本概念是,它代表由管理员供应或使用存储类动态供应的一块存储。然后,Pod 可以通过创建持久卷声明(PVC)来请求存储,持久卷声明是对存储资源的请求。然后,Kubernetes 调度器会将 PVC 与可用的 PV 进行匹配,Pod 就可以使用该存储了。

graph LR A[持久卷] --> B[持久卷声明] B --> C[Pod]

以下是在 Kubernetes 集群中创建持久卷和持久卷声明的示例:

## 持久卷
apiVersion: v1
kind: 持久卷
metadata:
  name: my-pv
spec:
  capacity:
    storage: 5Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: /data/my-pv

---
## 持久卷声明
apiVersion: v1
kind: 持久卷声明
metadata:
  name: my-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 5Gi

在这个示例中,我们创建了一个容量为 5 GiB 且访问模式为 ReadWriteOnce 的持久卷,这意味着该卷可以由单个节点以读写方式挂载。该持久卷由节点上的主机路径支持。然后,我们创建了一个持久卷声明,请求一个具有相同访问模式的 5 GiB 卷。

当创建一个引用该持久卷声明的 Pod 时,Kubernetes 会自动将持久卷绑定到持久卷声明,然后 Pod 就可以使用该存储了。

管理持久卷回收策略

Kubernetes 持久卷具有不同的回收策略,这些策略决定了当持久卷声明被删除时底层存储会发生什么。可用的三种回收策略是:

  1. 保留(Retain):当持久卷声明被删除时,持久卷不会被删除。必须手动回收底层存储。
  2. 删除(Delete):当持久卷声明被删除时,持久卷和底层存储都会被删除。
  3. 回收(Recycle):当持久卷声明被删除时,持久卷将被回收(即数据将被擦除),并且该持久卷可以被重新使用。

回收策略在持久卷级别设置,可以在持久卷的 spec.persistentVolumeReclaimPolicy 字段中指定。

以下是一个具有 “保留” 回收策略的持久卷示例:

apiVersion: v1
kind: 持久卷
metadata:
  name: my-pv
spec:
  capacity:
    storage: 5Gi
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  hostPath:
    path: /data/my-pv

在这个示例中,当使用此持久卷的持久卷声明被删除时,持久卷不会被删除,并且必须手动回收底层存储。

回收策略在各种场景中都可能很重要,例如当你想将底层存储重新用于新的持久卷声明时,或者当你需要确保数据不会被意外删除时。

持久卷生命周期管理

Kubernetes 中持久卷的生命周期包含几个阶段,包括供应、绑定、使用和回收。了解这些阶段对于在 Kubernetes 集群中有效管理存储资源至关重要。

供应

持久卷可以通过两种方式进行供应:

  1. 静态供应:持久卷由集群管理员手动创建并在 Kubernetes 集群中定义。
  2. 动态供应:当创建持久卷声明时,持久卷由存储类自动创建。
graph LR A[静态供应] --> B[持久卷] B --> C[持久卷声明] C --> D[Pod] E[动态供应] --> F[存储类] --> G[持久卷] G --> H[持久卷声明] H --> I[Pod]

绑定

创建持久卷声明时,Kubernetes 会尝试找到匹配的持久卷。如果找到匹配项,持久卷声明和持久卷将被绑定,并且持久卷声明可供 Pod 使用。

使用

一旦持久卷声明绑定到持久卷,Pod 就可以通过将持久卷声明挂载到 Pod 规范中的卷来使用存储。

回收

当持久卷声明被删除时,持久卷的回收策略决定底层存储会发生什么。如前所述,回收策略可以设置为 “保留”、“删除” 或 “回收”。

通过了解持久卷生命周期,你可以在 Kubernetes 集群中有效管理存储资源,并确保 Pod 拥有所需的存储。

总结

在本教程中,你学习了 Kubernetes 持久卷,包括如何创建和管理它们。你探索了持久卷可用的不同回收策略,例如保留(Retain)、回收(Recycle)和删除(Delete),以及如何根据你的存储需求选择使用每种策略。最后,你了解了持久卷的生命周期以及如何在 Kubernetes 集群中有效地管理存储资源。