Skip to main content
版本:Next

边缘本地存储

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 即可。