ACK Edge集群Pro版支持LVM(Logical Volume Manager)本地存储,提供自动化的逻辑卷生命周期管理能力,且能根据节点LVM本地存储容量进行调度。您只需定义节点本地盘的拓扑关系,即可通过原生PVC/PV方式使用LVM本地存储。本文介绍如何在ACK Edge集群Pro版中使用LVM本地存储。
前提条件
集群的节点有可用的本地数据盘。
从云端节点能访问部署存储的节点的TCP 1736端口。
安装csi-plugin和csi-provisioner组件
登录容器服务管理控制台,在左侧导航栏选择集群列表。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,单击组件管理。
在组件管理页面的存储页签,找到csi-plugin和csi-provisioner组件,单击安装。
在提示对话框中单击确定。
使用configmap配置节点VolumeGroup
为了保障数据安全,组件不会对VolumeGroup和Physical Volume进行删除。如果需要重新定义VolumeGroup,您需要先自行清理。
安装node-resource-manager组件。
使用如下YAML文件样例配置ConfigMap,指定节点VolumeGroup拓扑配置。
apiVersion: v1
kind: ConfigMap
metadata:
name: node-resource-topo
namespace: kube-system
data:
volumegroup: |-
volumegroup:
- name: volumegroup1
key: kubernetes.io/storagetype
operator: In
value: lvm
topology:
type: device
devices:
- /dev/sdb1
- /dev/sdb2
- /dev/sdc参数解释如下:
参数 | 说明 |
name | VolumeGroup的名称。 |
key | 匹配集群节点标签中的key的值。 |
operator | 集群定义的
|
value | 匹配Kubernetes Node Labels的key对应的 |
topology | 节点上设备拓扑关系,其中 |
给节点打标。
按步骤2中的标签规则给相应存储节点添加对应自定义标签,以指定符合相应拓扑的节点类型。如步骤2中对应的标签为:
kubernetes.io/storagetype=lvm。给存储节点添加固定标签:
alibabacloud.com/edge-enable-localstorage='true',使本地存储管理组件能调度到该节点。
节点上的node-resource-manager组件将根据以上配置,自动创建对应的Physical Volume,并将其加入到VolumeGroup中。
手动配置节点VolumeGroup
SSH到目标的存储节点,确认可用的本地数据盘。
lsblk
# 确认未使用的数据盘,例如 /dev/sdb1、/dev/sdb2、/dev/sdc安装LVM工具(如未安装)。
# CentOS/Anolis
yum install -y lvm2
# Ubuntu/Debian
apt-get install -y lvm2创建Physical Volume 并组建VolumeGroup
pvcreate /dev/sdb1 /dev/sdb2 /dev/sdc
vgcreate volumegroup1 /dev/sdb1 /dev/sdb2 /dev/sdc数据盘名称仅为参考示例,具体的名称需要根据节点上的实际名称确定
VG 名称必须与 StorageClass 中
vgName参数一致,请先确认:
kubectl get sc csi-local-lvm -o yaml | grep -A5 parameters若 vgName 为 volumegroup1(默认值),上面的 vgcreate volumegroup1 即可直接匹配;若不同,请相应调整 VG 名或修改 StorageClass。
使用LVM本地存储
使用以下YAML文件样例创建PVC指定StorageClass,并执行kubectl apply -f ****.yaml命令。一个PVC对应节点上一块逻辑卷,Pod创建成功后将挂载该逻辑卷。
集群默认的storageClassName为csi-local-lvm。
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: lvm-pvc-test
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 50Mi
storageClassName: csi-local-lvm
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
k8s-app: local-test
name: local-test
namespace: default
spec:
replicas: 1
selector:
matchLabels:
k8s-app: local-test
template:
metadata:
labels:
k8s-app: local-test
spec:
hostNetwork: true
containers:
- image: nginx:1.15.7-alpine
imagePullPolicy: IfNotPresent
name: nginx
resources: {}
volumeMounts:
- name: local-pvc
mountPath: /data
dnsPolicy: ClusterFirst
restartPolicy: Always
tolerations:
- operator: Exists
volumes:
- name: local-pvc
persistentVolumeClaim:
claimName: lvm-pvc-test执行以下命令,查看逻辑卷是否挂载成功。
kubectl exec -it local-test-564dfcf6dc-qhfsf sh
/ # ls /data预期输出:
lost+found预期输出表明,逻辑卷已成功挂载在Pod上。