searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

云原生本地磁盘管理

2023-07-25 02:24:58
89
0

LocalPV:Kubernetes直接使用宿主机的本地磁盘目录 ,来持久化存储容器的数据。它的读写性能相比于大多数远程存储来说,要好得多,尤其是SSD盘。所以在一些分布式存储、分布式应用中,有广泛地应用。

本文介绍三种创建LocalPV地方式:

  1. 手动LocalPV
  2. 使用LocalPath-Provisioner创建LocalPV
  3. 使用Open-Local 创建LocalPV

 

手动创建PV

创建LocalPV,首先需要对可用的磁盘进行格式化,然后挂载到一个文件目录上。如果没有可用的磁盘,可以只是测试使用,可以简单一些目录进行模拟。节点上的磁盘和目录初始化完毕后,通过下面的操作创建LocalPV:

  1. 创建StorageClass,并设定为延迟绑定
    kind: StorageClass
    apiVersion: storage.k8s.io/v1
    metadata:
      name: local-storage
    provisioner: kubernetes.io/no-provisioner
    volumeBindingMode: WaitForFirstConsumer    #延迟绑定
  2. 创建PV 
    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: pv-name
    spec:
      capacity:
        storage: 5Gi
      volumeMode: Filesystem
      accessModes:
      - ReadWriteOnce
      persistentVolumeReclaimPolicy: Delete
      storageClassName: local-storage   #步骤1创建的StorageClass名
      local:
        path: /mnt/disk1        #块设备挂载的目录
      nodeAffinity:
        required:
          nodeSelectorTerms:
          - matchExpressions:
            - key: kubernetes.io/hostname
              operator: In
              values:
              - node01                    #PV所在的节点     
  3. 创建PVC
    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: localpv-claim
    spec:
      accessModes:
      - ReadWriteOnce
      resources:
        requests:
          storage: 5Gi
      storageClassName: local-storage

手动创建PV不需要额外的组件,但是需要系统管理员人工管理PV,包括挂载的目录、节点,以及创建/扩容/删除的管理。

LocalPath-Provisioner创建LocalPV

LocalPath-Provisioner可以利用hostpath 或者本地卷动态地创建PV。但是它不支持PV地扩容,也不知道PV层地调度。

  1. 部署LocalPath-Provisioner
    kubectl apply -f https://raw.githubusercontent.com/rancher/local-path-provisioner/master/deploy/local-path-storage.yaml
  2. 配置创建PV地目录,config.json配置每个节点创建PV地目录。
    kind: ConfigMap
    apiVersion: v1
    metadata:
      name: local-path-config
      namespace: local-path-storage
    data:
      config.json: |-
            {
                    "nodePathMap":[
                    {
                            "node":"DEFAULT_PATH_FOR_NON_LISTED_NODES",
                            "paths":["/opt/local-path-provisioner"]
                    },
                    {
                            "node":"yasker-lp-dev1",
                            "paths":["/opt/local-path-provisioner", "/data1"]
                    }
                    ]
            }
      setup: |-
            #!/bin/sh
            set -eu
            mkdir -m 0777 -p "$VOL_DIR"
      teardown: |-
            #!/bin/sh
            set -eu
            rm -rf "$VOL_DIR"
      helperPod.yaml: |-
            apiVersion: v1
            kind: Pod
            metadata:
              name: helper-pod
            spec:
              containers:
              - name: helper-pod
                image: busybox
    
  3. 创建StorageClass,并指定provisioner。创建PVC或者PV时指定local-path,LocalPath-Provisioner便能动态创建PV
    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: local-path
    provisioner: cluster.local/local-path-provisioner   #指定provisioner
    volumeBindingMode: WaitForFirstConsumer
    reclaimPolicy: Delete

虽然LocalPath-Provisioner可以解决人工创建/删除PV地问题,但是目前不支持PV扩容、PV地调度、共享磁盘、PV地监控等。

Open-Local管理本地PV

Open-local 是阿里巴巴开源,由多个组件构成的本地磁盘管理系统,目标是解决当前kubernetes本地存储能力缺失问题。不但提供了动态创建PV地能力,而且提供根据更加完备地系统管理本地磁盘,如pv地调度、支持逻辑卷(LVM)切分磁盘、监控指标采集等

Open-Local包含四大类组件:

  • Scheduler-Extender: 作为 Kubernetes Scheduler 的扩展组件,通过 Extender 方式实现,新增本地存储调度算法
  • CSI: 按照 CSI(Container Storage Interface) 标准实现本地磁盘管理能力
  • Agent: 运行在集群中的每个节点,根据配置清单初始化存储设备,并通过上报集群中本地存储设备信息以供 Scheduler-Extender 决策调度
  • Controller: 获取集群存储初始化配置,并向运行在各个节点的 Agent 下发详细的配置清单

Open-local 支持两种类型本地磁盘的使用:

  • 逻辑卷管理(Logic Volume Manage, LVM): 它是一个共享磁盘的管理方式,通过 LVM 方式让多个pod可以共享一块或者多块存储设备。当在kubernetes 中创建 PV 资源时,Open-local会从对应 VolumeGroup 中创建 LogicalVolume 来代表该PV。可以通过StorageClass 设置为open-local-lvm的方式,创建LVM的volume。
  • 块设备管理(Device): 它是一个种独占盘的管理方式,即一个 PV 一个块设备。这里块设备可以是一整块磁盘,也可以是一个分区。可以通过StorageClass设置为open-local-device-hdd或者open-local-device-ssd的方式创建独占盘的volume。

不同类型 PV 所支持的存储能力也不同。针对于分布式存储,数据存储可以选择独占盘类型,而在日志、元数据可以选择共享盘类型。

类型 动态分配 PV扩容 PV快照 原生块设备 IO限流 临时卷 监控数据
共享盘类型 支持 支持 支持 支持 支持 支持 支持
独占盘类型 支持 不支持 不支持 支持 不支持 不支持 支持

 

0条评论
0 / 1000
s****n
4文章数
0粉丝数
s****n
4 文章 | 0 粉丝
原创

云原生本地磁盘管理

2023-07-25 02:24:58
89
0

LocalPV:Kubernetes直接使用宿主机的本地磁盘目录 ,来持久化存储容器的数据。它的读写性能相比于大多数远程存储来说,要好得多,尤其是SSD盘。所以在一些分布式存储、分布式应用中,有广泛地应用。

本文介绍三种创建LocalPV地方式:

  1. 手动LocalPV
  2. 使用LocalPath-Provisioner创建LocalPV
  3. 使用Open-Local 创建LocalPV

 

手动创建PV

创建LocalPV,首先需要对可用的磁盘进行格式化,然后挂载到一个文件目录上。如果没有可用的磁盘,可以只是测试使用,可以简单一些目录进行模拟。节点上的磁盘和目录初始化完毕后,通过下面的操作创建LocalPV:

  1. 创建StorageClass,并设定为延迟绑定
    kind: StorageClass
    apiVersion: storage.k8s.io/v1
    metadata:
      name: local-storage
    provisioner: kubernetes.io/no-provisioner
    volumeBindingMode: WaitForFirstConsumer    #延迟绑定
  2. 创建PV 
    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: pv-name
    spec:
      capacity:
        storage: 5Gi
      volumeMode: Filesystem
      accessModes:
      - ReadWriteOnce
      persistentVolumeReclaimPolicy: Delete
      storageClassName: local-storage   #步骤1创建的StorageClass名
      local:
        path: /mnt/disk1        #块设备挂载的目录
      nodeAffinity:
        required:
          nodeSelectorTerms:
          - matchExpressions:
            - key: kubernetes.io/hostname
              operator: In
              values:
              - node01                    #PV所在的节点     
  3. 创建PVC
    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: localpv-claim
    spec:
      accessModes:
      - ReadWriteOnce
      resources:
        requests:
          storage: 5Gi
      storageClassName: local-storage

手动创建PV不需要额外的组件,但是需要系统管理员人工管理PV,包括挂载的目录、节点,以及创建/扩容/删除的管理。

LocalPath-Provisioner创建LocalPV

LocalPath-Provisioner可以利用hostpath 或者本地卷动态地创建PV。但是它不支持PV地扩容,也不知道PV层地调度。

  1. 部署LocalPath-Provisioner
    kubectl apply -f https://raw.githubusercontent.com/rancher/local-path-provisioner/master/deploy/local-path-storage.yaml
  2. 配置创建PV地目录,config.json配置每个节点创建PV地目录。
    kind: ConfigMap
    apiVersion: v1
    metadata:
      name: local-path-config
      namespace: local-path-storage
    data:
      config.json: |-
            {
                    "nodePathMap":[
                    {
                            "node":"DEFAULT_PATH_FOR_NON_LISTED_NODES",
                            "paths":["/opt/local-path-provisioner"]
                    },
                    {
                            "node":"yasker-lp-dev1",
                            "paths":["/opt/local-path-provisioner", "/data1"]
                    }
                    ]
            }
      setup: |-
            #!/bin/sh
            set -eu
            mkdir -m 0777 -p "$VOL_DIR"
      teardown: |-
            #!/bin/sh
            set -eu
            rm -rf "$VOL_DIR"
      helperPod.yaml: |-
            apiVersion: v1
            kind: Pod
            metadata:
              name: helper-pod
            spec:
              containers:
              - name: helper-pod
                image: busybox
    
  3. 创建StorageClass,并指定provisioner。创建PVC或者PV时指定local-path,LocalPath-Provisioner便能动态创建PV
    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: local-path
    provisioner: cluster.local/local-path-provisioner   #指定provisioner
    volumeBindingMode: WaitForFirstConsumer
    reclaimPolicy: Delete

虽然LocalPath-Provisioner可以解决人工创建/删除PV地问题,但是目前不支持PV扩容、PV地调度、共享磁盘、PV地监控等。

Open-Local管理本地PV

Open-local 是阿里巴巴开源,由多个组件构成的本地磁盘管理系统,目标是解决当前kubernetes本地存储能力缺失问题。不但提供了动态创建PV地能力,而且提供根据更加完备地系统管理本地磁盘,如pv地调度、支持逻辑卷(LVM)切分磁盘、监控指标采集等

Open-Local包含四大类组件:

  • Scheduler-Extender: 作为 Kubernetes Scheduler 的扩展组件,通过 Extender 方式实现,新增本地存储调度算法
  • CSI: 按照 CSI(Container Storage Interface) 标准实现本地磁盘管理能力
  • Agent: 运行在集群中的每个节点,根据配置清单初始化存储设备,并通过上报集群中本地存储设备信息以供 Scheduler-Extender 决策调度
  • Controller: 获取集群存储初始化配置,并向运行在各个节点的 Agent 下发详细的配置清单

Open-local 支持两种类型本地磁盘的使用:

  • 逻辑卷管理(Logic Volume Manage, LVM): 它是一个共享磁盘的管理方式,通过 LVM 方式让多个pod可以共享一块或者多块存储设备。当在kubernetes 中创建 PV 资源时,Open-local会从对应 VolumeGroup 中创建 LogicalVolume 来代表该PV。可以通过StorageClass 设置为open-local-lvm的方式,创建LVM的volume。
  • 块设备管理(Device): 它是一个种独占盘的管理方式,即一个 PV 一个块设备。这里块设备可以是一整块磁盘,也可以是一个分区。可以通过StorageClass设置为open-local-device-hdd或者open-local-device-ssd的方式创建独占盘的volume。

不同类型 PV 所支持的存储能力也不同。针对于分布式存储,数据存储可以选择独占盘类型,而在日志、元数据可以选择共享盘类型。

类型 动态分配 PV扩容 PV快照 原生块设备 IO限流 临时卷 监控数据
共享盘类型 支持 支持 支持 支持 支持 支持 支持
独占盘类型 支持 不支持 不支持 支持 不支持 不支持 支持

 

文章来自个人专栏
文章 | 订阅
0条评论
0 / 1000
请输入你的评论
0
0