在 K3s Kubernetes 中创建指向 NFS 共享的链接



我对 Kubernetes 很陌生,并试图让 node-red 在一小群 raspberry pi 上运行 我很高兴地做到了这一点,但注意到一旦集群断电,下次我提起它时,节点红色的流就消失了。

因此,我在本地网络上的freenas盒子上创建了一个NFS共享,并且可以从另一个RPI挂载它,因此我知道权限有效。

但是,我无法让我的坐骑在 kubernetes 部署中工作。

请问有什么帮助吗?

apiVersion: apps/v1
kind: Deployment
metadata:
name: node-red
labels:
app: node-red
spec:
replicas: 1
selector:
matchLabels:
app: node-red
template:
metadata:
labels:
app: node-red
spec:
containers:
- name: node-red
image: nodered/node-red:latest
ports:
- containerPort: 1880
name: node-red-ui
securityContext:
privileged: true
volumeMounts:
- name: node-red-data
mountPath: /data
env:
- name: NODE_NAME
valueFrom:
fieldRef:
fieldPath: spec.nodeName
- name: TZ
value: Europe/London
volumes:
- name: node-red-data
nfs:
server: 192.168.1.96
path: /mnt/Pool1/ClusterStore/nodered

我得到的错误是

error: error validating "node-red-deploy.yml": error validating data: 
ValidationError(Deployment.spec.template.spec): unknown field "nfs" in io.k8s.api.core.v1.PodSpec; if 
you choose to ignore these errors, turn validation off with --validate=false

新信息

我现在有以下内容

apiVersion: v1
kind: PersistentVolume
metadata:
name: clusterstore-nodered
labels:
type: nfs
spec:
capacity:
storage: 1Gi
accessModes:
- ReadWriteMany
nfs:
path: /mnt/Pool1/ClusterStore/nodered
server: 192.168.1.96 
persistentVolumeReclaimPolicy: Recycle

claim.yaml

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: clusterstore-nodered-claim
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 1Gi

现在,当我开始部署时,它会永远等待挂起,我看到以下PVC的事件

事件: 类型原因 来自消息的年龄 ---- ------ ---- ---- ------- 正常等待第一个使用者 5 分 47 秒(x7 超过 7 毫秒(持久卷控制器在绑定前等待创建第一个使用者 正常配置119秒(x5 超过 5 分 44 秒( rancher.io/local-path_local-path-provisioner-58fb86bdfd-rtcls_506528ac-afd0-11ea-930d-52d0b85bb2c2 外部配置程序正在为声明"默认/群集存储-节点-声明"预配卷 警告 预配失败 119 秒(x5 超过 5 分 44 秒( rancher.io/local-path_local-path-provisioner-58fb86bdfd-rtcls_506528ac-afd0-11ea-930d-52d0b85bb2c2 无法使用 StorageClass"本地路径"调配卷:仅支持 ReadWriteOnce 访问模式

正常外部资源调配 92s(x19 超过 5 分 44 秒(持久卷控制器 等待由外部配置程序"rancher.io/local-path"创建卷或由系统管理员手动创建

我认为这是因为我没有 nfs 提供程序,实际上如果我做 kubectl get storageclass,我只看到本地路径

新问题,如何为 NFS 添加存储类? 谷歌搜索让我一无所知。

好的,解决了问题。 Kubernetes 教程非常深奥,缺少很多假设的步骤。

我的问题归结为仅随本地路径存储提供商一起提供的 pi 上的 k3s。

我终于找到了一个安装了 nfs 客户端存储提供程序的教程,现在我的集群可以工作了!

这是我在其中找到信息的教程。

在所述的教程中,基本上需要完成以下步骤:

1.

showmount -e 192.168.1.XY 

检查是否可以从 NAS 外部访问共享

阿拉伯数字。

helm install nfs-provisioner stable/nfs-client-provisioner --set nfs.server=192.168.1.**XY** --set nfs.path=/samplevolume/k3s --set image.repository=quay.io/external_storage/nfs-client-provisioner-arm

而您将 IP 替换为 NFS服务器,将 NFS 路径替换为 synology 上的特定路径(两者都应该从您的 showmount -e IP命令中可见

更新 23.02.2021似乎您还必须使用另一个图表和图像:

helm install nfs-subdir-external-provisioner nfs-subdir-external-provisioner/nfs-subdir-external-provisioner --set nfs.server=192.168.1.**XY** --set nfs.path=/samplevolume/k3s --set image.repository=gcr.io/k8s-staging-sig-storage/nfs-subdir-external-provisioner
  1. kubectl get storageclass

检查存储类现在是否存在

4.

kubectl patch storageclass nfs-client -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}' && kubectl patch storageclass local-path -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"false"}}}'

将新存储类配置为"默认"。将 nfs-client 和本地路径替换为 kubectl get storageclass 所告知的内容

5.

kubectl get storageclass

最终检查(是否标记为"默认"(

这是一个验证错误,指向部署 yaml 的最后一部分,因此使其成为无效对象。看起来您在缩进方面犯了一个错误。它应该看起来更像这样:

volumes:
- name: node-red-data
nfs:
server: 192.168.1.96
path: /mnt/Pool1/ClusterStore/nodered

另外,由于您是 Kubernetes 的新手,我强烈建议您熟悉 PersistentVolumes 的概念及其声明。PV 是像 Volume 一样的卷插件,但生命周期独立于任何使用 PV 的单个 Pod。

如果有帮助,请告诉我。

最新更新