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

KubernetesBeginner
立即练习

简介

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

理解 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 集群中有效地管理存储资源。