我在 RPi4 上运行一个 k3s 集群,具有异构配置(一个节点具有大容量但速度很慢的 HDD,另一个节点具有 SSD 驱动器,第三个节点只有 SD 卡)。
我有持久卷和“本地路径”类型的声明,根据需要附加到节点和吊舱。
我面临这样一种情况:我需要在没有磁盘的节点上安排一个 pod 来处理存储在带有 ssd 磁盘的节点中的数据(使用 ffmpeg 将一些视频文件重新编码为 mp4,由于这是一个昂贵的过程,我想在空闲节点上执行此操作并且不会减慢运行 ssd 的节点的速度)。
是否可以透明地从其他节点挂载 PV?我需要使用一些 nfs 吗?是否有更先进的卷类型可以在裸机 RPi4 中用来做我想做的事情?
查看文档并没有太大帮助(有大量不同的持久卷类型,但描述的用例并不多)。
谢谢
答案1
我觉得你可能感兴趣长角牛计划。
它是任何 Kubernetes 集群的持久存储实现,它使用 Kubernetes 节点的现有磁盘为 Kubernetes pod 提供复制且稳定的存储。
正如所述Longhorn github:
Longhorn 轻量、可靠且功能强大。您可以使用一个 kubectl apply 命令或使用 Helm 图表在现有 Kubernetes 集群上安装 Longhorn。安装 Longhorn 后,它会为 Kubernetes 集群添加持久卷支持。
最重要的是,您可以使用直观的 GUI 仪表板来自定义长角牛满足您的需求。
笔记:目前 Longhorn 仅支持amd64。
安装
在下面的例子中,我将向你展示如何安装长角牛。
首先,您必须open-iscsi
在每个集群节点上安装。您需要使用以下命令进行安装:
apt-get install open-iscsi
接下来应用longhorn.yaml
安装长角牛:
kubectl apply -f https://raw.githubusercontent.com/longhorn/longhorn/master/deploy/longhorn.yaml
然后创建一个longhorn
StorageClass
(您可以稍后使用来自定义它ConfigMap
)
kubectl apply -f https://raw.githubusercontent.com/rancher/longhorn/master/deploy/longhorn.yaml
这就是我们开始使用所需的一切长角牛:)
Longhorn 用户界面
正如我之前描述的,我们可以使用有用的 GUI 仪表板,这里您可以找到如何访问它。此外,您可能需要使用如下方法
将仪表板暴露给外界Ingress
这里
使用Longhorn UI
仪表板非常直观,例如在“节点”选项卡中,您可以轻松指定专用于提供存储的节点。
longhorn存储类
您可以longhorn
StorageClass
通过longhorn-storageclass
ConfigMap
在longhorn-system
命名空间中进行编辑来自定义,例如,我将numberOfReplicas
参数从3
(默认)编辑为1
:
root@kmaster:~# kubectl describe sc longhorn
Name: longhorn
IsDefaultClass: No
Annotations: longhorn.io/last-applied-configmap=kind: StorageClass
apiVersion: storage.k8s.io/v1
...
parameters:
numberOfReplicas: "1"
staleReplicaTimeout: "2880"
fromBackup: ""
...