在ACK集群中,如需使用ECS本地盘或云盘存储具有波峰波谷业务特性的临时数据,您可以创建并配置本地存储卷。本地存储将根据节点本地存储容量进行调度,并在存储容量达到设定值时执行存储卷自动扩容。
本地存储介绍
本地存储架构主要由以下三部分组成。
类型 | 说明 |
Node Resource Manager | 负责维护本地存储的初始化周期。以VolumeGroup为例,当您在ConfigMap上声明了VolumeGroup相关组成信息时,NodeResourceManager会根据ConfigMap上的定义初始化当前节点上的本地存储。 |
CSI Plugin | 负责维护本地存储卷的生命周期。以LVM为例,当您创建使用了某个VolumeGroup的PVC时,CSI Plugin会自动生成Logical volume并绑定到PVC。 |
Storage Auto Expander | 负责管理本地存储卷的自动扩容。当监控发现当前本地存储卷容量不足时,Storage Auto Expander会自动对本地存储卷进行扩容。 |
关于本地存储卷的更多信息,请参见本地存储卷概述。
前提条件
已为节点池至少添加4块数据盘,其中1块用于容器运行时,其他3块用于定义本地存储卷。
已为Plugin和Provisioner组件创建ServiceAccount,并参见部署Plugin和Provisioner组件在集群中部署本地卷使用的CSI组件。
步骤一:初始化本地存储
Node Resource Manager组件初始化本地存储时,会读取ConfigMap来管理集群内所有节点的本地存储,为每个节点自动化创建VolumeGroup及QuotaPath。
执行以下命令,在集群的ConfigMap中定义本地存储卷。
请按需将
cn-zhangjiakou.192.168.XX.XX
替换为一个实际节点名称。以上的ConfigMap定义了在
cn-zhangjiakou.192.168.XX.XX
节点创建以下两种本地存储卷资源。VolumeGroup资源:名称为
volumegroup1
,该VolumeGroup资源由宿主机上的/dev/vdb
及/dev/vdc
两个块设备组成。Quotapath资源:该Quotapath由
/dev/vdd
块设备格式化挂载在/mnt/path1
路径下。此处只能声明一个devices
。
部署Node Resource Manager组件。
使用以下内容,创建Node Resource Manager组件的nrm.yaml文件。
执行以下命令,安装Node Resource Manager组件。
kubectl apply -f nrm.yaml
步骤二:使用本地存储卷创建应用
使用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
。更多信息,请参见LVM数据卷。执行以下命令,创建PVC。
cat << EOF | kubectl apply -f - apiVersion: v1 kind: PersistentVolumeClaim metadata: name: lvm-pvc annotations: volume.kubernetes.io/selected-node: cn-zhangjiakou.192.168.XX.XX spec: accessModes: - ReadWriteOnce resources: requests: storage: 2Gi storageClassName: csi-local EOF
annotations
下的volume.kubernetes.io/selected-node: cn-zhangjiakou.192.168.XX.XX
表明后续关联PVC的Pod将会被调度到cn-zhangjiakou.192.168.XX.XX
节点上,该节点是之前在ConfigMap中定义的VolumeGroups资源所在节点。执行以下命令,创建一个示例应用。
使用Quotapath本地存储卷创建应用
执行以下命令,创建StorageClass。
cat << EOF | kubectl apply -f - apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: alicloud-local-quota parameters: volumeType: QuotaPath rootPath: /mnt/path1 provisioner: localplugin.csi.alibabacloud.com reclaimPolicy: Delete allowVolumeExpansion: true volumeBindingMode: WaitForFirstConsumer EOF
parameters.rootPath
为在node-resource-topo configmap中定义的QuotaPath资源的名称/mnt/path1
。更多信息,请参见QuotaPath数据卷。执行以下命令,创建PVC。
cat << EOF | kubectl apply -f - apiVersion: v1 kind: PersistentVolumeClaim metadata: name: csi-quota annotations: volume.kubernetes.io/selected-node: cn-zhangjiakou.192.168.XX.XX labels: app: web-quota spec: accessModes: - ReadWriteOnce resources: requests: storage: 2Gi storageClassName: alicloud-local-quota EOF
annotations
下的volume.kubernetes.io/selected-node: cn-zhangjiakou.192.168.XX.XX
表明后续关联PVC的Pod将会被调度到cn-zhangjiakou.192.168.XX.XX
节点上,该节点是之前在ConfigMap中定义的Quotapath资源所在节点。执行以下命令,创建一个示例应用。
步骤三:自动扩容本地存储卷
本地存储卷仅支持扩容,不支持缩容。
确认自动扩容插件是否正常启动。更多信息,请参见使用storage-operator进行存储组件的部署与升级。
执行以下命令配置storage-operator。
kubectl edit cm storage-operator -n kube-system
预期输出:
storage-auto-expander: '{"crdTmpl":"/acs/templates/storage-auto-expander/crd.yaml","imageRep":"acs/storage-auto-expander","imageTag":"","install":"","template":"/acs/templates/storage-auto-expander/install.yaml","type":"deployment"}'
执行以下命令检查自动扩容组件是否启动。
kubectl get pod -n kube-system |grep storage-auto-expander
预期输出:
storage-auto-expander-6bb575b68c-tt4hh 1/1 Running 0 2m41s
执行以下命令,配置自动扩容策略。
cat << EOF | kubectl apply -f - apiVersion: storage.alibabacloud.com/v1alpha1 kind: StorageAutoScalerPolicy metadata: name: hybrid-expand-policy spec: pvcSelector: matchLabels: app: web-quota namespaces: - default conditions: - name: condition1 key: volume-capacity-used-percentage operator: Gt values: - "80" actions: - name: action type: volume-expand params: scale: 50% limits: 15Gi EOF
从以上命令模板可以看出,当存储容量达到80%以上时执行数据卷扩容,每次扩容50%,最大扩容到15 GiB。
相关文档
关于Node Resource Manager的更多信息,请参见node-resource-manager。
关于本地存储卷的更多信息,请参见本地存储卷概述。
关于ACK CSI存储插件提供的方案概览、功能对比差异、部署架构等信息,请参见存储CSI概述。
Flexvolume存储插件已弃用。建议您尽快迁移Flexvolume至CSI。