使用本地卷配置持久化存储

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

由于系统能够识别卷的节点约束,因此使用本地卷时无需手动将 Pod 调度到节点上。不过,本地卷仍受底层节点可用性的影响,并不适用于所有应用程序。

NOTE

从 ACP 4.5 开始,Alauda Build of Local Storage 更名为 Alauda Container Platform Local Disk Provisioner。从 Customer Portal 下载插件时,请搜索 Alauda Container Platform Local Disk Provisioner。重命名前发布的插件软件包上传后,在平台中仍会显示为 Alauda Build of Local Storage。

NOTE

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

前提条件

  • 下载与您的平台架构相对应的 Alauda Container Platform Local Disk Provisioner(原 Alauda Build of Local Storage)安装软件包。

  • 使用上架软件包机制上传 Alauda Container Platform Local Disk Provisioner(原 Alauda Build of Local Storage)安装软件包。

  • 您有一个满足以下条件的本地磁盘:

    • 已连接到节点。
    • 未挂载。
    • 不包含分区。

操作步骤

安装 Local Storage Operator

  1. 登录并进入 Administrator 页面。

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

  3. 找到 Alauda Container Platform Local Disk Provisioner(重命名前发布的软件包会显示为 Alauda Build of Local Storage),单击 Install,然后进入 Install Alauda Container Platform Local Disk Provisioner 页面(此类软件包显示为 Install Alauda Build of Local Storage)。

    配置参数:

    参数建议配置
    Channel默认 channel 为 stable。
    Installation ModeCluster:集群中的所有命名空间共享一个 Operator 实例进行创建和管理,因此资源使用量较低。
    Installation Place选择 Recommended,命名空间仅支持 acp-storage。
    Upgrade StrategyManual:Operator Hub 中有新版本时,需要手动确认才能将 Operator 升级到最新版本。

使用 Local Storage Operator 配置本地卷

本地卷无法通过动态制备创建。相反,可以通过 Local Storage Operator 创建持久卷。本地卷制备器会检查已定义资源中指定路径下的任何文件系统或块卷设备。

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

    NOTE

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

    在集群的 control node 上执行命令。

    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. 卷模式,可以是 Filesystem 或 Block,用于定义本地卷的类型。
    6. 可选:首次挂载本地卷时创建的文件系统。只有在将 volumeMode 设置为 Filesystem 时,才必须配置此参数。
    7. 包含可供选择的本地存储设备列表的路径。
    8. 将此值替换为 LocalVolume 资源 by-id 中实际本地磁盘的文件路径,例如 /dev/disk/by-id/wwn。制备器成功部署后,将为这些本地磁盘创建 PV。
  2. 验证持久卷是否已创建:

    在集群的 control node 上执行命令。

    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. 创建本地卷持久卷声明

    在集群的 control node 上执行命令。

    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. 声明所需的存储类名称。

自动发现本地存储设备

Local Storage Operator 会自动执行本地存储发现。

前提条件

  • 您已安装 Local Storage Operator。

操作步骤

  1. 创建 LocalVolumeDiscovery 对象

    在集群的 control node 上执行命令。

    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. 验证发现结果

    在集群的 control node 上执行命令。

    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 对象,您可以通过该对象检查在该节点上发现的块设备。