kubernetes - 如何在 Kubernetes 中包含多个文件和文件夹的 pod 文件夹中挂载特定文件
问题描述
我正在尝试将包含 kubernetes pod 的多个文件和文件夹的文件夹中的特定文件挂载到主机的路径中作为备份。
我将 PersistentVolumeClaim 用作卷,并且能够挂载整个文件夹而不是该特定文件。并且可以通过主机路径访问此文件夹。
以下是我的部署、PVC 和 PV 文件。
部署文件:
containers:
- name: katana-db
image: postgres:10.4
imagePullPolicy: IfNotPresent
envFrom:
- configMapRef:
name: war-config
volumeMounts:
- mountPath: /var/lib/postgresql/data
name: katana-db
volumes:
- name: katana-db
persistentVolumeClaim:
claimName: katana-db-volume-claim
持久卷声明:
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: katana-db-volume-claim
namespace: {{ $.Values.namespace }}
creationTimestamp: null
spec:
storageClassName: manual
accessModes:
- ReadWriteMany
resources:
requests:
storage: 1Gi
volumeName: "katana-db-volume"
---
持久卷:
---
kind: PersistentVolume
apiVersion: v1
metadata:
name: katana-db-volume
namespace: {{ $.Values.namespace }}
spec:
storageClassName: manual
capacity:
storage: 2Gi
persistentVolumeReclaimPolicy: Retain
accessModes:
- ReadWriteMany
nfs:
path: /mnt/k8sMount/data/local-persist/data/warrior/katana-db
server: 167.254.204.64
---
我想挂载文件“/var/lib/postgresql/data/config.ini”而不是我在部署文件中提到的完整文件夹“/var/lib/postgresql/data”,以便我可以备份这个文件在我的主机中。
我找到了“hostpath”卷,但它似乎不适合 kubernetes 论坛建议的生产。
请让我知道我可以用来从 Pod 中的文件夹挂载特定文件的卷,以便我可以通过主机访问它。
解决方案
如果您的目标是将文件保存mounted
到主机文件系统,那么hostPath
使用它的主要缺点是,当您的 pod 终止时,它可能会被安排到不同的节点中。在这种情况下,数据将丢失。如果这很重要,您可以通过为节点设置适当的标签来解决此问题。
要挂载文件而不是目录,您可以subPath
在此示例中使用:
volumeMounts:
- name: test
mountPath: /var/lib/postgresql/data/config.ini
subPath: config.ini
您还需要使用mountPath
目录和文件名以及subPath
带有文件名的字段。
hostPath
您可以使用NFS服务器代替, 如果您必须在主机上安装它,您可以将其挂载nfs
到其中。有了这个,您可以确保该卷的内容被保留。
然后就像在这个例子中那样安装服务器:
volumeMounts:
- name: test
mountPath: /var/lib/postgresql/data/config.ini
subPath: config.ini
volumes:
- name: nfs-volume
nfs:
server: nfs.example.com # Change this to your NFS server
path: /data # Change it to something relevant for your case
让我知道它是否有帮助。
推荐阅读
- powershell - 当文件夹为 yyyy 时停止递归
- c# - 单元测试项目无法获取项目资源文件
- dataweave - DataWeave groupBy 和 maxBy
- angular - 使用异步功能完成地图时执行操作
- c# - 如何将 IHttpActionResult(内部带有 JSON)转换为我可以使用 LINQ 处理的对象
- excel - 单元格的值不被识别为等于列表框项目,即使它是
- reactjs - 更新数组中对象的状态并使用 react-native 更改文本样式
- neural-network - 我们可以从图像分割任务中创建显着图吗?
- linux - xfce 中的窗饰缺失
- azure - 无法保存 Azure 机器人名称