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

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 页面。

    配置参数:

    参数建议配置
    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. 可选:如果指定,tolerations 是传递给 LocalVolumeDiscovery Daemon 的 toleration 列表。
  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 对象。您可以通过该对象检查在相应节点上发现的块设备。