在 K3s Kubernetes 中为 NFS 共享创建 link
Creating a link to an NFS share in K3s Kubernetes
我是 Kubernetes 的新手,正在尝试在 raspberry pi 的小型集群上获取 node-red 运行
我很高兴地做到了这一点,但注意到一旦集群断电,下次我启动它时,node-red 中的流就消失了。
所以,我在我本地网络上的 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 事件
事件:
消息类型原因年龄
---- ------ ---- ---- --------
正常 WaitForFirstConsumer 5m47s(x7 超过 7m3s)persistentvolume-controller 在绑定之前等待创建第一个消费者
正常供应 119s(x5 超过 5m44s)牧场主。io/local-path_local-path-provisioner-58fb86bdfd-rtcls_506528ac-afd0-11ea-930d-52d0b85bb2c2 外部供应商正在为索赔供应量 "default/clusterstore-nodered-claim"
警告 ProvisioningFailed 119s(x5 超过 5m44s)rancher。io/local-path_local-path-provisioner-58fb86bdfd-rtcls_506528ac-afd0-11ea-930d-52d0b85bb2c2 无法使用 StorageClass "local-path" 提供卷:仅支持 ReadWriteOnce 访问模式
正常 ExternalProvisioning 92s(x19 超过 5m44s)persistentvolume-controller
等待创建卷,由外部供应商 "rancher.io/local-path" 或由系统管理员手动创建
我认为这是因为我没有 nfs 提供程序,事实上,如果我执行 kubectl get storageclass,我只会看到本地路径
新问题,如何为 NFS 添加存储类?在谷歌上搜索了一下,我一无所知。
这是一个验证错误,指向部署 yaml 的最后一部分,因此使其成为无效对象。看起来你在缩进上犯了一个错误。它应该看起来更像这样:
volumes:
- name: node-red-data
nfs:
server: 192.168.1.96
path: /mnt/Pool1/ClusterStore/nodered
此外,由于您是 Kubernetes 的新手,我强烈建议您熟悉 PersistentVolumes and its claims. PVs are volume plugins like Volumes 的概念,但要有一个独立于使用 PV 的任何单个 Pod 的生命周期。
如果有帮助,请告诉我。
好的,问题解决了。 Kubernetes 教程真的很深奥,缺少很多假设步骤。
我的问题是 pi 上的 k3s 仅与本地路径存储提供商一起提供。
我终于找到了安装 nfs 客户端存储提供程序的教程,现在我的集群可以正常工作了!
在规定的教程中,基本上需要完成以下步骤:
1.
showmount -e 192.168.1.XY
检查共享是否可以从 NAS 外部访问
2.
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[=43= 中可见]命令
更新 23.02.2021
看来你也得用别的 Chart 和 Image 了:
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
- kubectl 获取存储空间class
检查存储class现在是否存在
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"}}}'
将新存储 class 配置为“默认”。用 kubectl get storageclass 告诉
的内容替换 nfs-client 和 local-path
5.
kubectl get storageclass
最后检查,如果它被标记为“默认”
我是 Kubernetes 的新手,正在尝试在 raspberry pi 的小型集群上获取 node-red 运行 我很高兴地做到了这一点,但注意到一旦集群断电,下次我启动它时,node-red 中的流就消失了。
所以,我在我本地网络上的 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 事件
事件: 消息类型原因年龄 ---- ------ ---- ---- -------- 正常 WaitForFirstConsumer 5m47s(x7 超过 7m3s)persistentvolume-controller 在绑定之前等待创建第一个消费者 正常供应 119s(x5 超过 5m44s)牧场主。io/local-path_local-path-provisioner-58fb86bdfd-rtcls_506528ac-afd0-11ea-930d-52d0b85bb2c2 外部供应商正在为索赔供应量 "default/clusterstore-nodered-claim" 警告 ProvisioningFailed 119s(x5 超过 5m44s)rancher。io/local-path_local-path-provisioner-58fb86bdfd-rtcls_506528ac-afd0-11ea-930d-52d0b85bb2c2 无法使用 StorageClass "local-path" 提供卷:仅支持 ReadWriteOnce 访问模式
正常 ExternalProvisioning 92s(x19 超过 5m44s)persistentvolume-controller 等待创建卷,由外部供应商 "rancher.io/local-path" 或由系统管理员手动创建
我认为这是因为我没有 nfs 提供程序,事实上,如果我执行 kubectl get storageclass,我只会看到本地路径
新问题,如何为 NFS 添加存储类?在谷歌上搜索了一下,我一无所知。
这是一个验证错误,指向部署 yaml 的最后一部分,因此使其成为无效对象。看起来你在缩进上犯了一个错误。它应该看起来更像这样:
volumes:
- name: node-red-data
nfs:
server: 192.168.1.96
path: /mnt/Pool1/ClusterStore/nodered
此外,由于您是 Kubernetes 的新手,我强烈建议您熟悉 PersistentVolumes and its claims. PVs are volume plugins like Volumes 的概念,但要有一个独立于使用 PV 的任何单个 Pod 的生命周期。
如果有帮助,请告诉我。
好的,问题解决了。 Kubernetes 教程真的很深奥,缺少很多假设步骤。
我的问题是 pi 上的 k3s 仅与本地路径存储提供商一起提供。
我终于找到了安装 nfs 客户端存储提供程序的教程,现在我的集群可以正常工作了!
在规定的教程中,基本上需要完成以下步骤:
1.
showmount -e 192.168.1.XY
检查共享是否可以从 NAS 外部访问
2.
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[=43= 中可见]命令
更新 23.02.2021 看来你也得用别的 Chart 和 Image 了:
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
- kubectl 获取存储空间class
检查存储class现在是否存在
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"}}}'
将新存储 class 配置为“默认”。用 kubectl get storageclass 告诉
的内容替换 nfs-client 和 local-path5.
kubectl get storageclass
最后检查,如果它被标记为“默认”