介绍
Kubernetes 是用于在生产环境中托管容器的最流行的编排解决方案之一。该平台允许用户自动部署应用程序的多个实例,同时根据需求进行扩展和缩减。
但是,由于 Kubernetes pod 的易变性,需要使用全新的方法来解决存储卷问题。
Kubernetes持久卷是什么?本文解释了 Kubernetes 持久卷是什么以及它们为何如此重要。
什么是 Kubernetes 持久卷
Kubernetes 持久卷是分配给 Kubernetes 集群的用户配置的存储卷。持久卷的生命周期独立于任何使用它的 Pod。因此,持久卷非常适合你需要保留数据的用例,而不管 Kubernetes pod 的不可预测的生命周期如何。
如何理解Kubernetes持久卷?如果没有持久卷,就不可能像数据库一样维护服务。每当 Pod 被替换时,在该 Pod 的生命周期中获得的数据都会丢失。然而,由于持久卷,数据包含在一致的状态中。
注意:要充分理解 Kubernetes 持久卷的价值,最好先了解Kubernetes 架构的基本概念。
Kubernetes 卷的类型
要了解Kubernetes持久卷是什么,我们首先需要解释卷类型有何不同。你可以在 Kubernetes pod 中使用不同类型的卷:
- 节点本地内存(
emptyDir
和hostPath
) - 云卷(例如
awsElasticBlockStore
、gcePersistentDisk
、和azureDiskVolume
) - 文件共享卷,例如网络文件系统(
nfs
) - 分布式文件系统(例如
cephfs
,rbd
和)glusterfs
- 特殊类型的卷,例如
PersistentVolumeClaim
,secret
和gitRepo
两个emptyDir
和hostPath
附接到荚,无论是存储在RAM或在一个驱动器上的永久存储器。由于它们依赖于 pod,只要 pod 正在运行,它们的内容就可用。如果它下降,数据就会丢失。
对于云卷、nfs
和PersistentVolumeClaim
,卷是独立的并放置在 pod 之外。尽管它们本质上都是为保存数据而设计的,但云卷 的处理难度要大得多。要将 pod 连接到提供者,用户必须知道许多存储细节。
网络文件系统和持久卷更加实用。事实上,这两种卷类型的工作原理相同。
NFS允许你通过yaml文件连接到卷。如果没有 pod,卷的内容将被卸载但仍然可用。但是,即使对于 NFS 设置,你也需要发送持久卷声明 (PVC)请求。
因此,持久卷声明是 Kubernetes 中持久卷的核心解决方案。
什么是持久卷声明
如何理解Kubernetes持久卷?持久卷声明是通过一系列抽象连接到后端存储卷的对象。他们请求你的部署所需的存储资源。
主要优点是 PVC 对用户更加友好,允许开发人员使用它们而无需了解他们所连接的云环境的太多细节。管理员在 PVC 中列出了完整的声明详细信息,但 pod 本身只需要一个链接即可访问它。
因此,使用持久卷的 Pod 在它和存储之间还包括许多抽象层。
使用持久卷
Kubernetes持久卷是什么?要将 pod 与持久卷绑定,它需要包含卷挂载和持久卷声明 (PVC)。这些声明允许用户将持久卷挂载到 pod 中,而无需知道云环境的详细信息。
注意:你不能将两个声明绑定到一个 Pod 内的同一个持久卷。但是,你可以在两个不同的 pod 实例中使用相同的声明,并将它们连接到同一个持久卷。
在持久卷声明中,用户指定他们希望存储有多大、选择器、指向适当的 PV 以及存储类。存储类是指配置的类型,无论是静态的还是动态的。
静态配置是管理员利用现有存储设备并将其提供给集群用户的一项功能。集群管理员创建了几个可供使用且存在于 Kubernetes API 中的持久卷。
当没有任何静态持久卷与 PVC 匹配时,就会发生动态供应。在这种情况下,供应基于由管理员创建和配置的存储类。
持久卷的生命周期
删除 PVC 后,即释放其声明的 PV。根据回收策略集,卷将被保留、回收或删除。
- 如果你将回收策略设置为retain,即使从声明中释放,存储中的卷也会保留。
- 或者,你可以回收该卷,这会删除其中的内容并使其可用于其他 PVC。
- 将回收策略配置为在与 PVC 断开连接后删除意味着卷和存储被完全删除。
如何理解Kubernetes持久卷:如何创建持久卷
1. 要创建持久卷,首先在你选择的编辑器中创建一个.yaml文件。在本例中,我们将文件命名为example-pv.yaml并使用 nano 编辑器对其进行编辑:
nano example-pv.yaml
2. 在文件中添加以下内容:
apiVersion: v1
kind: PersistentVolume
metadata:
name: [pv_name]
spec:
capacity:
storage: 10Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
mountPath: [path of where the volume is accessible from within the container]
volumeID: [your_volume_id]
3.更换的规格name
,storage
,mountpath
,和volumeID
与你的尊重价值观。
4. 保存并退出文件。
5. 然后,使用以下命令和你在上一步中创建的 .yaml 文件的名称部署持久卷:
kubectl create -f example-pv.yaml
注意:部署持久卷后,你可以通过运行kubectl 命令来查看它:kubectl get pv
。
如何创建持久卷声明 ?
与 PV 一样,你使用包含以下内容的.yaml文件创建 PVC :
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: [pvc_name]
spec:
storageClassName: manual
selector:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
添加内容后,保存并退出文件。
注:要看到持续的体积要求使用kubectl命令:kubectl get pvc
。
设置并配置持久卷和持久卷声明后,你可以在所需的 pod 中指定 PVC。
结论
Kubernetes持久卷是什么?本文解释了持久卷是什么以及为什么要使用它们而不是传统的容器卷。选择其中之一取决于你的开发操作的需要。
此外,它还展示了如何部署持久卷和创建相应卷声明的示例。
接下来,我们建议考虑优化 Kubernetes集群的容器,以确保更快、更高效的开发。