使用本地卷配置持久存储

Alauda Container Platform 可以通过使用本地卷来配置持久存储。本地持久卷允许您通过标准的持久卷声明接口访问本地存储设备,例如磁盘或分区。

本地卷可以在无需手动调度 Pod 到节点的情况下使用,因为系统会识别卷的节点约束条件。然而,本地卷仍然受限于底层节点的可用性,并不适用于所有应用场景。

NOTE

本地卷只能作为静态创建的持久卷使用。

前提条件

  • 下载与您的平台架构对应的Alauda Build of LocalStorage安装包。

  • 使用上传软件包机制上传Alauda Build of LocalStorage安装包。

  • 您拥有符合以下条件的本地磁盘:

    • 已挂载到某个节点。
    • 未被挂载使用。
    • 不包含分区。

操作步骤

安装 Local Storage Operator

  1. 登录,进入管理员页面。

  2. 点击 Marketplace > OperatorHub,进入 OperatorHub 页面。

  3. 找到 Alauda Build of LocalStorage,点击 Install,进入 Install Alauda Build of LocalStorage 页面。

    配置参数:

    参数推荐配置
    Channel默认通道为 stable
    Installation ModeCluster:集群中所有命名空间共享单个 Operator 实例进行创建和管理,资源使用更低。
    Installation Place选择 Recommended,命名空间仅支持 acp-storage
    Upgrade StrategyManual:当 Operator Hub 有新版本时,需要手动确认升级 Operator 到最新版本。

使用 Local Storage Operator 预配本地卷

本地卷不能通过动态预配创建,而是由 Local Storage Operator 创建持久卷。Local Volume Provisioner 会在定义的资源中指定的路径查找任何文件系统或块卷设备。

  1. 创建本地卷资源。该资源必须定义节点和本地卷的路径。

    NOTE

    不要对同一设备使用不同的存储类名称,否则会创建多个持久卷(PV)。

    在集群的控制节点上执行命令。

    cat << EOF | kubectl create -f -
    apiVersion: "local.storage.openshift.io/v1"
    kind: "LocalVolume"
    metadata:
      name: "local-disks"
      namespace: "acp-storage"
    spec:
      nodeSelector:
        nodeSelectorTerms:
        - matchExpressions:
            - key: kubernetes.io/hostname
              operator: In
              values:
              - worker-01
              - worker-02
              - worker-03
      storageClassDevices:
        - storageClassName: "local-sc"
          forceWipeDevicesAndDestroyAllData: false
          volumeMode: Filesystem
          fsType: xfs
          devicePaths:
            - /path/to/device
    EOF
    1. Local Storage Operator 安装的命名空间,默认是 acp-storage
    2. 可选:包含本地存储卷所在节点列表的节点选择器。本示例使用节点主机名,可通过 kubectl get node 获取。如果未定义该值,Local Storage Operator 会尝试在所有可用节点上查找匹配磁盘。
    3. 创建持久卷对象时使用的存储类名称。如果该存储类不存在,Local Storage Operator 会自动创建。请确保使用唯一标识这组本地卷的存储类名称。
    4. 控制 Operator 是否在使用前擦除列出的设备。默认值为“false”。警告:设置 forceWipeDevicesAndDestroyAllData: true 会破坏性地擦除设备上的现有分区表/文件系统签名和数据。仅在确定设备可以安全擦除时使用。
    5. 卷模式,取值为 FilesystemBlock,定义本地卷的类型。
    6. 可选:首次挂载本地卷时创建的文件系统类型。仅当 volumeMode 设置为 Filesystem 时配置此参数。
    7. 包含本地存储设备路径列表的路径。
    8. 将此值替换为实际本地磁盘的文件路径,如 LocalVolume 资源中的 by-id 路径,例如 /dev/disk/by-id/wwn。当预配器成功部署时,会为这些本地磁盘创建 PV。
  2. 验证持久卷是否创建成功:

    在集群的控制节点上执行命令。

    kubectl get pv

    示例输出:

    NAME                CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM   STORAGECLASS   REASON   AGE
    local-pv-n8xlrd2a   100Gi      RWO            Delete           Available           local-sc                88m
    local-pv-tc78vc73   100Gi      RWO            Delete           Available           local-sc                82m
    local-pv-q86px4df   100Gi      RWO            Delete           Available           local-sc                48m    
    NOTE

    编辑 LocalVolume 对象不会更改已有持久卷的 fsType 或 volumeMode,因为这样可能导致破坏性操作。

  3. 创建本地卷持久卷声明

    在集群的控制节点上执行命令。

    cat << EOF | kubectl create -f -
    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: local-pvc-name
    spec:
      accessModes:
      - ReadWriteOnce
      volumeMode: Filesystem
      resources:
        requests:
          storage: 100Gi
      storageClassName: local-sc
    EOF  
    1. PVC 的名称。
    2. PVC 的类型,默认为 Filesystem
    3. PVC 可用的存储容量。
    4. PVC 所需的存储类名称。

自动发现本地存储设备

Local Storage Operator 支持自动发现本地存储设备。

前提条件

  • 已安装 Local Storage Operator。

操作步骤

  1. 创建 LocalVolumeDiscovery 对象

    在集群的控制节点上执行命令。

    cat << EOF | kubectl create -f -
    apiVersion: local.storage.openshift.io/v1alpha1
    kind: LocalVolumeDiscovery
    metadata:
      name: auto-discover-devices
      namespace: acp-storage
    spec:
      nodeSelector:
        nodeSelectorTerms:
          - matchExpressions:
              - key: kubernetes.io/hostname
                operator: In
                values:
                  - worker-01
                  - worker-02
                  - worker-03
      tolerations:
        - operator: Exists
    EOF
    1. 可选:指定自动检测策略运行的节点。如果未定义该值,Local Storage Operator 会尝试在所有可用节点上自动检测。
    2. 可选:指定传递给 LocalVolumeDiscovery Daemon 的容忍度列表。
  2. 验证发现结果

    在集群的控制节点上执行命令。

    kubectl -n acp-storage get localvolumediscoveryresult

    示例输出:

    NAME                               AGE
    discovery-result-worker-01         21m
    discovery-result-worker-02         21m
    discovery-result-worker-03         21m

    LocalVolumeDiscovery 对象中选定节点会生成专用的 LocalVolumeDiscoveryResult 对象,您可以从中查看该节点上发现的块设备信息。