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

     2023-02-15     133

关键词:

【中文标题】在 K3s Kubernetes 中创建 NFS 共享的链接【英文标题】:Creating a link to an NFS share in K3s Kubernetes 【发布时间】:2020-10-04 22:24:16 【问题描述】:

我对 Kubernetes 很陌生,并试图让 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 over 7m3s) persistentvolume-controller 等待在绑定之前创建第一个消费者 正常供应 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 访问模式

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

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

新问题,如何为 NFS 添加存储类?用谷歌搜索一下让我毫无头绪。

【问题讨论】:

【参考方案1】:

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

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

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

5.

kubectl get storageclass

最终检查,是否标记为“默认”

【讨论】:

【参考方案2】:

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

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

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

如果有帮助,请告诉我。

【讨论】:

谢谢你,我会尝试重写以获得更好的缩进。我还没有意识到它很重要(假设是空白)。我曾尝试使用 Persistant Volumes 来做到这一点,当我尝试使用 NFS 共享时,它只是不会调度 pod,它会永远处于挂起状态。我更改为本地路径,虽然它起作用了,但一旦我测试故障转移,通过断开运行 node-red 的节点,它就处于终止状态,并且不会在新节点上重新安排,我假设因为新节点没有与本地路径中的旧节点相同的数据。 @PeterPage 缩进错误是初学者常见的错误,在使用 yaml 文件时请记住这一点。我看到你也解决了你的第二个问题。如果您需要更多帮助,请随时提出其他问题,社区会尽力帮助您。【参考方案3】:

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

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

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

This was the tutorial I found the information in.

【讨论】:

pod 没有在 kubernetes 中创建,但存在部署?

】pod没有在kubernetes中创建,但存在部署?【英文标题】:podarenotgettingcreatedinkubernetesbutdeploymentexists?【发布时间】:2019-10-2517:56:41【问题描述】:我有一个在Azure云上运行的集群。我在该集群上部署了对等服务。但是该部署的pod... 查看详情

如何在 kubernetes Jobs 中创建 init 容器?

】如何在kubernetesJobs中创建init容器?【英文标题】:HowtocreateinitcontainerinkubernetesJobs?【发布时间】:2020-08-0604:18:26【问题描述】:在job.yaml下面用于创建工作。未创建初始化容器。[root@app]#kubectl版本客户端版本:version.InfoMajor:"1",M... 查看详情

Kubernetes NFS 服务器占用 100% cpu

】KubernetesNFS服务器占用100%cpu【英文标题】:KubernetesNFSserveristaking100%cpu【发布时间】:2016-03-0515:10:30【问题描述】:当我在nfstutorialofkubernetes中创建RCasgiven以创建nfs服务器时,它使用n1-standard-1nodefromGCE的100%cpu:Pod日志没有返回任... 查看详情

访问在 kubernetes 集群中创建的微服务 (Laravel/Lumen PHP)

】访问在kubernetes集群中创建的微服务(Laravel/LumenPHP)【英文标题】:Accessingamicroservicecreatedinsideakubernetescluster(Laravel/LumenPHP)【发布时间】:2021-08-0807:00:07【问题描述】:我在理解和让它发挥作用时遇到了一些麻烦。所以基本上我已... 查看详情

如何使用 RBAC API 在 Kubernetes 中创建受限于命名空间的用户/组?

】如何使用RBACAPI在Kubernetes中创建受限于命名空间的用户/组?【英文标题】:Howtocreateusers/groupsrestrictedtonamespaceinKubernetesusingRBACAPI?【发布时间】:2017-05-0915:07:30【问题描述】:问题我想向dev组内的许多不同的开发人员(不同的主... 查看详情

无法在 Kubernetes 集群中执行 GitLab Runner:无法在命名空间“gitlab”中的 API 组“”中创建资源“秘密”

】无法在Kubernetes集群中执行GitLabRunner:无法在命名空间“gitlab”中的API组“”中创建资源“秘密”【英文标题】:NotabletoexecuteGitLabRunnerinKubernetescluster:cannotcreateresource"secrets"inAPIgroup""inthenamespace"gitlab"【发... 查看详情

k3s-轻量级k8s、kuboard面板,安装使用教程

参考技术A1、Helm是Kubernetes的包管理器2、NFS即网络文件系统3、K3s轻量级的Kubernetes发行版4、Kuboard,k8s面板https://kuboard.cn/learning在浏览器中打开链接http://your-ip-address:30080,记得开放安全组端口,k8s端口范围30000-32767输入初始用户名... 查看详情

在 K3s 中使用 Kubernetes 服务端点的本地 Mongo DB 容器访问不起作用

】在K3s中使用Kubernetes服务端点的本地MongoDB容器访问不起作用【英文标题】:LocalMongoDBContainerAccesswithKubernetesServiceEndpointinK3sisnotworking【发布时间】:2022-01-2203:52:09【问题描述】:之前我使用早期的kubeadm从运行在Docker容器中的本... 查看详情

terraform-kubernetes-provider 如何从文件中创建秘密?

】terraform-kubernetes-provider如何从文件中创建秘密?【英文标题】:terraform-kubernetes-providerhowtocreatesecretfromfile?【发布时间】:2019-08-1601:38:11【问题描述】:我正在使用terraformkubernetes-provider,我想将类似kubectl的命令翻译成TF:kubectlc... 查看详情

Kubernetes:增加 K3s 中 OverlayFS / containerd 运行时卷的大小

】Kubernetes:增加K3s中OverlayFS/containerd运行时卷的大小【英文标题】:Kubernetes:IncreasethesizeofOverlayFS/containerdruntimevolumesinK3s【发布时间】:2021-03-2902:37:55【问题描述】:我有一个使用Rancher的K3s部署的轻量级Kubernetes集群。大多数时候... 查看详情

k8s中创建nfs外部供应商(provisioner)(代码片段)

1、环境说明操作系统:cenots7.9k8s版本:1.25容器运行时:containerdnfs:1.3.02、搭建nfs服务1、服务端1、安装nfs服务yuminstall-ynfs-utilsrpcbindnet-tools2、修改配置文件vim/etc/exports/data/nfs*(rw,no_root_squash,sync)3、创建共享目录mkdir/data/nfs-p4、授... 查看详情

Kubernetes (k3s):集群上的过期证书

】Kubernetes(k3s):集群上的过期证书【英文标题】:Kubernets(k3s):expiredcertsoncluster【发布时间】:2021-03-0203:50:34【问题描述】:我刚刚无法访问我的k3s。这周我检查了证书是否已自动更新……结果是这样的:[root@vmpkube001tls]#forcrtin*.cr... 查看详情

在kubernetes中部署kubersphere(代码片段)

活动地址:毕业季·进击的技术er在kubernetes中部署kubersphere一、检查本地kubernetes环境二、安装nfs1.安装nfs包2.创建共享目录3.配置共享目录4.启动相关服务5.使配置生效6.查看nfs7.两台从节点挂载nfs①从节点检查nfs②创建挂载目录... 查看详情

如何在 kubernetes(1.10.3) 中直接挂载外部 NFS 共享/卷

】如何在kubernetes(1.10.3)中直接挂载外部NFS共享/卷【英文标题】:HowtodirectlymountexternalNFSshare/volumeinkubernetes(1.10.3)【发布时间】:2018-11-1423:21:37【问题描述】:我正在使用kubernetes:v1.10.3,我有一个外部NFS服务器,我可以安装在任... 查看详情

NFS/hostPath 在 kubernetes 中挂载为非 root

】NFS/hostPath在kubernetes中挂载为非root【英文标题】:NFS/hostPathmountasnon-rootinkubernetes【发布时间】:2021-07-0214:05:29【问题描述】:如何以Alejandra(1001)用户身份挂载NFS?apiVersion:apps/v1kind:Deploymentmetadata:namespace:external-nsname:app1labels:ap 查看详情

在 kubernetes 上使用 NFS 共享时速度缓慢[关闭]

】在kubernetes上使用NFS共享时速度缓慢[关闭]【英文标题】:SlownesswhileusingNFSsharesonkubernetes[closed]【发布时间】:2021-08-1009:05:17【问题描述】:我有一个K8s-Cluster正在运行,它有一些运行PostgreSQL的Pod/Statefulsets。作为PersistenVolumes,... 查看详情

云原生之kubernetes实战在kubernetes集群下部署rainbond平台

【云原生之kubernetes实战】在kubernetes集群下部署Rainbond平台一、Rainbond介绍1.Rainbond简介2.Rainbond特点二、检查本地kubernetes集群状态1.检查工作节点状态2.检查系统pod状态三、安装nfs共享存储1.安装nfs2.配置共享目录3.使配置生效4.设置... 查看详情

入门实践丨如何在k3s上部署web应用程序(代码片段)

...MongoDB数据库的TODO应用程序,并学习如何将其部署到Kubernetes上。这篇文章是针对初学者的,如果你之前没有深度接触过Kubernetes集群,也不要担心!我们将使用K3s,这是一个轻量级的Kubernetes发行版,非常适 查看详情