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

可以使用本地卷进行持久化存储。本地持久卷允许您通过标准 persistent volume claim 接口访问本地存储设备,例如磁盘或分区。

由于系统会感知卷的节点约束,因此可以在不手动将 Pod 调度到节点的情况下使用本地卷。但是,本地卷仍然受底层节点可用性的限制,不适用于所有应用程序。

NOTE

本地卷只能作为静态创建的 persistent volume 使用。

前提条件

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

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

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

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

操作步骤

安装 Local Storage Operator

  1. 登录后,进入 Administrator 页面。

  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 创建 persistent volume。local volume provisioner 会在所定义资源中指定的路径下查找任何文件系统或块卷设备。

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

    NOTE

    不要对同一设备使用不同的 storage class 名称。这样会创建多个 persistent volumes(PVs)。

    在集群的 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. 创建 persistent volume 对象时要使用的 storage class 名称。如果该 storage class 不存在,Local Storage Operator 会自动创建它。请务必使用能够唯一标识这组本地卷的 storage class。
    4. 控制 operator 在使用前是否清除所列设备。默认值为 false。警告:将 forceWipeDevicesAndDestroyAllData: true 设置为破坏性操作,它会擦除这些设备上现有的分区表、文件系统签名和数据。仅当您确认可以安全清除这些设备时才使用。
    5. 卷模式,可以是 FilesystemBlock,用于定义本地卷类型。
    6. 可选:本地卷首次挂载时创建的文件系统。只有在 volumeMode 设置为 Filesystem 时才需要配置此参数。
    7. 包含可选本地存储设备列表的路径。
    8. 请将此值替换为 LocalVolume 资源 by-id 的实际本地磁盘 filepath,例如 /dev/disk/by-id/wwn。当 provisioner 成功部署后,会为这些本地磁盘创建 PV。
  2. 验证已创建 persistent volumes:

    在集群的 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 对象不会更改现有 persistent volumes 的 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. 声明所需的 storage class 名称。

自动发现本地存储设备

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