Kubernetes K8s 存储动态挂载配置详解
介绍
在 Kubernetes 中,存储动态挂载(Dynamic Provisioning)是管理 Pod 持久化存储的重要方式,它允许通过 PVC 的声明自动创建和删除存储。使用存储动态挂载的好处在于可以更加有效地管理存储资源,以及提高可用性和可伸缩性。
动态存储类
动态存储类(Dynamic Storage Class)是定义动态存储的 Kubernetes 资源对象。它定义了如何动态地 provision 存储、如何通过 PVC 使用存储、以及如何将存储删除。
下面是一个动态存储类的示例:
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: fast
provisioner: kubernetes.io/aws-ebs # 确定使用哪个存储 provider 插件
parameters:
type: gp2
reclaimPolicy: Retain
mountOptions:
- debug
volumeBindingMode: Immediate
这个例子使用 AWS EBS 存储插件 kubernetes.io/aws-ebs
,或者称为 aws-ebs
provisioner。它指定了存储类型为 gp2
(General Purpose SSD),指定了存储回收策略为 Retain
,这意味着 volume 在 PVC 删除后将保留不被删除,可以作为其他 PVC 的依赖使用;mountOptions 指定了将 debug
选项挂载到卷上,volumeBindingMode 指定了在 Persistent Volume
自动配对时使用Immediate
模式。
参数
存储类的参数取决于所选存储 provider 插件。可以查看特定插件的文档来了解它们支持的参数和格式。
动态 PVC
动态 PVC(Dynamic Persistent Volume Claim)是声明动态存储的 Kubernetes 资源对象。可以将它们视为 Pod 持久化存储的请求。动态 PVC 可以取消,这样就会释放相应的 volume。
下面是一个 PVC 的例子:
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: example-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
volumeMode: Filesystem
storageClassName: fast
这个例子创建一个名为 example-pvc
的 PVC,请求 1GB 存储空间,并指定了存储类为 fast
。你可以根据需要添加其他参数。
如果所选存储类支持动态 provision,则创建 PVC 时将开始 dynamic provision 过程,并且会自动创建并绑定一个新 volume。
示例1:使用 GCE PD 存储类
如果你要使用 GCE PD 存储类,请确保已经创建了 gce-pd
provisioner。你可以通过 Google Cloud Console 或 gcloud 命令行进行安装。
创建一个存储类:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: slow
provisioner: kubernetes.io/gce-pd
parameters:
type: pd-standard
zone: us-central1-a
这个存储类使用 kubernetes.io/gce-pd
provisioner,其 type
参数指定为 pd-standard
,在 us-central1-a
区域启用。它还可以添加其他参数,例如存储卷大小。
创建一个 PVC:
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: test-dynamic-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 100Gi
storageClassName: slow
这个 PVC 使用 slow
存储类,并请求 100GB 存储空间。
示例2:使用 GlusterFS 存储类
如果你使用的是 GlusterFS,那么你需要部署 GlusterFS 服务器,并创建一个 GlusterFS 存储类。
首先,创建 GlusterFS 存储类:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: glusterfs-storage
provisioner: kubernetes.io/glusterfs
parameters:
resturl: "http://glusterfs-rest-server:8080"
volumetype: "replicate:3"
volname: "test"
这个示例存储类定义了使用 GlusterFS Kubernetes 插件,可以在 GlusterFS 服务器上动态 provision storage。它还指定了 GlusterFS 卷的参数,包括 REST URL、卷类型和卷名称。
接下来,创建一个 PVC:
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: glusterfs-pvc
annotations:
volume.beta.kubernetes.io/storage-class: glusterfs-storage
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 100Gi
这个 PVC 指定了 glusterfs-storage
存储类,并请求 100GB 存储空间。还使用了新的注释属性 volume.beta.kubernetes.io/storage-class
来指定存储类。
结论
本文介绍了使用存储动态挂载在 Kubernetes 中管理持久化存储的方法。上述两个示例分别展示了如何使用 GCE PD 和 GlusterFS 存储类来创建 PVC。使用存储动态挂载可以大大提高运维效率和可伸缩性。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:kubernetes k8s 存储动态挂载配置详解 - Python技术站