docker - 当 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
解决方案
这听起来就像存在存储类的原因:
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
推荐阅读
- spring-boot - 从 WebClient 流式传输到 Flux。阻塞超时抛出异常
- python - 如何在使用 python 的 Spark SQL 作业中避免 \r\n?
- r - 应用特定功能时如何加快对大型数据集的行操作
- ruby - Elasticsearch Searchkick - 重新索引似乎没有做任何事情
- java - SQL PreparedStatement 中的 Java ArrayIndexOutOfBoundsException - 数组长度为 0?
- python - 如何在一个单元格中从 xpath 将字符串写入 csv?
- javascript - 如何在映射对象的数组时更新对象的值?
- scala - 当只有其中一个会进行类型检查时,为什么这两个隐式都匹配?
- zsh - 测试 ./script.sh doit 测试不显示真实输出
- firebase - Google Analytics 是否仅用于分析用户行为?