背景:
部分服务器上有两种不同的存储介质如SSD和HDD,在做存储时需要将不同类型数据分开存到对应的介质上。
第一种方法
参考了多个资料实现,较复杂,变通的方式不建议使用。
思路:
建立两个提供程序,两个存储类分别指向不同的提供类。
local-path-provisioner-ssd
local-path-provisioner-hdd
通过使用不同的配置文件绑定路径来实现。在storageclass中同时指定到不同的provisioner上
---
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: ssd-local-path
provisioner: local-path-provisioner-ssd
volumeBindingMode: WaitForFirstConsumer
reclaimPolicy: Retain
PVC等处使用对应名称的存储类申请PV即可。
期间问题出在配置文件和相关的RBAC上面,在同一命名空间中的部分信息可以共用,部分有冲突。
有些配置必须单独存在: 如local-path-config
第二种方法
查看了官方源代码库中的readme中对配置文件的解释,实现方便。
2. If more than one path was specified, the path would be chosen randomly when provisioning.
如果配置了多个路径在nodepathmap中,会默认随机选择一个路径。
{
"nodePathMap":[
{
"node":"DEFAULT_PATH_FOR_NON_LISTED_NODES",
"paths":["/opt/local-path-provisioner"]
},
{
"node":"yasker-lp-dev1",
"paths":["/opt/local-path-provisioner", "/ssd", "/hdd"]
},
{
"node":"yasker-lp-dev3",
"paths":["/opt/local-path-provisioner", "/ssd", "/hdd"]
}
]
}
如果要指定路径storageclass写法要添加参数:
parameters:
nodePath: /data/ssd #此路径必须在nodepathmap中已定义。
---
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: ssd-local-path
provisioner: cluster.local/local-path-provisioner
parameters:
nodePath: /ssd
volumeBindingMode: WaitForFirstConsumer
reclaimPolicy: Retain