gpt4 book ai didi

kubernetes - 如何通过pvc在Kubernetes中挂载数据文件?

转载 作者:行者123 更新时间:2023-12-04 01:08:29 25 4
gpt4 key购买 nike

我想在kubernetes中使用glusterfs通过pvc持久化数据文件,我会挂载目录,它会工作,但是当我尝试挂载文件时,它将失败,因为文件已挂载到目录类型,我该如何在k8s中挂载数据文件?

图片信息:error log

pod yaml file

最佳答案

how can I mount the data file in k8s ?



这通常是特定于应用程序的,并且有几种方法可以实现,但是主要是您想了解 subPath

通常,您可以选择:
  • 使用subPath分隔配置文件。
  • 将卷/路径作为目录挂载在其他位置,然后将文件链接到pod中的特定位置(在极少数情况下,与其他配置文件或同一目录中的目录权限混合会出现问题,或者应用程序的启动/启动策略会阻止文件(安装在 pods 起点处,但必须在执行一些初始化后才出现)(真正的边缘情况)。
  • 使用ConfigMaps(甚至Secrets)来保存配置文件。请注意,如果将subPath与configMap和Secret Pod一起使用不会自动在那里获得更新,但是是处理配置文件的更常见的方式,并且conf/interpreter.json看起来像是一个很好的示例...

  • 注意事项:
  • 挂载是“重叠的”基础路径,因此必须将文件挂载到文件的最高点才能与其他文件共享其文件夹。共享多达一个文件夹将使您的文件夹中包含单个文件,这通常不是必需的。
  • 如果您使用ConfigMaps,则即使您在ConfigMap中只有一个文件,也必须使用subPath引用单个文件才能挂载它。像这样:
    containers:
    - volumeMounts:
    - name: my-config
    mountPath: /my-app/my-config.json
    subPath: config.json
    volumes:
    - name: my-config
    configMap:
    name: cm-my-config-map-example

  • 编辑:

    使用 example.sh将单个 /bin脚本文件安装到容器的 ConfigMap目录的完整示例。

    您可以调整此示例,以适应将具有任何特权的任何文件放置在任何所需文件夹中的需要。用任何所需的替换 my-namespace(或完全删除 default一个)

    配置图:
    kind: ConfigMap
    apiVersion: v1
    metadata:
    namespace: my-namespace
    name: cm-example-script
    data:
    example-script.sh: |
    #!/bin/bash
    echo "Yaaaay! It's an example!"

    部署:
    apiVersion: apps/v1
    kind: Deployment
    metadata:
    namespace: my-namespace
    name: example-deployment
    labels:
    app: example-app
    spec:
    selector:
    matchLabels:
    app: example-app
    strategy:
    type: Recreate
    template:
    metadata:
    labels:
    app: example-app
    spec:
    containers:
    - image: ubuntu:16.04
    name: example-app-container
    stdin: true
    tty: true
    volumeMounts:
    - mountPath: /bin/example-script.sh
    subPath: example-script.sh
    name: example-script
    volumes:
    - name: example-script
    configMap:
    name: cm-example-script
    defaultMode: 0744

    使用持久卷将单个 test.txt文件安装到容器的 /bin目录的完整示例(该文件已存在于卷的根目录中)。

    但是,如果您希望使用永久性卷而不是configMap进行挂载,这是另一个以相同方式挂载的示例(test.txt在/bin/test.txt中挂载)...注意两件事:PV上必须存在 test.txt而且我正在使用statefulset来与自动配置的pvc一起运行,您可以进行相应的调整...
    apiVersion: apps/v1
    kind: StatefulSet
    metadata:
    namespace: my-namespace
    name: ss-example-file-mount
    spec:
    serviceName: svc-example-file-mount
    replicas: 1
    selector:
    matchLabels:
    app: example-app
    template:
    metadata:
    labels:
    app: example-app
    spec:
    containers:
    - image: ubuntu:16.04
    name: example-app-container
    stdin: true
    tty: true
    volumeMounts:
    - name: persistent-storage-example
    mountPath: /bin/test.txt
    subPath: test.txt
    volumeClaimTemplates:
    - metadata:
    name: persistent-storage-example
    spec:
    storageClassName: sc-my-storage-class-for-provisioning-pv
    accessModes: [ ReadWriteOnce ]
    resources:
    requests:
    storage: 2Gi

    关于kubernetes - 如何通过pvc在Kubernetes中挂载数据文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51648465/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com