边缘本地存储
1. 确认节点上的本地存储资源
确认节点上已经存在的块设备和节点的对应关系。
2. 创建Configmap
在集群中创建ConfigMap, 这里展示一个相对通用的 Configmap 配置,在这个Configmap 配置中配置本地存储资源。详细说明请参见 文档
apiVersion: v1kind: ConfigMapmetadata:name: node-resource-toponamespace: kube-systemdata:volumegroup: |-volumegroup:- name: volumegroup1key: kubernetes.io/hostnameoperator: Invalue: cn-zhangjiakou.192.168.3.114topology:type: devicedevices:- /dev/vdb- /dev/vdcquotapath: |-quotapath:- name: /mnt/path1key: kubernetes.io/hostnameoperator: Invalue: cn-beijing.192.168.3.35topology:type: deviceoptions: prjquotafstype: ext4devices:- /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/v1kind: StorageClassmetadata:name: csi-localprovisioner: localplugin.csi.alibabacloud.comparameters:volumeType: LVMvgName: volumegroup1fsType: ext4lvmType: "striping"reclaimPolicy: DeletevolumeBindingMode: WaitForFirstConsumerallowVolumeExpansion: trueEOF
parameters.vgName为在node-resource-topo configmap中定义的VolumeGroup名称volumegroup1。
创建PVC
cat << EOF | kubectl apply -f -apiVersion: v1kind: PersistentVolumeClaimmetadata:name: lvm-pvcannotations:volume.kubernetes.io/selected-node: cn-zhangjiakou.192.168.3.114spec:accessModes:- ReadWriteOnceresources:requests:storage: 2GistorageClassName: csi-localEOF
这里需要在 pvc 的 annotation 中指定存储所在的节点,
创建应用
cat << EOF | kubectl apply -f -apiVersion: apps/v1kind: Deploymentmetadata:name: deployment-lvmlabels:app: nginxspec:selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: nginx:1.7.9volumeMounts:- name: lvm-pvcmountPath: "/data"volumes:- name: lvm-pvcpersistentVolumeClaim:claimName: lvm-pvcEOF
以上,我们就完成了本地存储的基本使用, Quotapath 模式基本相同,只需改造 StorageClass 即可。
