Skip to main content
版本:v1.4

边缘本地存储

1. 确认节点上的本地存储资源

确认节点上已经存在的块设备和节点的对应关系。

2. 创建Configmap

在集群中创建ConfigMap, 这里展示一个相对通用的 Configmap 配置,在这个Configmap 配置中配置本地存储资源。详细说明请参见 文档

apiVersion: v1
kind: ConfigMap
metadata:
  name: node-resource-topo
  namespace: kube-system
data:
  volumegroup: |-
    volumegroup:
    - name: volumegroup1
      key: kubernetes.io/hostname
      operator: In
      value: cn-zhangjiakou.192.168.3.114
      topology:
        type: device
        devices:
        - /dev/vdb
        - /dev/vdc
  quotapath: |-
    quotapath:
    - name: /mnt/path1
      key: kubernetes.io/hostname
      operator: In
      value: cn-beijing.192.168.3.35
      topology:
        type: device
        options: prjquota
        fstype: ext4
        devices:
        - /dev/vdb

以上配置可以完成如下功能;

在集群中的 cn-zhangjiakou.192.168.3.114 节点上使用 /dev/vdb & /dev/vdc 这两个块设备创建一个 lvm volumegroup。这里的 devices 可以添加不存在的路径, 插件在节点上初始化的时候会自动忽略。 在集群中的 cn-beijing.192.168.3.35 节点上使用 /dev/vdb 这个块设备格式化成 prjquota 格式,并挂载到/mnt/path1 这个路径上,后续再这个路径下面创建的子目录都可以设定每个目录的最大quota,同样, 这里的 devices 里面可以填写不存在路径,组件会自动选择第一个存在的块设备完成格式化和绑定的操作

3. 安装 node-resource-manager

kubectl apply -f https://raw.githubusercontent.com/openyurtio/node-resource-manager/main/deploy/nrm.yaml

4. 在集群中部署应用(以lvm为例)

创建 storageclass

cat <<EOF | kubectl apply -f -
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
    name: csi-local
provisioner: localplugin.csi.alibabacloud.com
parameters:
    volumeType: LVM
    vgName: volumegroup1
    fsType: ext4
    lvmType: "striping"
reclaimPolicy: Delete
volumeBindingMode: WaitForFirstConsumer
allowVolumeExpansion: true
EOF

parameters.vgName为在node-resource-topo configmap中定义的VolumeGroup名称volumegroup1。

创建PVC

cat << EOF | kubectl apply -f -
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: lvm-pvc
  annotations:
    volume.kubernetes.io/selected-node: cn-zhangjiakou.192.168.3.114
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 2Gi
  storageClassName: csi-local
EOF

这里需要在 pvc 的 annotation 中指定存储所在的节点,

创建应用

cat << EOF | kubectl apply -f -
apiVersion: apps/v1
kind: Deployment
metadata:
  name: deployment-lvm
  labels:
    app: nginx
spec:
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.7.9
        volumeMounts:
          - name: lvm-pvc
            mountPath: "/data"
      volumes:
        - name: lvm-pvc
          persistentVolumeClaim:
            claimName: lvm-pvc
EOF

以上,我们就完成了本地存储的基本使用, Quotapath 模式基本相同,只需改造 StorageClass 即可。