如何使用附加到主机的块设备作为 pod 中的块设备

Col*_*lin 1 kubernetes

问题:如何将连接到 Pod 内主机的原始设备用作块设备。

我尝试使用类型为“BlockDevice”的“hostPath”

volumes:
- my-data:
  hostPath:
    path: /dev/nvme1n2
    type: BlockDevice
Run Code Online (Sandbox Code Playgroud)
containers:
.....
  volumeDevices:
  - name: my-data
    devicePath: /dev/sda
Run Code Online (Sandbox Code Playgroud)

此配置给了我以下错误。

Invalid value: "my-data": can only use volume source type of PersistentVolumeClaim for block mode
Run Code Online (Sandbox Code Playgroud)

我可以使用PersistentVolumeand 来实现PersistentVolumeClaim吗?有人可以帮助我提供示例配置吗?感谢帮助。

san*_*_23 5

K8s 中对块设备的支持允许用户和管理员使用 PV 和 PVC 将原始块设备安装在 Pod 中。下面的摘录显示了一个小用例。

  • 创建一个 PV 来引用主机上的原始设备 say /dev/xvdf
kind: PersistentVolume
apiVersion: v1
metadata:
  name: local-raw-pv
spec:
  volumeMode: Block
  capacity:
    storage: 100Gi
  local:
    path: /dev/xvdf
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Delete
Run Code Online (Sandbox Code Playgroud)
  • 为应用程序创建一个声明块设备的 PVC
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: block-pvc
spec:
  accessModes:
    - ReadWriteOnce
  volumeMode: Block
  resources:
    requests:
      storage: 10Gi
Run Code Online (Sandbox Code Playgroud)
  • 使用上述声明创建 pod,它将/dev/xvdf在 pod 中的路径上安装主机设备/dev/xvda
apiVersion: v1
kind: Pod
metadata:
  name: pod-with-block-volume
spec:
  containers:
    - name: some-container
      image: ubuntu
      command: ["/bin/sh", "-c"]
      args: [ "tail -f /dev/null" ]
      volumeDevices:
        - name: data
          devicePath: /dev/xvda
  volumes:
    - name: data
      persistentVolumeClaim:
        claimName: block-pvc
Run Code Online (Sandbox Code Playgroud)