【发布时间】:2021-01-04 19:48:16
【问题描述】:
我有一个 Kubernetes 集群设置(本地),它在每个节点上都有一个 NFS 共享 (my-nfs.internal.tld) 挂载到 /exports/backup 以在那里创建备份。
现在我正在设置我的日志堆栈,我想让数据持久化。所以我想我可以先将索引存储在 NFS 上。
现在我找到了三种不同的方法来实现这一点:
NFS-PV
apiVersion: v1
kind: PersistentVolume
metadata:
name: logging-data
spec:
capacity:
storage: 10Gi
accessModes:
- ReadWriteOnce
nfs:
server: my-nfs.internal.tld
path: /path/to/exports/backup/logging-data/
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: logging-data-pvc
spec:
accessModes:
- ReadWriteOnce
storageClassName: logging-data
resources:
requests:
storage: 10Gi
apiVersion: apps/v1
kind: Deployment
...
spec:
...
template:
...
spec:
...
volumes:
- name: logging-data-volume
persistentVolumeClaim:
claimName: logging-data-pvc
当然,这需要我的集群可以访问 NFS(而不是当前设置的节点)。
hostPath-PV
apiVersion: v1
kind: PersistentVolume
metadata:
name: logging-data
spec:
capacity:
storage: 10Gi
accessModes:
- ReadWriteOnce
hostPath:
path: /exports/backup/logging-data/
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: logging-data-pvc
spec:
accessModes:
- ReadWriteOnce
storageClassName: logging-data
resources:
requests:
storage: 10Gi
apiVersion: apps/v1
kind: Deployment
...
spec:
...
template:
...
spec:
...
volumes:
- name: logging-data-volume
persistentVolumeClaim:
claimName: logging-data-pvc
部署中的hostPath挂载
由于 nfs 已安装到我的所有节点,我也可以直接在部署中使用主机路径,而无需固定任何东西。
apiVersion: apps/v1
kind: Deployment
...
spec:
...
template:
...
spec:
...
volumes:
- name: logging-data-volume
hostPath:
path: /exports/backup/logging-data
type: DirectoryOrCreate
所以我的问题是:这三者之间真的有什么区别吗?我很确定这三个都有效。我已经测试了第二个和第三个。我还不能测试第一个(至少在这个特定的设置中)。特别是第二和第三个解决方案似乎与我非常相似。我认为,第二个可以更轻松地在多个集群上重用部署文件,因为您可以使用不同类型的持久卷,而无需更改部署的 volumes 部分。但除此之外还有什么不同吗?性能可能吗?还是其中一个已被弃用并很快将被删除?
我发现tutorial 提到,hostPath-PV 仅适用于单节点集群。但我确信它在这里也适用于我的情况。也许评论是关于:“在多节点集群上,数据在部署到不同节点时会发生变化。”
从阅读到大量文档和操作方法,我理解,第一个是首选解决方案。我可能也会选择它,因为它是最简单的复制到云设置。但我真的不明白为什么这比其他两个更受欢迎。
提前感谢您对此事的意见!
【问题讨论】:
标签: kubernetes nfs persistent-volumes