首页 > 解决方案 > 如何将容器中的目录挂载到主机中

问题描述

我为微服务创建了一个部署 yaml。我正在使用hostpath卷类型,persistentVolume并且必须将数据复制到主机中的路径。但是我想将容器中的目录挂载到主机中,因为数据在容器中,而我需要主机中的这些数据。

我的部署 yaml:

#create persistent volume
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv-vol
spec:
  storageClassName: manual
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: /opt/storage/app

#create persistent volume clame
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: app-pv-claim
spec:
  storageClassName: manual
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi
#create Deployment
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: app-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      deploy: app
  template:
    metadata:
      labels:
        deploy: app
    spec:
      hostname: app
      hostNetwork: false
      containers:
        - name: app
          image: 192.168.10.10:2021/project/app:latest
          volumeMounts:
            - mountPath: /opt/app
              name: project-volume
      volumes:
        - name: project-volume
          persistentVolumeClaim:
            claimName: app-pv-claim

标签: kubernetesdeploymentpersistent-volumespersistent-volume-claims

解决方案


由于信息空白,我正在写一个一般性的答案。

首先你应该知道:

HostPath 卷存在许多安全风险,最好的做法是尽可能避免使用 HostPath。当必须使用 HostPath 卷时,它的范围应仅限于所需的文件或目录,并以只读方式挂载。

但使用hostPath也为某些应用程序提供了强大的逃生舱口。

如果你仍然想使用它,首先你应该检查两个 Pod(创建数据的 Pod 和想要访问数据的第二个 Pod)是否在同一个节点上。以下命令将向您展示。

kubectl get pods -o wide 

任何 pod 创建的所有数据都应该保留在hostPath目录中,并且只要它们在同一个节点上运行,它们就可以用于每个 pod。

另请参阅有关 hostPath 的文档。


推荐阅读