ACK Edge叢集Pro版支援LVM(Logical Volume Manager)本機存放區,提供自動化的邏輯卷生命週期管理能力,且能根據節點LVM本機存放區容量進行調度。您只需定義節點本地碟的拓撲關係,即可通過原生PVC/PV方式使用LVM本機存放區。本文介紹如何在ACK Edge叢集Pro版中使用LVM本機存放區。
前提條件
叢集的節點有可用的本機資料盤。
從雲端節點能訪問部署儲存的節點的TCP 1736連接埠。
安裝node-resource-manager、csi-plugin和csi-provisioner組件
登入Container Service管理主控台,在左側導覽列選擇叢集。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇 。
在組件管理頁面的儲存頁簽,找到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上。