如何供应和配置 Kubernetes 持久卷

KubernetesKubernetesBeginner
立即练习

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

简介

Kubernetes 作为领先的容器编排平台,提供了一种强大的存储解决方案,称为持久卷(Persistent Volumes,PV)。本教程将指导你了解、供应和管理 Kubernetes 环境中的持久卷,使你能够确保容器化应用程序的数据持久化无缝进行。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL kubernetes(("Kubernetes")) -.-> kubernetes/ConfigurationandVersioningGroup(["Configuration and Versioning"]) kubernetes(("Kubernetes")) -.-> kubernetes/BasicCommandsGroup(["Basic Commands"]) kubernetes/BasicCommandsGroup -.-> kubernetes/get("Get") kubernetes/BasicCommandsGroup -.-> kubernetes/create("Create") kubernetes/BasicCommandsGroup -.-> kubernetes/delete("Delete") kubernetes/BasicCommandsGroup -.-> kubernetes/edit("Edit") kubernetes/ConfigurationandVersioningGroup -.-> kubernetes/config("Config") subgraph Lab Skills kubernetes/get -.-> lab-417502{{"如何供应和配置 Kubernetes 持久卷"}} kubernetes/create -.-> lab-417502{{"如何供应和配置 Kubernetes 持久卷"}} kubernetes/delete -.-> lab-417502{{"如何供应和配置 Kubernetes 持久卷"}} kubernetes/edit -.-> lab-417502{{"如何供应和配置 Kubernetes 持久卷"}} kubernetes/config -.-> lab-417502{{"如何供应和配置 Kubernetes 持久卷"}} end

理解 Kubernetes 持久卷

Kubernetes 作为一个强大的容器编排平台,提供了一种强大的存储解决方案,称为持久卷(Persistent Volumes,PV)。持久卷提供了一种从应用程序中抽象存储实现细节的方法,从而在容器化环境中实现无缝的数据持久化。

在 Kubernetes 中,持久卷是一种集群级资源,代表集群中的一块存储,例如本地磁盘、NFS 共享或云提供的存储服务。这些持久卷可以动态供应或手动创建,并且它们独立于使用它们的 Pod 的生命周期。

Kubernetes 中持久卷的关键概念是存储提供者和应用程序之间的关注点分离。存储提供者负责创建和管理底层存储,而应用程序只需请求持久卷声明(Persistent Volume Claim,PVC)来访问存储。

graph LR A[应用程序] --> B[持久卷声明] B --> C[持久卷] C --> D[存储提供者]

持久卷可用于各种场景,例如:

  1. 有状态应用程序:持久卷对于运行有状态应用程序(如数据库、消息队列和内容管理系统)至关重要,在这些应用中数据持久化至关重要。

  2. 共享存储:持久卷可用于为多个 Pod 提供共享存储,使它们能够访问和共享相同的数据。

  3. 备份和恢复:持久卷可用作备份和恢复操作的源,确保应用程序数据的安全性和可恢复性。

  4. 可移植性:持久卷提供了一定程度的抽象,使应用程序能够在不同的 Kubernetes 集群之间移植,因为底层存储实现与应用程序解耦。

要在你的 Kubernetes 应用程序中使用持久卷,你需要理解持久卷声明(PVC)的概念以及可用的不同类型的持久卷,例如本地存储、网络附加存储(NAS)和云提供的存储服务。在下一节中,我们将更深入地探讨持久卷的供应和配置。

供应和配置持久卷

在 Kubernetes 中供应和配置持久卷涉及几个关键步骤和概念。让我们详细探讨一下:

持久卷供应

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

  1. 静态供应:在这种方法中,集群管理员手动创建具有特定配置的持久卷,例如存储类型、大小和访问模式。然后,这些持久卷可以被 Pod 通过持久卷声明来申领。
apiVersion: v1
kind: PersistentVolume
metadata:
  name: my-pv
spec:
  capacity:
    storage: 5Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: /data/my-pv
  1. 动态供应:在这种方法中,当创建持久卷声明时,Kubernetes 使用存储类来按需自动供应持久卷。存储类指定存储提供者的详细信息,例如存储类型、供应者以及供应所需的参数。
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: standard
provisioner: kubernetes.io/gce-pd
parameters:
  type: pd-standard
  fsType: ext4

持久卷配置

一旦供应了持久卷,就可以使用各种属性对其进行配置,例如:

  • 容量:持久卷的可用存储容量。
  • 访问模式:定义如何访问持久卷的访问模式,例如读写一次(ReadWriteOnce)、只读多次(ReadOnlyMany)或读写多次(ReadWriteMany)。
  • 回收策略:确定当关联的持久卷声明被删除时对持久卷执行何种操作的策略,例如保留(Retain)、回收(Recycle)或删除(Delete)。
  • 挂载选项:挂载持久卷时可以使用的其他选项。

这些配置在持久卷的 YAML 清单中指定,如前面的示例所示。

通过了解持久卷的供应和配置,你可以有效地管理 Kubernetes 应用程序的存储需求,确保数据的持久性和可用性。

部署和管理持久卷

既然我们已经对持久卷以及如何供应和配置它们有了扎实的了解,那么让我们来探讨一下在你的 Kubernetes 集群中部署和管理持久卷的过程。

部署持久卷

要在你的 Kubernetes 集群中部署持久卷,你可以使用以下步骤:

  1. 创建持久卷:如果你使用的是静态供应,你可以通过在 YAML 文件中定义持久卷资源并将其应用到你的集群来创建持久卷。
apiVersion: v1
kind: PersistentVolume
metadata:
  name: my-pv
spec:
  capacity:
    storage: 5Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: /data/my-pv
  1. 创建持久卷声明:接下来,你需要创建一个持久卷声明(PVC),该声明从持久卷请求存储。PVC 将根据指定的标准绑定到合适的持久卷。
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: my-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 5Gi
  1. 挂载持久卷声明:最后,你可以在应用程序的 Pod 规范中挂载持久卷声明,使你的应用程序能够访问持久存储。
apiVersion: v1
kind: Pod
metadata:
  name: my-app
spec:
  containers:
    - name: my-app
      image: my-app:v1
      volumeMounts:
        - name: data
          mountPath: /data
  volumes:
    - name: data
      persistentVolumeClaim:
        claimName: my-pvc

管理持久卷

Kubernetes 提供了各种机制来管理持久卷的生命周期,包括:

  1. 持久卷回收策略:此策略确定当关联的持久卷声明被删除时对持久卷会发生什么。可用的选项有保留(Retain)、回收(Recycle)和删除(Delete)。

  2. 卷扩展:Kubernetes 支持扩展持久卷的容量,使你能够适应不断增长的存储需求。

  3. 备份和恢复:你可以使用像 Velero 或 Restic 这样的工具来创建持久卷的备份,并根据需要恢复它们,确保数据保护和恢复。

  4. 监控和警报:Kubernetes 提供了内置的监控和警报功能,可以帮助你跟踪持久卷的使用情况和健康状况,实现主动管理。

通过了解持久卷的部署和管理,你可以有效地将持久存储集成到你的 Kubernetes 应用程序中,确保数据的可用性和可靠性。

总结

在本教程中,你已经了解了 Kubernetes 中持久卷的关键概念,包括它们如何提供一种从应用程序中抽象存储实现细节的方法。你还探讨了供应和配置持久卷的过程,以及在 Kubernetes 集群中部署和管理它们的方法。通过利用持久卷,你可以确保有状态应用程序的数据持久性,实现共享存储,并确保应用程序在不同的 Kubernetes 环境之间的可移植性。