边缘本地存储

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

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

2. 创建Configmap

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

  1. apiVersion: v1
  2. kind: ConfigMap
  3. metadata:
  4. name: node-resource-topo
  5. namespace: kube-system
  6. data:
  7. volumegroup: |-
  8. volumegroup:
  9. - name: volumegroup1
  10. key: kubernetes.io/hostname
  11. operator: In
  12. value: cn-zhangjiakou.192.168.3.114
  13. topology:
  14. type: device
  15. devices:
  16. - /dev/vdb
  17. - /dev/vdc
  18. quotapath: |-
  19. quotapath:
  20. - name: /mnt/path1
  21. key: kubernetes.io/hostname
  22. operator: In
  23. value: cn-beijing.192.168.3.35
  24. topology:
  25. type: device
  26. options: prjquota
  27. fstype: ext4
  28. devices:
  29. - /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

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

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

创建 storageclass

  1. cat <<EOF | kubectl apply -f -
  2. apiVersion: storage.k8s.io/v1
  3. kind: StorageClass
  4. metadata:
  5. name: csi-local
  6. provisioner: localplugin.csi.alibabacloud.com
  7. parameters:
  8. volumeType: LVM
  9. vgName: volumegroup1
  10. fsType: ext4
  11. lvmType: "striping"
  12. reclaimPolicy: Delete
  13. volumeBindingMode: WaitForFirstConsumer
  14. allowVolumeExpansion: true
  15. EOF

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

创建PVC

  1. cat << EOF | kubectl apply -f -
  2. apiVersion: v1
  3. kind: PersistentVolumeClaim
  4. metadata:
  5. name: lvm-pvc
  6. annotations:
  7. volume.kubernetes.io/selected-node: cn-zhangjiakou.192.168.3.114
  8. spec:
  9. accessModes:
  10. - ReadWriteOnce
  11. resources:
  12. requests:
  13. storage: 2Gi
  14. storageClassName: csi-local
  15. EOF

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

创建应用

  1. cat << EOF | kubectl apply -f -
  2. apiVersion: apps/v1
  3. kind: Deployment
  4. metadata:
  5. name: deployment-lvm
  6. labels:
  7. app: nginx
  8. spec:
  9. selector:
  10. matchLabels:
  11. app: nginx
  12. template:
  13. metadata:
  14. labels:
  15. app: nginx
  16. spec:
  17. containers:
  18. - name: nginx
  19. image: nginx:1.7.9
  20. volumeMounts:
  21. - name: lvm-pvc
  22. mountPath: "/data"
  23. volumes:
  24. - name: lvm-pvc
  25. persistentVolumeClaim:
  26. claimName: lvm-pvc
  27. EOF

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