【问题标题】:How can I mount folder correctly in kubernetes如何在 kubernetes 中正确挂载文件夹
【发布时间】:2022-01-21 12:20:53
【问题描述】:

我正在尝试在我的 minikube kubernetes 集群(“集群”,它的一个节点:D)中运行 nodered。

执行此操作的 docker 命令是示例:

docker run -it -p 1880:1880 -v /home/user/node_red_data:/data --name mynodered nodered/node-red

但我没有在 docker 中运行它,我正在尝试在 minikube 中运行它。 minikube 的文档指出主机上的 /data 是持久化的。所以我想要一个 /data/nodered 作为 /data 安装在 nodered 容器上。

我从添加存储类开始:

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: local-storage
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: Immediate

然后添加持久化存储:

apiVersion: v1
kind: PersistentVolume
metadata:
  name: small-pv
spec:
  capacity:
    storage: 1Gi
  accessModes:
  - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  storageClassName: local-storage
  local:
    path: /data
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - minikube

然后是节点的持久卷声明:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: nodered-claim
spec:
  storageClassName: local-storage
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi

然后是部署:

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: nodered
  name: nodered
spec:
  replicas: 1
  volumes:
    - name: nodered-claim
      persistentVolumeClaim:
        claimName: nodered-claim
  selector:
    matchLabels:
      app: nodered
  template:
    metadata:
      labels:
        app: nodered
    spec:
      containers:
      - name: nodered
        image: nodered/node-red:latest
        ports:
        - containerPort: 1880
      volumeMounts:
      - name: nodered-claim
        mountPath: "/data"
        subPath: "nodered"

我检查了 kubernetes 仪表板,一切都是绿色的,并且音量已绑定。我在 nodered 中创建了一个简单的 http 服务并进行了部署。它正在运行,但没有保存任何内容。因此,如果部署失败并重新部署,它将是空的。

我检查了在 docker 中运行的 minikube 实例上的 /data 和 /data/nodered 文件夹,但它们是空的。

【问题讨论】:

    标签: kubernetes minikube


    【解决方案1】:

    您的部署规范应该返回错误,请尝试以下操作:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      labels:
        app: nodered
      name: nodered
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: nodered
      template:
        metadata:
          labels:
            app: nodered
        spec:
          containers:
          - name: nodered
            image: nodered/node-red:latest
            ports:
            - containerPort: 1880
            volumeMounts:
            - name: nodered-claim
              mountPath: /data/nodered
              # subPath: nodered <-- not needed in your case
          volumes:
          - name: nodered-claim
            persistentVolumeClaim:
              claimName: nodered-claim
    

    【讨论】:

    • 感谢您的回复。将 mountPath 设置为 /data/nodered 如何将它作为 /data 挂载到 nodered 容器中?这就是要求。我需要将主机上的 /data/nodered 挂载到 nodered 容器上的 /data
    • 注意本地路径是指主机上的路径,而mountPath是指容器中的路径。根据您的原始规范,您的 PV 代表主机上的 /data 并且您希望将其挂载为容器中的 /data/nodered。你有相反的评论吗?
    猜你喜欢
    • 2020-06-04
    • 1970-01-01
    • 1970-01-01
    • 2021-04-11
    • 2019-10-18
    • 1970-01-01
    • 2019-04-10
    • 2017-11-11
    • 1970-01-01
    相关资源
    最近更新 更多