ACK Edge集群Pro版支持LVM(Logical Volume Manager)本地存儲,提供自動化的邏輯卷生命周期管理能力,且能根據節點LVM本地存儲容量進行調度。您只需定義節點本地盤的拓撲關系,即可通過原生PVC/PV方式使用LVM本地存儲。本文介紹如何在ACK Edge集群Pro版中使用LVM本地存儲。
前提條件
集群的節點有可用的本地數據盤。
從云端節點能訪問部署存儲的節點的TCP 1736端口。
安裝node-resource-manager、csi-plugin和csi-provisioner組件
登錄容器服務管理控制臺,在左側導航欄選擇集群。
在集群列表頁面,單擊目標集群名稱,然后在左側導航欄,選擇 。
在組件管理頁面的存儲頁簽,找到node-resource-manager、csi-plugin和csi-provisioner組件,單擊安裝。
在提示對話框中單擊確定。
配置節點VolumeGroup
為了保障數據安全,組件不會對VolumeGroup和Physical Volume進行刪除。如果需要重新定義VolumeGroup,您需要先自行清理。
使用如下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
集群定義的
Labels selector operator
,主要包含如下四種操作符:In:只有
value
的值與集群節點標簽中的key對應的value
值相同時才會匹配。NotIn:只有
value
的值與集群節點標簽中的key對應的value
值不相同時才會匹配。Exists:集群節點標簽存在key就會匹配。
DoesNotExist:集群節點標簽不存在key就會匹配。
value
匹配Kubernetes Node Labels的key對應的
value
的值。topology
節點上設備拓撲關系,其中
topology.devices
指定節點上的本地盤路徑,該設備將被加到VolumeGroup中。給節點打標。
按步驟1中的標簽規則給相應存儲節點添加對應自定義標簽,以指定符合相應拓撲的節點類型。如步驟1中對應的標簽為:
kubernetes.io/storagetype=lvm
。給存儲節點添加固定標簽:
alibabacloud.com/edge-enable-localstorage='true'
,使本地存儲管理組件能調度到該節點。
節點上的node-resource-manager組件將根據以上配置,自動創建對應的Physical Volume,并將其加入到VolumeGroup中。
使用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
nodeSelector:
alibabacloud.com/is-edge-worker: "true"
volumes:
- name: local-pvc
persistentVolumeClaim:
claimName: lvm-pvc-test
執行以下命令,查看邏輯卷是否掛載成功。
kubectl exec -it local-test-564dfcf6dc-qhfsf sh
/ # ls /data
預期輸出:
lost+found
預期輸出表明,邏輯卷已成功掛載在Pod上。