首页 > 解决方案 > 当 Minikube (k8s) 中的 Pod 声明卷时,如何强制所有这些卷实际上位于裸机*主机*上的某个磁盘上?

问题描述

我们有台带有一个 SSD 和一个 HDD 的裸机。Minikube (k8s) 中的 pod 将占用一些 pvc 并获得一些卷。我们希望强制这些卷实际上在我们的 SSD 上,而不是 HDD 上。怎么做?非常感谢!

ps 我试过的:当想要一个 PVC 时,我们发现 Minikube 会在/tmp/hostpath-provisioner/.... 此外,恕我直言,这是Minikube 本身运行的Docker内部的路径,而不是主机路径。因此,我尝试了主机裸机在 SSD(不是 HDD)上的位置。但是,这使 pod 不开心,并且在重新启动后它们都失败了......另外,我发现只有文件会写入新挂载的路径,而现有文件仍然会在容器内......minikube mount /data/minikube-my-tmp-hostpath-provisioner:/tmp/hostpath-provisioner/data

标签: dockerkubernetesminikube

解决方案


这听起来就像存在存储类的原因:

StorageClass 为管理员提供了一种描述他们提供的存储“类”的方法。不同的类可能映射到服务质量级别、备份策略或集群管理员确定的任意策略。Kubernetes 本身对类代表什么没有意见。这个概念有时在其他存储系统中称为“配置文件”。

所以换句话说 - 您可以创建具有不同性能或其他特性的多个存储类。然后决定哪一个最适合他们创建的每个声明。

例如,这是一个可以在 minikube 上使用的存储类:

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: fast
provisioner: k8s.io/minikube-hostpath
parameters:
  type: pd-ssd

你可能还需要创建一个 PV,你可以使用:

apiVersion: v1
kind: PersistentVolume
metadata:
  name: some-name-pv
spec:
  capacity: 
    storage: 1Gi
  accessModes:
    - ReadWriteOnce
    - ReadOnlyMany
  persistentVolumeReclaimPolicy: Retain
  hostPath:
    path: /tmp/path

然后,最后,PVC 会这样:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: some-pvc 
spec:
  storageClassName: fast
  resources:
    requests:
      storage: 100Mi
  accessModes:
    - ReadWriteOnce

推荐阅读