使用 LocalVolume 进行配置

LocalVolume 会为列出的每个设备路径静态配置一个 PersistentVolume。如果不存在在 spec.storageClassDevices[].storageClassName 中指定名称的 StorageClass,operator 还会创建该 StorageClass。

当你知道确切的磁盘时,请使用 LocalVolume。对于基于过滤器的配置,请参阅使用 LocalVolumeSet 进行配置。

前提条件

  • 已安装 Alauda Container Platform Local Disk Provisioner。请参阅安装。
  • 每个目标设备都已连接到节点、未挂载且没有分区。
  • 优先使用发现本地磁盘中介绍的稳定路径,例如 /dev/disk/by-id/...。不要使用简短的 /dev/sdX 名称或 /dev/disk/by-path/... 路径。这些名称可能会在节点重启后发生变化。

配置 Filesystem 卷

LocalVolume 是静态的。provisioner 会在你列出的路径中查找设备。

NOTE

不要对同一设备使用不同的 StorageClass 名称。这样会为一个磁盘创建多个 PersistentVolume。

在控制平面节点上:

cat << EOF | kubectl apply -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:
        - /dev/disk/by-id/<wwn-id>
EOF
  1. 安装 Alauda Container Platform Local Disk Provisioner 的命名空间。默认值为 acp-storage。
  2. 可选。具有所列磁盘的节点。请从 kubectl get node 获取主机名。如果省略,operator 会在每个节点上查找这些路径。
  3. PersistentVolume 的 StorageClass。如果不存在,operator 会创建它。请使用能够唯一标识这组磁盘的名称。
  4. 当 true 时,operator 会在使用前擦除所列设备上的分区表、文件系统签名和数据。默认值为 false。仅当可以销毁这些设备时,才设置 true。
  5. Filesystem 或 Block。
  6. 首次挂载时创建的文件系统。仅当 volumeMode 为 Filesystem 时设置此项。
  7. 设备路径。使用来自 LocalVolumeDiscoveryResult.status.discoveredDevices[].deviceID 的 /dev/disk/by-id/...。不要使用 /dev/sdX 或 /dev/disk/by-path/...。
WARNING

forceWipeDevicesAndDestroyAllData: true 会销毁所列设备上的现有数据。

验证 PersistentVolume:

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
NOTE

编辑 LocalVolume 不会更改已存在的 PersistentVolume 上的 fsType 或 volumeMode。此更改会造成破坏性影响。

配置 Block 卷

要配置原始 Block 设备,请设置 volumeMode: Block,并省略 fsType:

      volumeMode: Block
      devicePaths:
        - /dev/disk/by-id/<wwn-id>

使用可标识此 Block 集的 StorageClass 名称,例如 localblock。PersistentVolumeClaim 还必须设置 volumeMode: Block。

绑定 PersistentVolumeClaim

在将使用该卷的项目中创建声明。请求不得超过设备容量。

Filesystem 声明:

cat << EOF | kubectl apply -f -
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: local-pvc
spec:
  accessModes:
    - ReadWriteOnce
  volumeMode: Filesystem
  resources:
    requests:
      storage: 100Gi
  storageClassName: local-sc
EOF
  1. 必须匹配 LocalVolume volumeMode。对于 Block 卷,请使用 Block。
  2. 必须小于或等于 PersistentVolume 容量。
  3. 必须匹配 spec.storageClassDevices[].storageClassName。

确认声明已绑定:

kubectl get pvc local-pvc

添加磁盘或节点

添加磁盘或节点需要编辑同一个 LocalVolume,而不是执行单独的操作步骤。

  • 添加磁盘:将 /dev/disk/by-id/... 路径追加到 spec.storageClassDevices[].devicePaths。
  • 添加节点:将节点主机名添加到 spec.nodeSelector.nodeSelectorTerms,然后列出该节点的设备路径。

应用编辑后,等待处于 Available 状态的新 PersistentVolume:

kubectl get pv -l storage.openshift.com/owner-name=local-disks