如何在包含Kubernetes中的多个文件和文件夹的Pod文件夹中挂载特定文件

时间:2020-04-14 18:33:52

标签: kubernetes nfs

我正在尝试从一个包含多个文件和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中的文件夹装载特定文件的卷,以便我可以通过主机访问它。

1 个答案:

答案 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

让我知道是否有帮助。