2

我对 Kubernetes 很陌生,试图让 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

声明.yaml

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

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

事件:Type Reason Age From Message ---- ------ ---- ---- ------- Normal WaitForFirstConsumer 5m47s(x7 over 7m3s)persistentvolume-controller等待第一个消费者被创建在绑定 Normal Provisioning 119s (x5 over 5m44s) rancher.io/local-path_local-path-provisioner-58fb86bdfd-rtcls_506528ac-afd0-11ea-930d-52d0b85bb2c2 外部配置器正在为声明“default/clusterstore-nodered-claim”配置卷之前警告 ProvisioningFailed 119s (x5 over 5m44s) rancher.io/local-path_local-path-provisioner-58fb86bdfd-rtcls_506528ac-afd0-11ea-930d-52d0b85bb2c2 无法使用 StorageClass“local-path”配置卷:仅支持 ReadWriteOnce 访问模式

正常 ExternalProvisioning 92s (x19 over 5m44s) persistentvolume-controller 等待由外部供应商“rancher.io/local-path”或由系统管理员手动创建的卷

我认为这是因为我没有 nfs 提供程序,实际上如果我执行 kubectl get storageclass 我只会看到 local-path

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

4

3 回答 3

2

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

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命令中可见

更新 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 获取存储类

检查存储类现在是否存在

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"}}}'

将新的存储类配置为“默认”。用 kubectl get storageclass 告诉的内容替换 nfs-client 和 local-path

5.

kubectl get storageclass

最后检查,如果它被标记为“默认”

于 2020-09-17T14:50:29.857 回答
1

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

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

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

请让我知道这是否有帮助。

于 2020-06-16T09:18:23.913 回答
1

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

我的问题归结为 pi 上的 k3s,仅与本地路径存储提供程序一起提供。

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

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

于 2020-06-16T14:20:58.773 回答