kubernetes使用local volume

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/

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值