全部產品
Search
文件中心

Container Service for Kubernetes:使用LVM動態建立本機存放區卷

更新時間:Jun 08, 2024

ACK Edge叢集Pro版支援LVM(Logical Volume Manager)本機存放區,提供自動化的邏輯卷生命週期管理能力,且能根據節點LVM本機存放區容量進行調度。您只需定義節點本地碟的拓撲關係,即可通過原生PVC/PV方式使用LVM本機存放區。本文介紹如何在ACK Edge叢集Pro版中使用LVM本機存放區。

前提條件

  • 叢集的節點有可用的本機資料盤。

  • 從雲端節點能訪問部署儲存的節點的TCP 1736連接埠。

安裝node-resource-manager、csi-plugin和csi-provisioner組件

  1. 登入Container Service管理主控台,在左側導覽列選擇叢集

  2. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇營運管理 > 組件管理

  3. 組件管理頁面的儲存頁簽,找到node-resource-managercsi-plugincsi-provisioner組件,單擊安裝

  4. 提示對話方塊中單擊確定

配置節點VolumeGroup

說明

為了保障資料安全,組件不會對VolumeGroup和Physical Volume進行刪除。如果需要重新定義VolumeGroup,您需要先自行清理。

  1. 使用如下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中。

  2. 給節點打標。

    • 按步驟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建立成功後將掛載該邏輯卷。

說明

叢集預設的storageClassNamecsi-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上。