我正在尝试从一个包含多个文件和kubernetes容器的文件夹的文件夹中挂载特定文件作为备份到主机的路径中。
我正在使用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”,以便该文件在我的主机中的备份。
我发现了“主机路径”卷,但是按照kubernetes论坛的建议,它似乎不适合生产。
请让我知道可用于从Pod中的文件夹装载特定文件的卷,以便我可以通过主机访问它。
答案 0 :(得分:0)
如果您的目标是将文件mounted
发送到主机文件系统,而不是hostPath
,但是使用它的主要缺点是,当您的Pod终止时,可能被安排到不同的节点。在这种情况下,数据将丢失。如果这很重要,则可以通过为节点设置适当的标签来解决此问题。
要安装文件而不是目录,可以使用subPath
,例如本示例:
volumeMounts:
- name: test
mountPath: /var/lib/postgresql/data/config.ini
subPath: config.ini
您还需要将mountPath
与目录和文件名一起使用,并将subPath
字段与文件名一起使用。
您可以使用NFS服务器来代替hostPath
,并且如果必须在主机上安装服务器,则可以将nfs
装入服务器。这样,您可以确保保留该卷的内容。
然后像this example中那样安装服务器:
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
让我知道是否有帮助。