local volume简介
参考:https://kubernetes.io/docs/concepts/storage/volumes/#local
local volume指的是所挂载的某个本地存储设备,例如磁盘、分区或者目录。local volume只能用作静态创建的持久卷。尚不支持动态配置。
相比hostPath volumes,local volumes可以以持久和可移植的方式使用,而无需手动将 Pod 调度到节点,因为系统通过查看 PersistentVolume 所属节点的亲和性配置,就能了解卷的节点约束。
然而local volume仍然取决于底层节点的可用性,并不适合所有应用程序。 如果节点变得不健康,那么local volume也将变得不可访问,并且使用它的 Pod 将不能运行。 使用local volume的应用程序必须能够容忍这种可用性的降低,以及因底层磁盘的耐用性特征而带来的潜在的数据丢失风险。
下面是一个使用local volume和nodeAffinity的持久卷示例,需要修改nodeAffinity中的example-node为指定节点:
$ cat local_pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: example-pv
spec:
capacity:
storage: 10Gi
# volumeMode field requires BlockVolume Alpha feature gate to be enabled.
volumeMode: Filesystem
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Delete
storageClassName: local-storage
local:
path: /mnt/disks/ssd1
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: In
values:
- example-node
创建storage class
参考:https://kubernetes.io/docs/concepts/storage/storage-classes/#local
$ cat local_sc.yaml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: local-storage
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsumer
创建pod和pvc绑定到pv
$ cat local_pod.yaml
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: local-test
spec:
serviceName: "local-service"
replicas: 1
selector:
matchLabels:
app: local-test
template:
metadata:
labels:
app: local-test
spec:
containers:
- name: test-container
image: busybox
command:
- "/bin/sh"
args:
- "-c"
- "sleep 100000"
volumeMounts:
- name: local-vol
mountPath: /usr/test-pod
volumeClaimTemplates:
- metadata:
name: local-vol
spec:
accessModes: [ "ReadWriteOnce" ]
storageClassName: "local-storage"
resources:
requests:
storage: 2Gi
使用local volume时,需要使用 PersistentVolume 对象的nodeAffinity字段。 它使 Kubernetes 调度器能够将使用local volume的 Pod 正确地调度到合适的节点。
现在可以将 PersistentVolume 对象的volumeMode字段设置为 “Block”(而不是默认值 “Filesystem”),以将local volume作为原始块设备暴露出来。volumeMode字段需要启用 Alpha 功能的BlockVolume。
当使用local volume时,建议创建一个 StorageClass,将volumeBindingMode设置为WaitForFirstConsumer。 延迟卷绑定操作可以确保 Kubernetes 在为 PersistentVolumeClaim 作出绑定决策时,会评估 Pod 可能具有的其他节点约束,例如:如节点资源需求、节点选择器、Pod 亲和性和 Pod 反亲和性。
可以在 Kubernetes 之外单独运行静态驱动以改进对 local volume的生命周期管理。 请注意,此驱动不支持动态配置。 有关如何运行外部local卷驱动的示例,请参考local 卷驱动用户指南。
参考:https://github.com/kubernetes-sigs/sig-storage-local-static-provisioner
注意:如果不使用外部静态驱动来管理卷的生命周期,则用户需要手动清理和删除 local 类型的持久卷。
参考:
https://www.cnblogs.com/davygeek/p/10944208.html
https://kubernetes.io/blog/2019/04/04/kubernetes-1.14-local-persistent-volumes-ga/